单片机课程设计电子钟Word文件下载.docx

上传人:b****5 文档编号:19387992 上传时间:2023-01-05 格式:DOCX 页数:21 大小:1.05MB
下载 相关 举报
单片机课程设计电子钟Word文件下载.docx_第1页
第1页 / 共21页
单片机课程设计电子钟Word文件下载.docx_第2页
第2页 / 共21页
单片机课程设计电子钟Word文件下载.docx_第3页
第3页 / 共21页
单片机课程设计电子钟Word文件下载.docx_第4页
第4页 / 共21页
单片机课程设计电子钟Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机课程设计电子钟Word文件下载.docx

《单片机课程设计电子钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子钟Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

单片机课程设计电子钟Word文件下载.docx

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 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1