多功能数字时钟Word格式.docx
《多功能数字时钟Word格式.docx》由会员分享,可在线阅读,更多相关《多功能数字时钟Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
2、独立按键电路图
3、数字时钟实现原理图
4、蜂鸣器原理图
三、实验程序流程图:
主程序:
子程序:
1、按键调时
2、按键闹钟设置
3、闹钟
4、中断
四、实验结果分析
多功能数字时钟的起始时间为23-59-55,到00-00-00时闹铃响。
起始时间可以通过按键K1、K2与K3一起调节,K3用于时分秒的切换设置,K1用于减一,K2用于加一,设置完后,按K3键返回走时;
闹钟也可以通过K4、K1与K2一起调节,K4用于闹钟时分秒的切换设置,K1和K2分别用于减一于加一,同样,设置完后按K4返回走时。
五、心得体会
通过课程设计,我还更加明白了一个真理。
时至今日,课程设计基本告成,才切身领悟“实践是检验真理的唯一标准”,才明晓实践出真知。
因为在教材上,数字钟不过是由计数器和译码显码器组合而成,也便不以为然搭建电路图,结果电路出现诸多问题,譬如短路开路,EWB中引脚悬空即为低电平,现实中引脚悬空呈现大电阻特性即高电平,不为则不知,无为则无知,实践出真知。
课程设计达到了专业学习的预期目的。
在两个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对设计过程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的辛勤指导下,终于迎刃而解。
同时,在老师的身上我学得到很多实用的知识,在此我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
六、程序清单
#include<
reg51.h>
absacc.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitBeep=P1^5;
sbitK0=P3^3;
sbitK1=P3^2;
sbitK2=P3^1;
sbitK3=P3^0;
uintn;
ucharbuffer[]={0,0,0,0,0,0,0,0};
ucharcount,hour=13,min=14,sec=55,dhour=13,dmin=15,dsec=0,in=0;
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsignedcharcodemusic_tab[]={
0x18,0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,
0x40,0x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,
0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,
0x26,0x20,0x20,0x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,
0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,
0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,
0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,0x05,0x20,0x10,0x1C,0x10,0x20,
0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,0x20,0x26,0x40,
0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00
};
voiddelay(unsignedchardly)
{
unsignedi=3*dly;
while(--i);
}
voidchange()
{
buffer[7]=sec%10;
buffer[6]=sec/10;
buffer[5]=10;
buffer[4]=(min%10);
buffer[3]=min/10;
buffer[2]=10;
buffer[1]=(hour%10);
buffer[0]=hour/10;
}
voiddelayms(unsignedchara)
while(--a);
voidchange1()
buffer[7]=dsec%10;
buffer[6]=dsec/10;
buffer[4]=(dmin%10);
buffer[3]=dmin/10;
buffer[1]=(dhour%10);
buffer[0]=dhour/10;
voiddisplay()
uchartemp=0x80;
charcnt;
temp=0x80;
P0=0xff;
for(cnt=0;
cnt<
8;
cnt++)
{
P0=table[buffer[cnt]];
temp=~temp;
P2=temp;
delay(150);
temp>
>
=1;
P0=0xff;
}
voidtimer0()interrupt1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
voidtimer1()interrupt3
TH1=0xd8;
TL1=0xef;
in--;
voidint0()interrupt0
while(K1==0);
EX0=0;
n=3;
while(n)
if(n!
=0)
if(K1==0)
delay(100);
if(K1==0)
while(K1==0);
n--;
}
if(K2==0)
delay(100);
if(K2==0)
while(K2==0);
switch(n-1)
case0:
hour++;
if(hour==24)hour=0;
break;
case1:
min++;
if(min==60)min=0;
case2:
sec++;
if(sec==60)sec=0;
default:
if(K3==0)
if(K3==0)
while(K3==0);
hour--;
if(hour==-1)hour=23;
min--;
if(min==-1)min=59;
sec--;
if(sec==-1)sec=59;
change();
display();
voidint1()interrupt2
while(K0==0);
EX1=0;
if(K0==0)
if(K0==0)
while(K0==0);
dhour++;
if(dhour==24)dhour=0;
dmin++;
if(dmin==60)dmin=0;
dsec++;
if(dsec==60)dsec=0;
dhour--;
if(dhour==-1)dhour=23;
dmin--;
if(dmin==-1)dmin=59;
dsec--;
if(dsec==-1)dsec=59;
change1();
voidmain()
unsignedcharp,m;
unsignedchari=0;
TMOD=0x11;
P3=0xff;
IE=0x8a;
TR0=1;
IT0=1;
IT1=1;
while
(1)
a:
change();
display();
if(K1==0)
EX0=1;
if(K0==0)
EX1=1;
if((hour==dhour)&
&
(min==dmin)&
(sec==dsec))
while
(1)
{
b:
p=music_tab[i];
if(p==0x00)
i=0;
gotoa;
}
elseif(p==0xff)
i=i+1;
delayms(100);
gotob;
else
m=music_tab[i++],in=music_tab[i++];
TR1=1;
while(in!
Beep=~Beep;
delay(m-8);
TR1=0;