基于AT89S51单片机的数字时钟Word文件下载.docx
- 文档编号:20743793
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:25
- 大小:448.90KB
基于AT89S51单片机的数字时钟Word文件下载.docx
《基于AT89S51单片机的数字时钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于AT89S51单片机的数字时钟Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
附录二:
PCB印刷版图…………………………………………………………………………23
一、设计要求与方案论证
1.1 设计要求:
(1)基本要求
(a)具备显示时、分等功能;
(b)具备时、分校准功能;
1.2系统基本方案选择和论证
1.2.1单片机芯片的选择方案和论证:
方案一:
采用89C51芯片作为硬件核心,其内部采用FlashROM,具有4KBROM存储空间,能于3V的超低压工作,但
运用于电路设计中时由于不具备ISP在线编程技术,烧入程序时需要专门的C编程器(当前可用的实验烧写开发板只支持具有ISP在线编程功能的AT89S**系列的芯片),当在对电路进行调试时,更显麻烦,并且增加了造价,
方案二:
采用89S51芯片作为主控模块,AT89S51是MCS-51系列单片机目前运用较多的一种芯片,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且具备ISP在线编程技术,方便对电路进行调试.但由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
针对该问题,可采用易于插拔的芯片插槽,芯片的程序烧写用专门的实验板进行烧写(当前可用的实验烧写开发板支持AT89S**系列).AT89S51单片机的功能引脚图如下图所示:
AT89S51单片机的功能引脚图
所以选择采用AT89S51作为主控制系统.
1.2.2显示模块选择方案和论证:
采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏.
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.
方案三:
采用LED数码管进行静态显示,LED数码管价格适中,对于显示数字最合适,而且采用静态显示法与单片机连接时,占用的单片机口线少(采用十二小时制显示,以P0、P1、P2口分别作为分、十分、小时位显示段码输出,而十小时位只需要显示1或者不显示,故只要用到P3口的两个引脚P3.1和P3.2作为显示段码输出即可)。
共阳极8段数码管引脚图
所以采用了LED数码管作为显示。
1.2.3时钟芯片的选择方案和论证:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V~5.5V范围内,功耗也较低,但价格比较贵,且目前市场上采购不到
直接采用单片机定时计数器提供秒信号,使用程序实现时、分、秒计数。
采用此种方案实现虽然有一定的时间误差,但可减少少芯片的使用,节约成本,易于实现,符合初学者实验选用。
所以采用方案二。
1.2.4 电源的选择方案和论证:
本设计中,电源模块采用的是通过变压.整流再稳压,将220V的交流市电变成5V的直流电源供电,采用此方案的主要好处就是该电源电路的各个模块电路技术都已很成熟,容易制作,并且能够直接使用220V的交流市电
1.3电路设计最终方案决定
综上各方案所述,对此次作品的方案选定:
采用AT89S51作为主控制系统;
通过软件编程采用定时器定时实现秒.分.时计时;
LED数码管静态显示时间。
二.系统的硬件设计与实现
2.1电路设计框图
2.2系统硬件概述
本实验设计的单片机控制数字钟硬件结构简单,所需元器件少,价格低廉,制作容易.单片机选用带flashROM的AT89S51作为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;
时钟电路是通过软件定时计数的方式实现,它是一种性能较高、低成本、并且可进行实时编程校准时间的时钟电路,从而实现对时、分、秒进行计时;
AT89S51的P0口\P1口\P2口\P3口各接一个共阳极数码管,直接驱动显示时间构成显示部份,显示方法采用静态显示方式,P0口和P1口所接的数码管分别显示分与十分,P2口所接的数码管显示小时,为了和分钟数字区别开,该数码管的小数点常亮,P3口的P3.0和P3.1分别接第四个数码管的b\c段显示1,即十小时,如果不到十小时,则不显示。
小时为12进制,分为60进制.时钟为12MHZ的晶振,外部中断0(P3.2口 INT0)和外部中断1(P3.3口 INT1)各接一按钮分别进行校分与校时,复位按钮清零.总设计原理图如图-1所示.
图-1电路总设计原理图
2.3主要单元电路的设计
2.3.1单片机主控制模块的设计
AT89S51单片机为40引脚双列直插芯片,共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部12MHZ晶振的一端和30pF电容,在片内它是振荡器倒相放大器的输入,XTAL2接外部12MHZ晶振的另一端和30pF电容,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,复位电路采用上电复位和按钮复位,由一个10uF的电容和一个按钮及51K、2.2K电阻各一个构成.20引脚为接地端,40引脚为电源端.如图-2所示
图-2主控制系统
2.3.2电源电路模块的设计
51系列单片机需要5直流稳压电源.如图-3所示:
将220V交流电通过变压器降压,变压器选择5W,次级电压为12V,然后由桥式整流并经100uF电容滤波后得到约18V的直流电压,再经三端稳压器7805稳压和0.01uF瓷片电容进行高频滤波、100uF电容滤波,最后得到5V的稳定直流电源给系统供电。
电路如图-3所示
图-3电源电路
2.3.3校时和校分电路
由P3.3外接一个按钮开关到地作为校时键,由P3.2外接一个按钮到地作为校分键。
(具体电路如原理图所示)。
2.3.4显示模块的设计
因为P口的灌电流在15mA左右,可直接驱动数码管。
由P0口和P1口各外接一个共阳极数码管,直接驱动,P0所接数码管显示分,P1所接数码管显示十分,小数点不点亮。
P2口外接一个共阳极数码管显示小时,但小数点要点亮,用以分隔时分。
P3口的P3.1和P3.0分别外接到一数码管的b段和c段,显示十小时,如果不到十小时,该两段灭。
小时的显示进制为12进制。
具体电路如图-4所示
图-4显示电路原理图
三、系统的软件设计
软件系统分四个部分:
方程序部分,计时显示中断子程序部分,校时中断子程序部分,校分中断子程序部分(整体程序流图如图-A),分别介绍如下:
图-A
整体程序流图
3.1主程序部分
主程序流程图如图-B示,主要有设置堆栈;
清R0(50mS计数器)、清R2(秒计数器),清R3(分计数器),清R4(十分计数器),清R5(小时计数器),清R6(十小时计数器);
设置定时器,设置中断等。
图-B主程序流程图
汇编语言源程序如下:
ORG0000H;
主程序从0000H开始
LJMPMAIN
ORG0003H
LJMPMINUTE;
外中断0校分
ORG000BH
LJMPCOUNT;
定时中断输出显示
ORG0013H
LJMPHOUR;
外中断1校时
MAIN:
MOVSP,#50H;
设置堆栈
MOVR0,#00H;
设置50ms计数器初值
MOVR2,#00H;
设置秒计数器初值
MOVR3,#00H;
设置分计数器初值
MOVR4,#00H;
设置十分计数器初值
MOVR5,#00H;
设置小时计数器初值
MOVR6,#00H;
设置十小时计数器初值
SETBPT0;
定时器0中断优先
SETBEA;
中断总允许
SETBET0;
定时中断0允许
SETBEX0;
外部中断0允许
SETBEX1;
外部中断1允许
SETBIT0;
外部中断0为脉冲触发方式
SETBIT1;
外部中断1为脉冲触发方式
MOVTMOD,#01H;
定时器0工作于方式1(定时)
MOVTL0,#0B0H;
定时器0装入50ms计数初值
MOVTH0,#3CH
SETBTR0;
启动定时器0
SJMP$;
等待中断
3.2计时显示中断子程序部分
图-C计时中断子程序流程图
COUNT:
INCR0
CJNER0,#14H,XIAN;
判断计时是否满1秒,不满转XIAN
重设50ms计数器初值
INCR2
CJNER2,#3CH,XIAN;
判断计时是否满1分,不满转XIAN
重设1s计数器初值
INCR3
CJNER3,#0AH,XIAN;
判断计时是否满10分,不满转XIAN
重设1分计数器初值
INCR4
CJNER4,#06H,XIAN;
判断计时是否满1小时,不满转XIAN
重设10分计数器初值
INCR5
CJNER5,#03H,X1;
判断小时计数是否为3,不是转X1
MOV20H,R6;
小时计数为3,取出10小时计数值
JB20H.0,X2;
10小时计数值最低位为1(即十小时位此时显示1),则转X2
LJMPXIAN;
10小时计数为最低位为0(即十小时位此时显示0)输出显示
X1:
CJNER5,#0AH,XIAN;
判断小时计数是否为10,不是转XIAN
LJMPX3;
小时计数为10,则转X3
X2:
MOVR5,#01H
MOVR6,#00H
13点等换成1点显示
X3:
小时计数满10,则R5清零
INCR6;
10小时计数值加1
XIAN:
MOVDPTR,#WDBZ
MOVA,R3
MOVCA,@A+DPTR;
取出显示分的段码
MOVP0,A;
从P0输出显示分
MOVA,R4
取出显示十分的段码
MOVP1,A;
从P1输出显示十分
MOVA,R5
MOVDPTR,#YDBZ
MOVCA,@A+DPTR;
取出显示小时的段码
MOVP2,A;
从P2输出显示小时
SETBC
MOV20H,R6
ANLC,/20H.0;
十小时计数器的最低位为1,从P3输出显示十小时位为1,否则为0
MOVP3.0,C
MOVP3.1,C
MOVA,#0B0H;
T0重装50ms计数初值
ADDA,TL0
MOVTL0,A
RETI;
中断返回
WDBZ:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H;
共阳极段码表,用于显示分和十分
YDBZ:
DB40H,79H,24H,30H,19H
DB12H,02H,78H,00H,10H;
共阳极段码表,用于显示小时(小数点常亮)
3.3校分显示中断子程序部分
图-D校分显示中断子程序流程图
MINUTE:
INCR3
CJNER3,#0AH,Y1;
分计数为10则转Y1
分计数器重装初值
CJNER4,#06H,Y1;
十分计数器为6则转Y1
十分计数器重装初值
Y1:
MOVA,R3
取出分显示段码
取出十分显示段码
RETI
3.4校时中断子程序部分
图-E校时中断子程序流程图
HOUR:
CJNER5,#03H,XX1;
小时计数不为3转XX1
小时计数为3,取出十小时计数值
JB20H.0,XX2;
十小时计数值最低位为1转XX2
LJMPXIANZ
XX1:
CJNER5,#0AH,XIANZ;
小时计数不为10转XIANZ
LJMPXX3;
小时计数为10转XX3
XX2:
MOVR5,#01H;
XX3:
小时计数满10,R5清零,R6加1
INCR6
XIANZ:
取出小时显示段码
十小时计数值最低位为1,从P3输出显示十小时
四、电路测试
4.1测试仪器
序号
名称
型号
1
PC机
2
直流稳压电源
5V
3
数字万用表
4
ISP在线编程器
4.2硬件测试
该数字钟的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺破带有封皮的导线,使电路造成短路现象,另外,买来的元器件要先进行检测,如果有坏的器件要进行更换,还有就是要注间元器件的正确放置与安装以及布线的合理,便于成品电路的检测与维护。
在本数字钟的设计调试中遇到了很多的问题。
回想这些问题,其实只要认真思考很多功能都是可以避免的,以下为主要的问题:
(1)电路做成后,数码管有显示,但是不能正常计时走钟
解决:
通过检测,查出单片机AT89S51的31脚EA引脚没有接5V的电源作为高电平(因为该系统中没有扩展外部程序存储器,故电路通电工作后,其内部程序执行应该从内部程序存储单元开始,也即EA引脚要接高电平。
通常引脚悬空也可看成是接高电平,但是本次设计中选的用芯片AT89S51内部采用的是CMOS结构,不能将悬空等同为接高电平,而必须接5V的电源作为高电平才能正常工作),用导线将31脚接到电源,问题就得到解决
(2)十分位对应的数码管,显示乱码
将单片机AT89S51取下,再用万用表(或用5V的电源)分别检测十分位显示对应的数码管引脚与芯片连接引脚之间的电路,可将万用表的黑表笔(内置电池的正极)接共阳极数码管的公共端,再用红表笔(内置电池的负极)分别接该数码管的各段码引脚看点亮顺序是否正确。
通过检测,发现其中a段和b段的连线弄错了,将其换接过来,问题就得到解决
4.3软件测试
数字钟的功能虽然比较少,但是程序也较为复杂,特别对于初学者的我来说更是如此,所以在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
在软件的调试过程中主要遇到的问题如下:
1烧入程序后,数码管能显示,也能走钟,但时间明显跳动很快,时间不正确
解决:
通过检查延时子程序以及循环累计秒、分、时子程序,发现将50mS延时子程序循环20次得到的秒钟数错误当作分钟数计时,从而使时间出现错误。
将程序进行修改,增加R0作为50mS的20次循环计数器得到秒,而把R2的计数次数修改为60次(即得到分钟数),从而解决了该问题
2.烧入程序后,电路能够正常计时走钟,但小时位对应的LED数码管显示的是乱码
在检查硬件电路正常的情况下,对程序进行检查,发现在显示子程序中,小时位的取段码指令漏写了,从而使小时位的显示是乱码。
加上取段码指令MOVCA,@A+DPTR后问题就得以解决,通电试验显示正常
4.4测试结果分析与结论
4.4.1测试结果分析
(1).在测试中遇到发光二极管、LED数码管为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.
(2).LED数码管显示不正常,还有亮度不够,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。
若硬件无误后再查看烧写的程序是否正确无误,对程序进行认真修改。
4.4.2测试结论
经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计同时提高了设计能力以及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.对于初学者来说,更是大有益处,能把理论联系实际运用,学到更多的知识,真正将这门课程所包含的知识用于实际生活中的具体创造和设计中
五、作品总结与设计感想
通过这次单片机课程设计,发现了自身所学知识存在许多的不足和问题,同时也学到了不少东西,提高了动手实践的能力.
在整个设计过程中,从设计方案的确定,到具体电路的设计,最后到总体电路的联接构建以及程序的编写烧制,整个设计工程量是比较大的,单靠个人能力,很多方面考虑不周,有的地方甚至毫无头绪,想不出具体方案,因此,绝对不能心急,不明白的地方和其它的同学共同讨论研究,毕竟群策群力办法要多些,碰上实在不能解决的问题,就去找辅导老师,通过老师的指点,把问题彻底搞清楚并加以掌握,就比如这次设计中,我把硬件电路都做好,并认真的检测了硬件电路以确认无误,而且程序也是经过仔细推敲和多次检查了确认是对的,但是程序写入通电试用时,电路总是不能正常工作,不能按设计要求计时走钟,我左思右想,就是想不出来哪里出了问题,后来去问老师,才知道本次设计中我选用的芯片AT89S51内部是CMOS结构,不能将引脚悬空视为接高电平,而是必须接电源作为有效高电平,要构成单片机最小系统,AT89S51的31脚EA引脚要接高电平(系统无片外扩展程序存储器,故系统开机后,程序要从片内程序存储单元开始执行,即31脚要接高电平,否则系统不能正常工作),通过老师讲解指点后,我重新把31脚接上电源再试,电路能够正常工作,问题得到解决,解决问题的同时,我又学到许多知识,弄明白了一些原来还不完全懂的问题,比如怎样构成单片机最小系统以及芯片的内部结构和使用要求等等。
另外,在这次设计过程中,我还查阅了许多相关资料,通过参考和研究别人的一些设计,使自己的设计思路更加周密,全面,从而使设计出来的作品也更加完善和高质量。
作为初学者,尽管这次设计中遇到了许多难题,但也都一一得以解决。
比如程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学们的共同讨论,理清了思路,反而得心应手;
在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。
反而达到事半功倍的效果。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
通过此次设计,也使我知道了做任何事都要有一颗平常的心,不要想着走捷径,一步一个脚印,把每一步都认认真真做好了,才能取得最后的成功,同时也练就了我的耐心,做什么事都要有耐心,不要遇到困难就退缩,而是要静下心来去寻找解决的办法,否则很难有最后的成功。
在此过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识,另一方面,碰到问题注意与同学和老师协作,讨论,寻求好的解决方案,最终较好的完成了作品完,完成了最初的设想,达到了预期的目的。
虽然此次课程设计的作品有些简单,但是通过自己的努力最终把电路成功设计出来,个人觉得还是很有成就感的,更为重要的是实实在在学到了不少东西,使自己这方面的知识技能有了很大的进步。
因此,我自己觉得这次课程设计对我而言算得上是一次全新的尝试,也是一个小小的成功,更是一次很好的锻炼,让我有了全方位的提高和进步。
参考文献
1李广弟 朱月秀 冷祖祁 编 单片机基础(第三版) 北京航天航空大学出版社 2007
2陈正振编电子电路设计与制作广西交通职业技术学院信息工程系2007
3杨子文编单片机原理及应用西安电子科技大学出版社2006
4王法能编单片机原理及
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89S51 单片机 数字 时钟
![提示](https://static.bdocx.com/images/bang_tan.gif)