资源描述:
《电子时钟源程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include"reg51.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedintsbitkey_Mode=P1^0;sbitkey_up=P1^1;sbitkey_down=P1^2;voidadjust_time();voidDSY_show();voiddelay(ucharms);ucharcodeDSY_CODE[]=//显示数据数组{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};ucharDisplay_Buffer[
2、][8]=//位选数组{{2,0,1,4,0,5,0,6},{1,2,10,0,0,10,0,0},};ucharcounter=0,change=0,n=0,second=0,minute=0,hour=12,day=6,month=5,function_count=0,DSY_count=0;uintyear=2014;voidmain(){P0=0xff;P1=0xff;P2=0x7f;EA=1;ET0=1;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;TR0=1;while(1){adjust_time();DSY_
3、show();}}voidinterrupt_T0()interrupt1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;if(++counter!=20)return;counter=0;second=++second%60;//秒计算if((second%5)==0)//每隔五秒分别显示日期和时间change=++change%2;if(second!=0)return;if(++minute!=60)return;//分计算minute=0;if(++hour!=24)return;//时计算hour=0;if(++day<=28)ret
4、urn;switch(month){case2://二月有28或29天if((year%4==0&&year%100!=0)
5、
6、(year%400==0)){//判断闰年的两个条件if(day==30){day=1;month=3;}}//闰年二月29天else{if(day==29){day=1;month=3;}}//平年二月28天break;case4://4、6、9、11月为30天case6:case9:case11:if(day==31){day=1;month++;}break;default://1、3、5、7、8、10、12月为31天if(day==32){day=1;
7、if(++month!=13)return;//月份满,返回一月month=1;if(++year!=3001)return;//年份范围2000—3000year=2000;}}}voidadjust_time()//日期时间调整函数{if(P1!=0xff)//按键检测{DSY_show();//按键去抖if(key_Mode==0)//调整切换{delay(4);function_count=++function_count%7;while(key_Mode==0)DSY_show();}if(key_up==0)//调整+{delay(4);switch(function_co
8、unt){case1://秒调整second=++second%60;break;case2://分调整minute=++minute%60;break;case3://时调整hour=++hour%24;break;case4://日调整day=(month==4
9、
10、month==6
11、
12、month==9
13、
14、month==11)?day%30+1:day%31+1;break;case5://月调整month=month%12+1;break;case6://年调整year=(year-2000)%1000+2001;}while(key_up==0)DSY_show();}if(ke
15、y_down==0)//调整-{delay(4);switch(function_count){case1://秒调整second=(second>0)?--second:59;break;case2://分调整minute=(minute==0)?59:--minute;break;case3://时调整hour=(hour==0)?23:--hour;break;case4://日调整day=(month==4
16、
17、month==6
18、
19、mon