最新毕业设计:基于单片机的电子日历时钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一课程设计题目:电子日历时钟
二实现的功能:
基本功能:
(1)显示北京时间,并且能够校准时间;
(2)程序使用汇编语言;
(3)显示的时、分、秒之间以及年、月、日间以小数点分隔;(4)显示公历日期,并且能够校准日期;
发挥功能:
(5)运动秒表;
(6)闹钟功能;
(7)自动整点报时。
三课程设计的目的:
课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。
四、设计方案说明
1、硬件部分
(1)采用6位LED数码管显示日期或者时间。
(2)显示器的驱动采用“动态扫描驱动”,且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹
钟设置状态;
(3)电路连接使用PCB,使电路连接简洁美观
2、软件部分
(1)“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不
能超过16位定时器的最长定时时间;最短不能少于中断服
务程序的执行时间。基准时间越短,越有利于提高时钟的
运行精确度。基准时间定为0.05秒。
(2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理
进行“分”﹑“时”定时,以及“日”﹑“月”﹑“年”
定时。
(3)LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间
短),而驱动信号的间歇时间必须小于“余辉时间”(电流
大余辉时间长),但驱动电流大小受硬件电路能力和LED
数码管极限功耗的制约。
(4)动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容
写入显示器之前将所有的LED数码管熄灭。
(5)关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑
a)月大和月小
2月另外计算;
4月﹑6月﹑9月﹑11 月为月小30天,其余为月大31
天。
b)平年和润年(年号能被4整除的就是润年)
平年的2月为28天;
润年的2月为29天。
五、使用说明
实物图请参照后面附带图片,从左至右为按键K2,K1,K0,以两个LED显示器为一组,左中右显示时分秒或者年月日,还有闹钟和秒表
K2:复位 K1:设置闪烁 K0:切换时间/日期或者调整时间/日期
初始状态:接上电源之后,日期默认为10年6月21日,时间为0时0分
秒,闹钟2点整但默认关闭,秒表为0状态
(1)显示状态切换:不断按K0键就会依次循环显示下面的状态
初始状态时间
日期
闹钟时间
闹钟状态
秒表状态
(2)调节时间,日期:按K0键切换到想要调节的显示状态,再按K1键选择要修改的位,不断按K1键会按左闪烁.中闪烁.右闪烁.确定.四个状态切换,闪烁的位可以修改,按K0键可以实现增加,不能递减,例如要调慢时间要按到循环到较慢时间。
(3)闹钟使用:闹钟默认响的时间为一分钟,闹钟的时间设置同时间日期的调节,只需把状态切换到闹钟时间的状态,闹钟的开关先按K0键切换到屏幕显示为OFF的状态,如下:
再按K1可切换到开状态,如下图,再按K1可关闭,不断循环
(4)秒表:K0键按4下就可切换到秒表状态,出示为0,此时按下K1键就可开始计时,再按一下K1键可停止,此时K1为
秒表开关,按K0键可再切换显示其他。
六、硬件连接图
1、原理图
2、pcb图
3、实物图
1.主程序
2.定时器0中断子程序
3.外部中断0子程序
4.外部中断1子程序
八、性能测试与故障排查
1、硬件部分
问题:断路。
现象:程序下载完之后可以工作但是6个LED显示器有2个没亮。
分析:因为其他几个显示器完全正常,这两个则完全没亮,所以推断是位选的线路出故障。
检测:用万用表测试各点电压,着重测试两条位选线路的断路与短路情况,最终发现两处断路。
解决:焊锡接上,最终全亮
2、软件部分
偶数组实现基础功能的程序老师已经提供,该程序基本没有多大的问题,就是里面的几个参数需要修改,同时还有一个小bug。
修改一:由于提供的程序所默认采取的晶振计数频率是6MHz,但是所提供的现实原件则是12MHz,所以根据晶振的不同,定时器的定时时间变为0.05s。按照该程序直接跑的话,计数时间为0.5s。这就需要设置计数次数TICK_CNT为#14H,即0.05s*20=1s。代码段:MOV TICK_CNT,#14H
修改二:程序默认设置的外部中断延时过短,导致操作过于“灵敏”,也即按键K0、K1按下时,跳变过快。这里所说的延时是中断子程序EX0_INT和EX1_INT中的语句
LCALL DIS_DELAY。解决这个情况只需修改DELAY 次数,则DIS_DELAY:
MOV D_CNT_DIS,#10H。
修改三:观察实物电路工作发现每一位:LED数码管的小数点都是亮的,没有起到用小数点区分时间/日期中的时分秒/年月日。要解
决这个问题,在显示子程序中TSA代码段的MOV Rx A前插入语句ADD A,#80H(x=1、2、4、6)。
以及加上发挥部分的拓展功能:秒表和闹钟。
九、原件清单
十、心得体会与总结
这个学期做了两个与汇编有关的课程设计(不过这次是大作业),一次是开学初的微机原理课程设计,还有就是这次单片机原理大作业。上次基本上只与程序打交道,硬件部分实操不多。而这次大作业则是硬件、软件两方面都有兼顾,且两者所花的时间也都不少。虽然从老师那已经获取了原理图和程序,但这是我们第一次比较系统的从熟悉软件操作到软硬件设计了解整个流程。
硬件部分,由于先前我们都没有操作过protel之类的软件,所以一切从零开始,针对这次大作业需要,学习了protel软件的基本操作、原理图的绘制修改、原件的封装以及原件集成库的创建,当然还有PCB板的排线。之后就是PCB图打印,电路板热压制、腐蚀、钻孔,元器件的焊接。流程很简洁,过程很纠结。我们一步一个脚印地制作着,生怕哪个步骤出错而导致前功尽废。不过在我们不懈努力下终于走完。但是焊接的不仔细——两个电阻虚焊,使后来电路出现问题,也排查了好久,需要记住教训。
软件部分,虽然老师已经给了具备基本功能的程序,但是仍需看懂弄懂,后期才能更好地发现问题以及修改添加功能。我发现这个过程也并非一件易事,清楚认识每一句的作用也需要经常查阅书籍。另外在硬件焊接已经实现后我们把两者结合在一起,通过下载器把程序烧进52单片机中实现既定功能,发现上面故障排查中出现的问题,继而针对每个问题分别从软硬件寻找解决方法,这个过程我认为收获更大,能让我们更清楚熟悉软硬件两者的运作方法。