完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用1602作为显示屏进行计时,我打算按键按下时计时开始,可是为什么不行呢????求指教,
#include #include ***it LCD_RS = P2^6; ***it LCD_RW = P2^5; ***it LCD_EN = P2^7; ***it K1=P2^4; unsigned char tt,miao,fen,shi; unsigned char a[]=" Conter "; char b[]=" 00:00:00 ";/**********延时函数**********/ void delay(int ms) { int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } delay1( unsigned int z) { unsigned char x,y; for( x=z;x>0;x--) for( y=110;y>0;y--); } /******测忙函数********/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; } /*****写指令数据******/ void write_com(unsigned char com) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = com; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; } /*****写显示数据*****/ void write_date (unsigned char date) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = date; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; } void write_sfm(unsigned char add,unsigned char date) { unsigned char shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } /****LCD初始化****/ void init() { unsigned int i; write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x01); delay(5); write_com(0x80); for( i=0;i<16;i++) { write_date( a); delay1(5); } write_com(0x80+0x40); for(i=0;i<12;i++) { write_date(b); delay1(5); } TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void main() { //unsigned char i; init(); while(1) { ; } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(K1==0) { delay1(5); if(K1==0) { tt++; if(tt==20) { tt=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; } write_sfm( 4,shi); } write_sfm(7,fen); } write_sfm(10,miao); } } } } |
|
相关推荐
3个回答
|
|
我这样写他还是不对啊。。。你帮我看看有什么问题吗?谢谢
#include #include ***it LCD_RS = 2^6; ***it LCD_RW = 2^5; ***it LCD_EN = 2^7; ***it K1=P2^4; unsigned char tt,miao,fen,shi; unsigned char a[]=" Conter "; char b[]=" 00:00:00";/**********延时函数**********/ void delay(int ms) { int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } delay1( unsigned int z) { unsigned char x,y; for( x=z;x>0;x--) for( y=110;y>0;y--); } /******测忙函数********/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; } /*****写指令数据******/ void write_com(unsigned char com) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_();  0 = com; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; } /*****写显示数据*****/ void write_date (unsigned char date) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0;  0 = date; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; } void write_sfm(unsigned char add,unsigned char date) { unsigned char shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } /****LCD初始化****/ void init() { unsigned int i; write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x01); delay(5); write_com(0x80); for( i=0;i<16;i++) { write_date( a); delay1(5); } write_com(0x80+0x40); for(i=0;i<12;i++) { write_date(b); delay1(5); } TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } /*void disply() { }*/ void main() { //unsigned char i; init(); while(1) { if(K1==0) { delay1(10); while(K1==0) { delay1(5); if(tt==20) { tt=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; } write_sfm( 4,shi); } write_sfm(7,fen); } write_sfm(10,miao); } } } } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; } |
|
|
|
|
|
按键开始计时和对时分秒的进位判断是两个操作,不能做嵌套,按键判断是一个单独动作,按键按下后是开启定时器中断,开始计时,并设置一个计时开始标志。
对时分秒的进位判断是先判断是否开始计时,开始计时后才做对时分秒的进位判断 |
|
|
|
只有小组成员才能发言,加入小组>>
3294 浏览 9 评论
2970 浏览 16 评论
3473 浏览 1 评论
9023 浏览 16 评论
4061 浏览 18 评论
1140浏览 3评论
589浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
579浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2313浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1876浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 08:10 , Processed in 2.348027 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号