完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define uint unsgined int #define uchar unsigned char ***it beep=P2^3; ***it dula=P2^6; ***it wela=P2^7; ***it s1=P3^6; ***it s2=P3^7; ***it lcdrs=P3^5; ***it lcden=P3^4; uchar code dis1[]={" STOPWATCH 0 "}; uchar code dis2[]={" HU SI JIAN "}; uchar code dis3[]={"tiME "}; uchar code dis4[]={" BEGIN COUNT 1 "}; uchar code dis5[]={" PAUSE COUNT 2 "}; uchar code dis6[]={" BEGIN COUNT 3 "}; uchar code dis7[]={" PAUSE COUNT 4 "}; uchar display[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uchar display1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uchar count; void delay1() {_nop_();_nop_();_nop_();} void delay(uint z) { uint x; while(z--) for(x=110;x>0;x--); } void di() { beep=0; delay(200); beep=1; } /************************************* * * * 1602显示屏函数 * * * *************************************/ void write_com(uchar com) { lcden=0; lcdrs=0; P0=com; delay1(); lcden=1; delay1(); lcden=0; } void write_date(uchar date) { lcden=0; lcdrs=1; P0=date; delay1(); lcden=1; delay1(); lcden=0; } void lcd_pos(uchar pos) { write_com(pos|0x80); //位置指针=0x80+地址变量 } /************************************* * * * 显示函数部分 * * * *************************************/ void play() { uchar i; for(i=0;i<6;i++) { display1=display+0x30; } display1[7]=display[6]/10+0x30; display1[6]=display[6]%10+0x30; lcd_pos(0x45); write_date(display1[7]); write_date(display1[6]); write_date(0x3a); write_date(display1[5]); write_date(display1[4]); write_date(0x3a); write_date(display1[3]); write_date(display1[2]); write_date(0x3a); write_date(display1[1]); write_date(display1[0]); } /************************************* * * * 初始化函数部分 * * * *************************************/ void init() { wela=0; dula=0; lcden=0; TMOD=0X01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; write_com(0x01); write_com(0x38); write_com(0x0c); write_com(0x06); } /************************************* * * * 主函数函数部分 * * * *************************************/ void main() { uchar num; init(); for(num=0;num<16;num++) { write_date(dis1[num]); delay(10); } lcd_pos(0x40); for(num=0;num<16;num++) { write_date(dis2[num]); delay(10); } delay(2000); lcd_pos(0x40); for(num=0;num<16;num++) { write_date(dis3[num]); delay(10); } delay(20); while(1) { if(s1==0) { delay(5); if(s1==0) { count++; } while(!s1); di(); } if(s2==0) { delay(5); if(s2==0) { count=0; TR0=0; for(num=0;num<6;num++) { display[num]=0x00; } lcd_pos(0x00); for(num=0;num<16;num++) { write_date(dis1[num]); } } while(!s2); di(); } switch(count) { case 1: TR0=1; lcd_pos(0x00); for(num=0;num<16;num++) { write_date(dis4[num]); } break; case 2: TR0=0; lcd_pos(0x00); for(num=0;num<16;num++) { write_date(dis5[num]); } break; case 3: TR0=1; lcd_pos(0x00); for(num=0;num<16;num++) { write_date(dis6[num]); } break; case 4: TR0=0; lcd_pos(0x00); for(num=0;num<16;num++) { write_date(dis7[num]); } break; default: TR0=0; break; } play(); } } /************************************* * * * 定时器中断函数部分 * * * *************************************/ void time0() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; display[0]++; if(display[0]==10) { display[0]=0; display[1]++; } if(display[1]==10) { display[1]=0; display[2]++; //秒个位 } if(display[2]==10) { display[2]=0; display[3]++; //秒十位 } if(display[3]==6) { display[3]=0; display[4]++; //分个位 } if(display[4]==10) { display[4]=0; display[5]++; //分十位 } if(display[5]==6) { display[5]=0; display[6]++; //时 } if(display[6]==24) display[6]=0; } |
|
相关推荐
3个回答
|
|
新手求解啊~~~~~~
|
|
|
|
代码好长啊!!!!
|
|
|
|
来大神解释啊~~~~~求解~~~
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
21 浏览 0 评论
327 浏览 0 评论
607 浏览 1 评论
852 浏览 0 评论
【xG24 Matter开发套件试用体验】初上手开发板和官方IDE
579 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10195 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-7-17 17:36 , Processed in 0.638777 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191