基于郭天祥单片机数码管的电子钟含闹钟整点报时.docx
《基于郭天祥单片机数码管的电子钟含闹钟整点报时.docx》由会员分享,可在线阅读,更多相关《基于郭天祥单片机数码管的电子钟含闹钟整点报时.docx(14页珍藏版)》请在冰点文库上搜索。
基于郭天祥单片机数码管的电子钟含闹钟整点报时
基于单片机数码管的电子钟(郭天祥系列单片机)
1、功能说明
(1)本电子钟可以显示当前时刻、年月日和闹钟时刻。
不同时间的显示可以用key4来切换。
(2)、独立键盘key1-key4(左到右)调节不同功能,7段数码管显示。
(3)整点提示功能:
当时间为整点时,蜂鸣器会滴滴滴响,响20秒;
(4)闹铃功能:
本程序有闹铃功能,当定时时间到时,闹铃会滴滴滴报警,报警30秒;
(5)附加功能:
当在闹铃和整点时,8个发光二极管会闪亮;
(6)时、分、秒之间和年、月、日之间也是用“.”分割。
2、键盘控制
(1)key1-键移动调整单位,每按一次移动一个单位,可调整时分秒、年月日和闹钟时间。
比如:
在显示时分秒时,按下key1键,可通过key2和key3对‘秒’加减;再按一下key1,可对‘分’加减;再按一下key1,可对‘时’加减;再按key1,时间开始走动
(2)key2-加1;key3-减1;
(3)key4-键切换时分秒、年月日和闹铃时间的显示。
比如:
当前为时分秒,按一下key4,则显示年月;再按一下,则显示闹铃时间;再按一下,则显示时分秒时间。
图1时分秒显示结果_
______________
图2年月日显示结果
图3定时闹铃显示图
图4整点报时显示图
附录:
C语言程序
//设计项目:
带闹铃的电子钟
//功能:
key1-键:
开始/调时分秒/调年月日/调定时
//key2-键:
加1
//key3-键:
减1
//key4-键:
切换页面
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
sbitbear=P2^3;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71};
ucharsec1,min1,hour1,year1,mon1,day1,temp1,temp2,sec2,min2,hour2;
voidkeyscan();
voiddisplay(ucharhour,ucharmin,ucharsec);
voiddelay(uintz)
{
uintx,y;
for(x=0;xfor(y=0;y<110;y++);
}
voidinit()
{
TMOD=0X02;
TH0=6;
TL0=6;
EA=1;
ET0=1;
TR0=1;
hour1=15;
min1=59;
sec1=57;
year1=11;
mon1=12;
day1=24;
}
voiddisplay(ucharhour,ucharmin,ucharsec)
{
uchars1,s2,m1,m2,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;
P0=0XFf;
wela=1;
P0=0Xef;
delay
(1);
dula=1;
P0=table[s1];
dula=0;
P0=0XFF;
wela=1;
P0=0Xdf;
delay
(1);
}
voidkeyscan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
//TR0=0;
temp1++;
if(temp1==4)
{
temp1=0;
TR0=1;
}
while(!
key1)
switch(temp2)
{
case0:
display(hour1,min1,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(temp1)
{
case1:
sec1++;if(sec1==60)sec1=0;break;
case2:
min1++;if(min1==60)min1=0;break;
case3:
hour1++;if(hour1==24)hour1=0;break;
}
while(!
key2)
display(hour1,min1,sec1);
}
if(temp2==1)
{TR0=1;
switch(temp1)
{
case1:
day1++;if(day1==31)day1=1;break;
case2:
mon1++;if(mon1==13)mon1=1;break;
case3:
year1++;if(year1==100)year1=0;break;
}
while(!
key2)
display(year1,mon1,day1);
}
if(temp2==2)
{TR0=1;
switch(temp1)
{
case1:
sec2++;if(sec2==60)sec2=0;break;
case2:
min2++;if(min2==60)min2=0;break;
case3:
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(temp1)
{
case1:
if(sec1==0)sec1=60;sec1--;break;
case2:
if(min1==0)min1=60;min1--;break;
case3:
if(hour1==0)hour1=24;hour1--;break;
}
while(!
key3)
display(hour1,min1,sec1);
}
if(temp2==1)
{TR0=1;
switch(temp1)
{
case1:
if(day1==1)day1=31;day1--;break;
case2:
if(mon1==1)mon1=13;mon1--;break;
case3:
if(year1==0)year1=100;year1--;break;
}
while(!
key3)
display(year1,mon1,day1);
}
if(temp2==2)
{TR0=1;
switch(temp1)
{
case1:
if(sec2==0)sec2=60;sec2--;break;
case2:
if(min2==0)min2=60;min2--;break;
case3:
if(hour2==0)hour2=24;hour2--;break;
}
while(!
key3)
display(hour2,min2,sec2);
}
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
temp1=0;
temp2++;
if(temp2==3)
temp2=0;
while(!
key4)
switch(temp2)
{
case0:
display(hour1,min1,sec1);break;
case1:
display(year1,mon1,day1);break;
case2:
display(hour2,min2,sec2);break;
}
}
}
switch(temp2)
{
case0:
display(hour1,min1,sec1);break;
case1:
display(year1,mon1,day1);break;
case2:
display(hour2,min2,sec2);break;
}
}
voidalarm()
{
uinti;
if((hour1==hour2&&min1==min2&&(sec1>=sec2&&sec1{for(i=0;i<20;i++)
{
bear=~bear;
P1=~P1;
switch(temp2)
{
case0:
display(hour1,min1,sec1);break;
case1:
display(year1,mon1,day1);break;
case2:
display(hour2,min2,sec2);break;
}
delay(30);
}
bear=1;
P1=0xff;
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
alarm();
}
}
voidtime1()interrupt1
{
uintm;
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;
mon1++;
if(mon1==13)
{
mon1=1;
year1++;
if(year1==100)
year1=0;
}
}
}
}
}
}
}