2.3 软件模块 2.3.1 计时模块
该模块完成秒、分、时、日、星期、月、年的计算更新、有效性检查。
通过定时器0 工作于16 位重装载方式准确地定时50 毫秒,再由软件计数
20 次以完成定时1 秒。秒、分、时、日、星期、月的加1、调整程序分别
编成子程序,若有进位,则本位从新计数,并调用下一级子程序。
2.3.2 调时功能
当由于时钟误差或意外断电后可以用调时功能较时。 2.3.3 主程序模块
主程序模块主要由计时、调时、按键选择等模块组成,下面将做详细
描述,再次从略。 2.3.4 键盘控制模块
由于在硬件设计中只用到四个键,所以,这是一个相对简单的流程,
但在实际编程中会因为硬件过于简单,而使程序很复杂。 2.3.5 在编程过程中要用到的其它程序模块
1)LCD 初始化2)判断闰年3)时间的加减这些程序在本设计
都比
较重要,也很复杂,但都有经典程序可以参考,不做赘述。 河南科技大学毕业设计(论文) 15
第3 章程序编译和系统调试及仿真 3.1 程序编译
3.1.1 主要程序设计分析
(1)主程序设计中采用定时器T0 中断完成,其余状态循环调用显
示子程序,当P3.7 端口或者P1.7 端口开关按下时,转入调整时间或者调 整日期功能程序。 (2)显示子程序
数码管显示的数据存放在内存单元70H-75H 中,其中70H~71H 存放秒
数据,72H~73H 存放分数据,74H~75H 存放时数据,每一地址单元内均为十进
制BCD 码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD
码数据的对应段码存放在ROM 表中。显示时,先取出70H~75H 某一地址
中的数据,然后查的对应的显示段码从P1 口输出。P3 口将
对应的数码管
选中,就是显示该地址单元的数据值。 (3)定时器T0 中断服务程序
定时器T0 用于时间计时。定时溢出中断周期设为50ms,中断累计20
次( 即1s) 时对秒计数单元进行加1 操作。时间计数单元地址分别在
70H~71H(s)、76H~77H(min)、78H~79H(h),7AH 单元存放“熄灭符”
数据(#0AH)。在计数单元中采用十进制BCD 码计数,满60 进位。T0 中
断服务程序流程图3 所示。 (4)T1 中断服务程序
T1 中断服务程序应用于指示调整单元数字的亮闪。在时间调整状态
下,每过0.3 秒,将对应单元的显示数据换成熄灭符数据(#0AH)。这样,
在调整时间时,对应调整单元的显示数据就会间隔闪亮。 (5)调时功能程序
调时功能程序的设计方法是:按下按键,若按下时间小于1 秒,进入
省电状态(数码管不亮,时钟不停),否则进入调分状态,
等待操作,此时
计时器停止走动。当再次按下按钮时,若按下的时间小于0.5 秒,则时间
河南科技大学毕业设计(论文) 16
加1 分钟;若按下时间大于0.5 秒,则进入小时调整状态。在小时调整状
态下,当按键按下的时间大于0.5 秒时退出调整状态,时钟继续走动。 3.1.2 程序设计
定时器T0、T1 溢出周期为50MS,T0 为秒计数用,T1 为调整时闪烁
用,P3.7 为调整按钮,P1 口为字符输出口,采用共阳显示管。
中断入口程序
ORG 0000H 程序执行开始地址 LJMP START 跳到标号START 执行 ORG 0003H 外中断0 中断程序入口 RETI 外中断0 中断返回
ORG 000BH 定时器T0 中断程序入口 LJMP INTT0 跳至INTTO 执行 ORG 0013H 外中断1 中断程序入口
RETI 外中断1 中断返回
ORG 001BH 定时器T1 中断程序入口 ORG 0023H 串行中断程序入口地址 RETI 串行中断程序返回 主程序
START: MOV R0,#70H 清70H-7AH 共11 个内存单元 MOV R7,#0BH
CLEARDISP: MOV @R0,#00H INC R0
DJNZ R7,CLEARDISP
MOV 20H,#00H 清20H(标志用) MOV 7AH,#0AH 放入\熄灭符\数据 MOV TMOD,#11H 设T0、T1 为16 位定时器 MOV TL0,#00H 50MS 定时初值(T0 计时用) MOV TH0,#4CH 50MS 定时初值 MOV TL1,#00H 50MS 定时初值 河南科技大学毕业设计(论文) 17
MOV TH1,#4CH 50MS 定时初值 SETB EA 总中断开放 SETB ET0 允许T0 中断 SETB TR0 开启T0 定时器