資源描述:
《電子時鐘源程序.doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。
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[]=//顯示數(shù)據(jù)數(shù)組{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};ucharDisplay_Buffer[
2、][8]=//位選數(shù)組{{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()//日期時間調(diào)整函數(shù){if(P1!=0xff)//按鍵檢測{DSY_show();//按鍵去抖if(key_Mode==0)//調(diào)整切換{delay(4);function_count=++function_count%7;while(key_Mode==0)DSY_show();}if(key_up==0)//調(diào)整+{delay(4);switch(function_co
8、unt){case1://秒調(diào)整second=++second%60;break;case2://分調(diào)整minute=++minute%60;break;case3://時調(diào)整hour=++hour%24;break;case4://日調(diào)整day=(month==4
9、
10、month==6
11、
12、month==9
13、
14、month==11)?day%30+1:day%31+1;break;case5://月調(diào)整month=month%12+1;break;case6://年調(diào)整year=(year-2000)%1000+2001;}while(key_up==0)DSY_show();}if(ke
15、y_down==0)//調(diào)整-{delay(4);switch(function_count){case1://秒調(diào)整second=(second>0)?--second:59;break;case2://分調(diào)整minute=(minute==0)?59:--minute;break;case3://時調(diào)整hour=(hour==0)?23:--hour;break;case4://日調(diào)整day=(month==4
16、
17、month==6
18、
19、mon