基于单片机的数字时钟C程序.doc

基于单片机的数字时钟C程序.doc

ID:51802342

大小:38.00 KB

页数:7页

时间:2020-03-15

基于单片机的数字时钟C程序.doc_第1页
基于单片机的数字时钟C程序.doc_第2页
基于单片机的数字时钟C程序.doc_第3页
基于单片机的数字时钟C程序.doc_第4页
基于单片机的数字时钟C程序.doc_第5页
资源描述:

《基于单片机的数字时钟C程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#defineucharunsignedchar//宏定义,为方便编程#defineDIGIP0//宏定义,将P0口定义为数码管显示口#defineSELECTP2//宏定义,将P2口定义为数码管选择口#defineFUNCTIONP1//宏定义,将P1口定义为功能选择口ucharms,sec,min,hour,day,month;//计时毫秒、秒、分、时、日、月intyear;//计时年ucharcount1,ms1,sec1,min1;//秒表计时参数ucharday1;//

2、各月天数ucharcount;//精确计时ucharpLED;uchara,b,c,d,e,f;//显示参数ucharstate;//功能选择state=0,时钟显示state=1,日期显示state=2,进入调时状态state=3,调时state=4,秒表开始state=5,秒表结束ucharstate1;//调时功能选择state1=0,调节时钟分位state1=1,调节时钟时位state1=2,调节日历日期state1=3,调节日历月份state1=4,调节日历年份sbitDAT=P2^7;//数据线连接的是

3、P2.7sbitPL=P2^6;//锁存线连接的是P2.6sbitCLK=P2^5;//移位时钟连接的是P2.5sbitBP=P2^4;bitxKey;//按键读取指示ucharKeyVal;//当前按键状态组合ucharDispBuf[6];ucharClock[3];//保存时钟参数值ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//显示码表,分别为0~9voidInitT0(void){TMOD=(TMOD&0xF

4、0)

5、0x01;TH0=0xF8;//2msTL0=0xCC;TR0=1;ET0=1;EA=1;}voidT0srv(void)interrupt1using1{uchari;TH0=0xF8;TL0=0xCC;DIGI=0xFF;SELECT=((SELECT&0xF0)

6、0x08)

7、pLED;DIGI=~DispBuf[pLED];if(++pLED==6)pLED=0;if(++count==5)//以下为时钟基时计数{count=0;//10ms复位if(++ms==100){ms=0;//1s复位if(+

8、+sec==60){sec=0;if(++min==60){min=0;if(++hour==24){hour=0;if(++day==day1){day=1;if(++month==12){month=1;year++;}}}}}}}//秒表基时计数if(++count1==5){count1=0;if(++ms1==100){ms1=0;if(++sec1==60){sec1=0;if(++min1==60){min1=0;}}}}if(year%4==0&&month==2)day1=29;//闰年2月为29

9、天if(year%4!=0&&month==2)day1=28;//非闰年2月为28天if(month==4

10、month==6

11、month==9

12、month==11)day1=30;if(month==1

13、month==3

14、month==5

15、month==7

16、month==8

17、month==10

18、month==12)day1=31;if((ms&0x01)==0)//每四次中断即20ms读一次按键状态{CLK=0;PL=0;//锁存命令,发负脉冲PL=1;KeyVal=0;//初值数据为0,无按键for(i=0;i

19、<8;i++)//8次移位循环完成{KeyVal<<=1;//KeyVal左移位1位if(!DAT)KeyVal

20、=0x01;//有键压下,KeyVal末位置1CLK=1;//发移位正脉冲CLK=0;}KeyVal&=0x3F;//只用了6个键,所以最高两位屏蔽掉xKey=1;}}voiddelay(){uchari,j,k;for(i=254;i>0;i--){for(j=254;j>0;j--)for(k=1;k>0;k--);}}voidedittime(){switch(state1){case0://分位

21、调时Clock[1]=Clock[1]+1;delay();if(Clock[1]==61)Clock[1]=0;break;case1://时位调时Clock[2]=Clock[2]+1;delay();if(Clock[2]==25)Clock[2]=0;break;case2://日期调整Clock[0]=Clock[0]+1;delay();if(C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。