- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于单片机的电子日历时钟毕业设计
一 课程设计题目: 电子日历时钟
二 实现的功能:
基本功能:
(1) 显示北京时间,并且能够校准时间;
(2) 程序使用汇编语言;
(3) 显示的时、分、秒之间以及年、月、日间以小数点分隔;
(4) 显示公历日期,并且能够校准日期;
发挥功能:
(5) 运动秒表;
(6) 闹钟功能;
(7) 自动整点报时。
三 课程设计的目的:
课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。
四、设计方案说明
1、硬件部分
采用6位LED数码管显示日期或者时间。
显示器的驱动采用 “动态扫描驱动”, 且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹钟设置状态;
电路连接使用PCB,使电路连接简洁美观
2、软件部分
“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不能超过16位定时器的最长定时时间;最短不能少于中断服务程序的执行时间。基准时间越短,越有利于提高时钟的运行精确度。基准时间定为0.05秒。
用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理进行“分”﹑“时”定时,以及“日”﹑“月”﹑“年”定时。
LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间短),而驱动信号的间歇时间必须小于“余辉时间”(电流大余辉时间长),但驱动电流大小受硬件电路能力和LED数码管极限功耗的制约。
动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容写入显示器之前将所有的LED数码管熄灭。
关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑
月大和月小
2月另外计算;
4月﹑6月﹑9月﹑11 月为月小30天,其余为月大31天。
平年和润年(年号能被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可关闭,不断循环
秒表:K0键按4下就可切换到秒表状态,出示为0,此时按下K1键就可开始计时,再按一下K1键可停止,此时K1为秒表开关,按K0键可再切换显示其他。
六、硬件连接图
1、原理图
2、pcb图
3、实物图
七、程序流程图:
主程序
定时器0中断子程序
外部中断0子程序
外部中断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数码管的小数点都是亮的,没有起到用小数点区分时间/日期中的时分秒/年月日
文档评论(0)