基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机数码管的电子钟(郭天祥系列单片机)
功能说明
(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
#define uchar unsigned char
#define uint unsigned int
sbit 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 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) { t e m p i = ; TR0=1; while(!key1) switch(temp2) { case 0:display(hour1,sec1 );break; case 1:display(year1 ,mon1 ,day1 );break; case 2: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;