基于单片机数码管的电子钟(郭天祥系列单片机)功能说明(D本电子钟可以显示当前时刻、年月日和闹钟时刻。
不同时间的显示可以用key4来切换。
(2)、独立键盘key—key4(左到右)调节不同功能,7段数码管显示。
(3)整点提示功能:当时间为整点时,蜂鸣器会滴滴滴响,响20秒;(4)闹铃功能:本程序有闹铃功能,当定时时间到时,闹铃会滴滴滴报警,报警30秒;(5)附加功能:当在闹铃和整点时,8个发光二极管会闪亮;(6)时、分、秒之间和年、月、日之间也是用分割。
2、键盘控制(1)key1-键移动调整单位,每按一次移动一个单位,可调整时分秒、年月日和闹钟时间。
比如:在显示时分秒时,按下keyl 键, 可通过key2和key3对'秒'加减;再按一下keyl,可对"分'加减;再按一下keyl,可对"时'加减;再按keyl,时间开始走动(2)key2-加 1 ; key3-减 1;(3)key4-键切换时分秒、年月日和闹铃时间的显示。
比如:当前为时分秒,按一下key4,则显示年月;再按一下,则显示闹铃时间;再按一下,则显示时分秒时间。
附录:C语言程序〃设计项目:带闹铃的电子钟//功能:keyV键:开始/调时分秒/调年月日/调定时// key2 ■键:加 1// key3-键:减 1// key4-键:切换页面#in clude<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;sbit wela=P2A7;sbit key1=P3A4;sbit key2=P3A5;sbit key3=P3A6;sbit key4=P3A7;sbit bear=P2A3;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar sed ,hour1 ,year1 ,mon1 ,day1,tempi ,temp2,sec2,min2,hour2; void keyscan();void display(uchar hour,uchar min,uchar sec);void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void init(){TMOD=0X02;TH0=6;TL0=6;EA=1;ET0=1;TR0=1;hour1=00;mini =00;sed =00;year1=12;mon1=03;day1=10;void display(uchar hour,uchar min,uchar sec) { uchar s1 ,s2,m15m2,h1 ,h2;s2=sec/10;s1=sec%10;m2=min/10;m1=min%10;h2=hour/10;h1=hour%10;dula=1;P0=table[h2];dula=0;P0=0XFF;wela=1;P0=0XFE;delay(1);dula=1;P0=table[h1]+0x80;dula=0;P0=0XFF;wela=1;P0=0XFd;delay(1);dula=1;P0=table[m2];dula=0;P0=0XFF;wela=1;P0=0XFb;delay(1);dula=1;P0=table[m1]+0x80;dula=0;P0=0XFF;wela=1;P0=0XF7;delay(1);dula=1;P0=table[s2];dula=0;PO=OXFf;wela=1;P0=0Xef;delay(1);dula=1; PO=table[s1J; dula=0; P0=0XFF; wela=1; PO=OXdf; delay(1);}void keyscan()if(key1 ==0)delay(10); if(key1 ==0)//TR0=0; tempi++; if(temp1 ==4){tempi=;TR0=1;while(!key1)switch(temp2){case 0:display(hour1,sec1 );break; case1:display(year1 ,mon1 ,day1 );break; case2:display(hour2,min2,sec2);break;if(key2==0){delay(10); if(key2==0){ if(temp2==0) { TR0=0;switch(templ){case 1:sed ++;if(sec1 ==60)sec1 =O;break;case 2:min1 ++;if(min1 ==60)min1 =O;break;case 3:hour1 ++;if(hour1 ==24)hour1 =O;break;while(!key2) display(hour1 ,min1 ,sec1);if(temp2==1) { TR0=1;switch(templ)case 1:day1 ++;if(day1==31 )day1=1 ;break; case 2:mon1 ++;if(mon1==13)mon1 =1 ;break;case 3:year1 ++;if(year1 ==100)year1 =0;break; } while(!key2)display(year1 ,mon1 ,day1);if(temp2==2) { TR0=1;switch(templ)case 1:sec2++;if(sec2==60)sec2=0;break;case 2:min2++;if(min2==60)min2=0;break;case 3:hour2++;if(hour2==24)hour2=0;break; }while(!key2)display(hour2,min2,sec2);if(key3==0){delay(10); if(key3==0){if(temp2==0){ TR0=0;switch(templ){case 1:if(sec1 ==0)sec1 =60;sec1 ~;break;case 2:if(min1 ==0)min1 =60;min1 -;break;case 3:if(hour1 ==0)hour1 =24;hour1 -;break; } while(!key3)display(hour1 ,min1 ,sec1);if(temp2==1){ TR0=1;switch(templ){case 1:if(day1==1 )day1=31 ;day1-;break;case 2:if(mon1==1 )mon1 =13;mon1 ・-;break;case 3:if(year1 ==0)year1 =100;year1 -;break; } while(!key3) display(year1 ,mon1,day1);}if(temp2==2){ TR0=1;switch(templ){case 1:if(sec2==0)sec2=60;sec2-;break;case 2:if(min2==0)min2=60;min2-;break;case 3:if(hour2==0)hour2=24;hour2-;break; } while(!key3)display(hour2,mi n2,sec2);if(key4==0)delay(10); if(key4==O)tempi =0;temp2++; if(temp2==3)temp2=0;while(!key4) switch(temp2){case 0:display(hour1 ,min1 ,sec1);break; case1:display(year1 ,mon1 ,day1 );break;case 2:display(hour2,min2,sec2);break;switch(temp2){case 0:display(hour1 ,min1 ,sec1 );break;case 1:display(year1 ,mon1 ,day1 );break; case2:display(hour2,min2,sec2);break;void alarm(){uint i;if((hour1==hour2&&min1==min2&&(sec1 >=sec2&&sec1 <sec2+30))||(min1==0 &&sec"l <20)) { for(i=0;i<20;i++){bear=~bear;P1=~P1;switch(temp2){case 0:display(hour1,mi,sec1 );break;case 1:display(year1 ,mon1 ,day1);break;case 2:display(hour2,min2,sec2);break;}delay(30);}bear=1;P1=Oxff;void main(){init();while(1){keyscan();{if (key 1 ==0 || key2==0 || key3==0 || key4==O )Bear=0}alarm();void time1()interrupt 1{uint m;m++;if(m==3686){m=0;sec1++;if(sec1 ==60){sec1=0;min1++;if(min1==60){min1=0; hour1++; if(hour1==24)hour1=0;day1++; if(day1==31) {day1=1;mon 1++;if(mon1==13){mon1 =1; year1++; if(year1==100) year1=0;。