单片机课程设计电子钟Word文件下载.docx
《单片机课程设计电子钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子钟Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
4.1单片机整体功能模块图8
4.2单片机蜂鸣器和数码管连接图8
4.2单片机矩阵键盘连接图9
4.3单片机时钟模块和晶振连接图9
5软件程序设计10
6实验测试部分20
6.1测试结果20
6.1.1电子钟正常的运行20
6.1.2电子钟矫正时间后的运行20
6.2测试结果分析与结论21
7总结22
8参考文献23
1系统功能要求
本次设计时钟电路,使用了AT89S52单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂。
同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:
键盘、芯片、蜂鸣器、数码管显示即可满足设计要求。
(1)准确计时,以数字形式显示时、分、秒的时间。
(2)小时以24小时计时形式,分秒计时为60进位。
(3)校正时间功能,即能随意使用键盘键上的按键来调整时钟的时、分、秒。
(4)闹钟功能,一旦走时到该时间,能以用蜂鸣器来进行定时提醒。
2设计原理及方案论证
2.1数字钟原理
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1MHZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.
(1)晶体振荡器
晶体振荡器给数字钟提供一个频率稳定准确的11.0592MHz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器。
(2)复位电路
时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器,时个位和时十位电路构成,秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,时个位和时十位计数器为24进制计数器。
(3)数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管。
(4)键盘
键盘是控制和修改时钟的重要输入模块,通过键盘可以修改时间,修改闹钟时间,控制显。
2.2电子时钟方案
方案一:
本方案采用DS1302。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:
本方案完全用软件实现数字时钟。
原理为:
在单片机内部存储器设6个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;
若秒值达到60,则将其清零,并将相应的分字节值加1;
若分值达到60,则清零分字节,并将时字节值加1;
若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
电子时钟是本设计的最主要的部分。
根据需要,可利用两种方案实现。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
2.3数码管显示方案
静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。
调整参数可以实现较高稳定度的显示。
动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用方案二。
3主控制器和外围器件
3.1单片机主控芯片
本实验采用AT89S52芯片。
(1)8位的CPU,片内有振荡器和时钟电路,工作频率为0~24MHz
(2)片内有256字节数据存储器RAM(3)片内有8K字节程序存储器ROM(4)4个8位的并行I/O口(P0、P1、P2、P3)(5)1个全双工串行通讯口(6)3个16位定时器/计数器(T0、T1、T2)(7)可处理6个中断源,两级中断优先级
图3.1
3.2LED驱动芯片
本实验采用两个74HC573锁存器。
数码管的段ABCDEFGH对应74HC573-1芯片,数码管的位WE1~WE6对应74HC573-2芯片。
DUP2.6段选信号控制74HC573-1锁存器,WEP2.7位选信号控制74HC573-2锁存器。
两个锁存器IO口接P0^0到P0^7,对应PCB网络编号D0到D7。
图3.2
3.34x4矩阵键盘模块
本实验采用4x4矩阵键盘INT1、LCDEN、RS、WR、RD、P3^0~P3^2对应AT89S52芯片上的INT1、LCDEN、RS、WR、RD、P3^0~P3^2IO口。
图3.3
3.4蜂鸣器模块
本实验蜂鸣器FM接到AT89S52芯片上的P2^3IO口,对应的PCB网络编号为FM。
图3.4
3.5下载线接口电路
本实验下载线接口电路P3^0、P3^1引脚接到AT89S52芯片上的P3^0、P3^1IO口上。
图3.5
3.6DS1302时钟模块
本实验时钟模块CLK和I/O口接到AT89S52芯片上的P2^1、P2^0IO口上。
图3.6
3.7单片机晶振模块
本实验晶振模块X1、X2接到AT89S52芯片上的X1、X2IO口。
图3.7
4系统硬件电路设计
4.1单片机整体功能模块图
蜂鸣器模块对应AT89S52的P2^3IO端口;
矩阵键盘具体的扫描由P3端口控制;
下载线接口电路通过P3^0和P3^1连接控制。
图4.1
4.2单片机蜂鸣器和数码管连接图
数码管模块的段选信号由P2^6控制,位选信号由P2^7控制,数码管具体显示由P0端口控制;
图4.2
4.2单片机矩阵键盘连接图
4x4矩阵键盘INT1、LCDEN、RS、WR、RD、P3^0~P3^2对应AT89S52芯片上的INT1、LCDEN、RS、WR、RD、P3^0~P3^2IO口。
4.3单片机时钟模块和晶振连接图
DS1302时钟模块则通过P2^1和P2^0连接控制;
单片机晶振通过X1和X2连接控制;
图4.3
5软件程序设计
#include<
reg51.h>
#defineucharunsignedchar
sbitdula=P2^6;
sbitwela=P2^7;
sbitbeep=P2^3;
unsignedcharj,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;
ucharshi20,shi10,fen20,fen10,miao20,miao10,ok=1,wei,dingshi,change,yidingshi;
ucharbaoshi,baoshijieshu;
unsignedintpp;
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/***************************延时函数******************************/
voiddelay(unsignedchari)
{for(j=i;
j>
0;
j--)
for(k=125;
k>
k--);
}
/****************六个数码管动态扫描显示时,分,秒*********************/
voiddisplay(ucharshi2,ucharshi1,ucharfen2,ucharfen1,ucharmiao2,ucharmiao1)
{dula=0;
P0=table[shi2];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
delay(5);
P0=table[shi1]|0x80;
P0=0xfd;
P0=table[fen2];
P0=0xfb;
P0=table[fen1]|0x80;
P0=0xf7;
P0=table[miao2];
P0=0xef;
P0=table[miao1];
P0=0xdf;
/***********通过矩阵键盘的S18和S19键设置定时和取消定时,S16为暂停进入矫正时间状态,S17为继续计时******************/
voidkeyscan0()
{P3=0xfb;
temp=P3;
temp=temp&
0xf0;
if(temp!
=0xf0)
{delay(10);
{temp=P3;
switch(temp)
{case0xbb:
ok=0;
change=1;
break;
case0x7b:
ok=1;
change=0;
dingshi=0;
break;
}
P3=0xf7;
{case0xe7:
dingshi=1;
case0xd7:
yidingshi=0;
//取消定时
}
/****************通过矩阵键盘S6—S15设置时钟具体时间时间*********************/
voidkeyscan()
{
{P3=0xfe;
{case0xee:
key=0;
wei++;
case0xde:
key=1;
case0xbe:
key=2;
case0x7e:
key=3;
while(temp!
=0xf0)
beep=0;
beep=1;
P3=0xfd;
{case0xed:
key=4;
case0xdd:
key=5;
case0xbd:
key=6;
case0x7d:
key=7;
P3=0xfb;
{case0xeb:
key=8;
case0xdb:
key=9;
/***********主函数设置时钟和定时时间时,分,秒的进制转换*********************/
voidmain()
{TMOD=0x01;
/*由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
*/
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
//46080的来历,为50000*11.0592/12
ET0=1;
EA=1;
while
(1)
{keyscan0();
if(ok==1)
{TR0=1;
wei=0;
if(pp==20)
{pp=0;
m++;
if(m==60)
{m=0;
f++;
if(f==60)
{f=0;
s++;
if(s==24)//为24h一个循环,若要12h,只需在此改为12即可。
{s=0;
}
}
a0=s%10;
a1=s/10;
b0=f%10;
b1=f/10;
c0=m%10;
c1=m/10;
display(a1,a0,b1,b0,c1,c0);
else
{if(change==1)
{TR0=0;
keyscan();
if(key!
=10)
{switch(wei)
{case1:
if(key<
3)//小时最高位为2
a1=key;
else
wei--;
break;
case2:
if(a1==1|a1==0)
a0=key;
if(key<
5)
//当小时最高位为2时,低位最高为4
case3:
6)//分钟最高位为5
b1=key;
case4:
b0=key;
case5:
6)//秒最高位为5
c1=key;
case6:
c0=key;
key=10;
m=c1*10+c0;
f=b1*10+b0;
s=a1*10+a0;
if(dingshi==1)
display(shi20,shi10,fen20,fen10,miao20,miao10);
{
switch(wei)
shi20=key;
shi10=key;
fen20=key;
fen10=key;
miao20=key;
miao10=key;
yidingshi=1;
}
if(yidingshi==1)
{if((a1==shi20)&
&
(a0==shi10)&
(b1==fen20)&
(b0==fen10)&
(c1==miao20)&
(c0==miao10))
if(((a1==shi20)&
(b0==fen10+1)&
(c0==miao10))||(yidingshi==0))//一分钟报时提示
beep=1;
/****************定时器T0中断函数*********************/
voidtime0()interrupt1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
6实验测试部分
6.1测试结果
6.1.1电子钟正常的运行
图6.1
6.1.2电子钟矫正时间后的运行
图6.2
6.2测试结果分析与结论
该程序为数码管显示可调且可定时钟表,用到HJ-3G开发板中矩阵键盘的上三排与第四排前两个按键。
若要更改时钟初始值(即时钟校准),可先按下矩阵键盘中的S16键(第三排第三列),此时时钟会暂停。
然后按S6---S15中的键修改矫正当前值,S6--S15分别先后对应数字0到9。
矫正完后,按下S17(第三排最后一个),时钟可继续工作。
若要设置定时时间,可先按下S18(第四排第一个),然后按数字键S6--S15设置定时时间(设置顺序是由高位到低位的顺序),设置完定时后,按下S17可恢复到正常计时状态定时时间到,蜂鸣器会持续响一分钟报时。
若要取消定时,或者蜂鸣器响时想对其关闭,可以按下S19功能键。
7总结
在硬件电路制作阶段,我到图书馆、网上查阅各种资料,在电脑上使用keil和万利软件进行以及相关的绘图软件,使自己在理论分析设计和动手操作能力等各方面得到了极大提高。
我通过对设计任务书的具体要求分析思考,再加上在学校进行的各种相关实践和实习积累的经验,在编写程序调试时,遇到了不少困难,这使我学会了耐心分析问题,并进一步锻炼自己去攻破难题的能力。
这次课程设计整体来说是成功的,但我也发现了自己许多错漏和不足之处。
譬如,最简单的程序没写好就想着写更复杂的程序,做事还是缺乏耐性和细心,当有时遇到问题时,总觉得无从下手,对于课本上的知识不能很好的组织起来。
以后会更认真的学习相关内容。
8参考文献
[1]
李朝青.单片机原理及接口技术(简明修订版).杭州:
北京航空航天大学出版社,1998
[2]
李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994
[3]
阎石.数字电子技术基础(第三版).
北京:
高等教育出版社,1989
[4]
廖常初.现场总线概述[J].电工技术,1999.
[5]
丁元杰单片微机原理及应用(第三版)
机械工业出版社,2005
[6]
杨景常,谢维成
单片微机原理及应用实验指导
西华大学印
,2011