数码管电子时钟
- 格式:docx
- 大小:397.80 KB
- 文档页数:33
SOUTH CHINA UNIVERSITY OF TECHNOLOGY
单片机大作业
――电子日历时钟的制作
班级: 姓名:
学号:
编号:07
题目及功能要求
1. 制作一个电子日历时钟,使用汇编语言进行软件编程
实现功能2.
(1)显示北京时间并能校准
⑵时、分、秒之间以及年、月、日之间以小数点隔开
(3)显示公历日期并能校准,能够自动识别“闰年”以及“大月、小月
⑷运动秒表,能够后台计时,秒表精确到0.05S
(5) 闹钟功能,有闹钟开关,并能显示当前闹钟是否开启
(6) 整点报时提醒
硬件方案
1 . AT89S52最小系统
2. 显示电路采用动态扫描驱动电路,AT89S52的P0 口连接74LS244总线驱动器,输岀信号利
用三极管8550进行放大,通过P1 口对数码管进行段选扫描,AT89S52的P1.2〜P1.7 口对数码管进行位选扫描
3. 两个按键开关,分别接AT89S52的两个外部中断引脚
4. AT89S52的P2.0 口输岀经三极管9012放大,驱动有源蜂鸣器发声
三、电路原理图
四、系统元件布局、布线图
• L A*
1
SOO
元器件清单五、
型号及标称值恢复现场数量AT89S52 1 HD74LS244 系统初始化 1 8550晶体管中断返回 6 9012晶体管 1
蜂鸣器(有源)丫整点?提示音 1
10uF电解电容 1
7段数码管(共阳) 6
电阻3KN 9
电阻200闹钟到?8 4.7K电阻 1
按钮开关N 3 12M晶振丫 1
瓷介电容30pF闹铃提示音 2
软件方案六、0中断提供,设置为最高优先级,定时器定时器“时钟”基准时间由.
中断20次即可实现一秒定时。
2. 由于使用较多数码管,显示模块使用动态扫描方式,定义全局变量,保存各个数位的BCD 码,通过查表,将字模送到P0 口进行输出;为了显示闹钟的状态,设置了另一字模数据表,在
显示前进行判断,若为闹钟开关设置状态则调用此字模数据表。
3. 按键中断的时候,在2个按键都没按下的状态,
2个中断引脚都为低电平,则一直调用中断
0的子程序,每次进入中断0子程序中便检测中断1的引脚是否为高电平,即检测开关KEY1是
否按下;相反,在按下KEY0时,进入中断1子程序,每次进入中断1子程序都检测中断0的引脚是否为高电平,为高电平则表示已按下。
4. 用寄存器R7来记录当前切换的功能,分别为,
0 —时间;1—日期;2-闹钟;3-闹钟开关;4-秒表。
5. 秒表的实现,采用基准时钟作为秒表时钟源,精度可以达到0.05s。
6. 闹钟的实现,在主程序中,循环判断闹钟设置的时分与当前时分是否相等,闹钟持续1分钟
7. 整点报时的实现,在主程序中,先判断当前时间的秒,若为0再判断分,再为0则使蜂鸣器嘀一声,循环判断。
七、程序框图
1.主程序
主程序
中断子程序定时器 2. 03
r
秒?至U 1Y
或秒加1向前进位
0 3.外部中断子程序4
提小音滴
、psw 恢复
中断退出
4.外部中断1子程序
系统使用说明八、
,闹钟”“ 10.06.06 ,日期--“ 00.00.00”一 1 .接通电源自动复位,读取初始状态,时钟”。一”,秒表“ 00.00.0006.00.00 —“”,闹钟状态一“ OFF/计时暂停/为“确定计时开始/ .按键KEY1为
“切换功能/调节”按钮,按键KEY02闹钟开关按钮“时”数码管闪烁,此时按键进入时校准
状态,电子时钟:按KEY0 . 3第一功能一可切换到“分”设置,,按KEY0KEY1键可以调节小时,“时”调节范围为00〜24。调节范围为00〜59 00~59调节范围为再按KEY0可切换到“秒” 设置,可以切换到电子日历功能。KEY1第二功能----电子日历:在电子时钟功能下,按.4“日” 进行校准,校准方式同电子时钟..进入电子日历功能,可以对“年”“月” 6
的校准方式一样,自行摸索。
5. 第三功能----闹钟设置:在电子日历功能下,按
KEY1可以切换到闹钟设置功能。闹钟的设置同电子时钟的设置一样。
6. 第四功能一闹钟开关:在闹钟设置功能下,按
KEY1可以切换到闹钟开关设置。默认状态
为关闭闹钟功能,显示“ OFF ”,按KEY0可以调节闹钟开关,打开闹钟功能则显示“ON ”。闹钟设置为“ ON”时,最后一个数码管的小数点会亮起,可以在任何功能状态下提示闹钟功能已
开启。
7. 第五功能一秒表:在闹钟设置功能下,按KEY1可以切换到秒表功能。进入秒表功能,按
KEY0开始计时,再按KEY0则暂停计时,在秒表计时的时候按KEY1可以切换到其他功能,而秒表则在后台计时,在秒表暂停时按KEY1可以将秒表清零。
九、体会
第一次使用Atmel Desig ner Winter 09 布岀一个完整的PCB制板图,并用覆铜板做成实物,最
大的体会是:软件能画岀来的图,我们不一定就能把这样的电路板做岀来。布线时要考虑的因
素除整体布局、飞线数目外,最重要的是线的宽度、线与线的间距、焊盘的大小。唯有线宽合适、间距合理才能做岀符合要求的电路板。刚制成的电路板要先使用万用表检测各导线的连接情况,
解决断路、短路的问题之后方能进行焊接。这样做的好处是,保证了调试程序时不会受硬件接
触不良等情况的影响。
由于第一次尝试完全使用汇编语言对AT89S52进行编程操作,对汇编语言的陌生给前期编程工作
带来诸多不便。汇编语言不同于C或其它高级语言,程序间的跳转,各种寄存器的压栈出栈都
需要人工考虑,而这种疏漏编译器也不会给出任何提示,于是往往一些大意的疏忽,程序便无法达到预期的效果。加之没有相关条件使用在线调试,也给故障排除带来一些障碍。
对此的体会是,确定是程序岀现问题时,优先往程序间的跳转条件、重要寄存器等的现场保护、循环退岀的条件方面考虑,寻找原因。由于此次硬件电路设计采用低电平导通的PNP三极管,和74LS244电平驱动器,也没有将IO 口做通用数据传输口用,故不需考虑上拉电阻的选用及将相应管脚写入高电平以正确接收数据的问题。当然在调试的过程中合理的使用软件仿真机,熟练的设置程序断点,同时观察单片机各寄存器值的变化,可以极大方便我们查找程序漏洞,解决
问题。
在书写代码的过程中,应该注意代码的规范化,尤其是使用汇编编程时,必须加上必要的注释,方便程序阅读及故障排查。对于需要使用到的各个变量,必须在程序开头集中定义存储位
置,以求一目了然,在新增变量的时候也不至于岀现存储单元被重复使用而导致数据丢失的情况。
最后,看着忙碌数日得来的劳动成果乖乖的工作,确实蛮有成就感。希望今后有更多的机会进行
这样的实践实验。