电子时钟源程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includereg51.h#includeintrins.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[][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_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)return;switch(month){case2://二月有28或29天if((year%4==0&&year%100!=0)||(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;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_count){case1://秒调整second=++second%60;break;case2://分调整minute=++minute%60;break;case3://时调整hour=++hour%24;break;case4://日调整day=(month==4||month==6||month==9||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(key_down==0)//调整-{delay(4);switch(function_count){case1://秒调整second=(second0)?--second:59;break;case2://分调整minute=(minute==0)?59:--minute;break;case3://时调整hour=(hour==0)?23:--hour;break;case4://日调整day=(month==4||month==6||month==9||month==11)?(day==1)?30:--day:(day==1)?31:--day;break;case5://月调整month=(month==1)?12:--month;break;case6://年调整year=(year==2000)?3000:--year;}while(key_down==0)DSY_show();}}}voidDSY_show()//显示函数{uchari;for(i=8;i0;i--){P2=_crol_(P2,1);//位选switch(function_count)//分情况显示{case0://分别显示日期和时间P0=~DSY_CODE[Display_Buffer[change][n]];break;case1://秒调整显示if(DSY_count150){Display_Buffer[1][6]=11;Display_Buffer[1][7]=11;}P0=~DSY_CODE[Display_Buffer[1][n]];break;case2://分调整显示if(DSY_count150){Display_Buffer[1][3]=11;Display_Buffer[1][4]=11;}P0=~DSY_CODE[Display_Buffer[1][n]];break;case3://时调整显示if(DSY_count150){Display_Buffer[1][0]=11;Display_Buffer[1][1]=11;}P0=~DSY_CODE[Display_Buffer[1][n]];break;case4://日调整显示if(DSY_count150){Display_Buffer[0][6]=11;Display_Buffer[0][7]=11;}P0=~DSY_CODE[Display_Buffer[0][n]];break;case5://月调整显示if(DSY_count150){Display_Buffer[0][4]=11;Display_Buffer[0][5]=11;}P0=~DSY_CODE[Display_Buffer[0][n]];break;case6://年调整显示if(DSY_count150){Display_Buffer[0][0]=11;Display_Buffer[0][1]=11;Display_Buffer[0][2]=11;Display_Buffer[0][3]=11;}P0=~DSY_CODE[Display_Buffer[0][n]];}n=++n%8;DSY_count=++DSY_count%250;Display_Buffer[0][0]=year/1000;//显示内容Display_Buffer[0][1]=year/100%10;Display_Buffer[0][2]=year/10%10;Display_Buffer[0][3]=year%10;Display_Buffer[0][4]=month/10;Display_Buffer[0][5]=month%10;Display_Buffer[0][6]=day/10;Display_Buffer[0][7]=day%10;Display_Buffer[1][0]=hour/10;Display_Buffer[1][1]=hour%10;Display_Buffer[1][3]=minute/10;Display_Buffer[1][4]=minute%10;Display_Buffer[1][6]=second/10;Display_Buffer[1][7]=second%10;P0=~DSY_CODE[11];//关段选}}voiddelay(ucharms){uchari;while(ms--)for(i=110;i0;i--);}

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功