电子技术专业自动打铃器毕业论文内容摘要:

殊功能寄存器的编程,可以方便的选择定时器 /计数器两种工作模式和 4 种工作方式。 定时器 /计数器工作在方式 0 时,为 13 位的计数器,由 TLX(X=0、 1)的低 5位和 THX 的高 8 位所构成。 TLX 低 5 位溢出则向 THX 进位, THX 计数溢出则置位 TCON 中 的溢出标志位 TFX. 当定时器 /计数器工作于方式 1,为 16 位的计数器。 本设计师单片机多功能定时器,所以 MCS51 内部的定时器 /计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增 1。 实时时钟实现的基本方法 时钟的最小计时单位是秒,但使用定时器的方式 1,最大的定时时间也只能达到 131ms。 我们可把定时器的定时时间定为 50ms。 这样,计数溢出 20 次即可得到时钟的最小计时单位:秒。 而计数 20 次可以用软件实现。 秒计时是采用中断方式进行溢出次数的累积,计满 20 次 ,即得到秒计时。 从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。 要求每满 1秒,则“秒”单元中的内容加 1;“秒”单元满 60,则“分”单元中的内容加 1;“分”单元满 60,则“时”单元中的内容加 1;“时”单元满 24,则将时、分、秒的内容全部清零。 实时时钟程序设计步骤 ( 1)选择工作方式,计算初值; ( 2)采用中断方式进行溢出次数累计; ( 3)从秒 —— 分 —— 时的计时是通过累加和数值比较实现的; ( 4)时钟显示缓冲区:时钟时间在方位数码管上进行显示,为此在内部 RAM 中要设置显示缓冲区,共 8 个 地址单元。 显示缓冲区从左到右依次存放时、分、秒数值; ( 5)主程序:主要进行定时器 /计数器的初始化编程,然后反复调用显示 13 子程序的方法等待中断的到来。 ( 6)中断服务程序:进行计时操作 ( 7)加 1子程序:用于完成对时、分、秒的加操作,中断服务程序在秒、 分、时加 1时共有三种条调用加 1子程序,包括三项内容:合字、加 1并进行十进制调整、分字。 说明 在整个系统中,在单片机的 23H、 22H和 21H 中存储当前时间的小时、分钟和秒。 调整选择键 SET_KEY: ;通过选择键选择调整位,选中位闪烁。 增加 键 ADD_KEY: ;按一次使选中位加 1。 减少键 DEC_KEY; ;按一次使选中位减 1。 如果长按 ADD_KEY 或 DEC_KEY,识别后则进行调时快进,此时停止闪烁 如果选中位是秒,则按增加键或减少键都是将秒清零 强制打铃键DALING_KEY: ;用来强制打铃或强制关闭铃声。 系统开机后,按功能移位键就可以调整当前的时间,整个系统操作简单,功能明确。 BEEP EQU。 定义蜂鸣器(电铃)控制信号输出口 ORG 0000H。 程序入口地址 LJMP START ORG 000BH。 定时器 0 中断入口地址 LJMP TIMER_0 ORG 0300H /*****程序开始,初始化 *****/ START: SETB BEEP。 关闭蜂鸣器(电铃) SETB 48H。 使用一个 bit 位用于调时闪烁标志 SETB 47H。 使用一个 bit 位用于产生脉冲用于调时快进时基 CLR 45H。 关闭响铃方式 1 标志 CLR 44H。 关闭响铃方式 2 标志 14 MOV R1,0。 调整选择键功 能标志: 0 正常走时、 1 调时、 2 调分、 3 调秒 MOV 20H,00H。 用于控制秒基准时钟源的产生 MOV 21H,00H。 清零秒寄存器 MOV 22H,00H。 清零分寄存器 MOV 23H,00H。 清零时寄存器 MOV 24H,00H。 用于控制调时闪烁的基准时钟的产生 MOV IP,02H。 IP,IE 初始化 MOV IE,82H MOV TMOD,01H。 设定定时器 0 工作方式 1 MOV TH0,3CH MOV TL0,0B0H。 赋定时初值,定时 50ms SETB TR0。 启动定时器 0 MOV SP,40H。 重设堆栈指针 /*****主程序 *****/ MAIN: CJNE R1,00H,MAIN1。 是否为正常走时状态 LCALL BIJIAO1。 调用起床、熄灯打铃比较子程序 LCALL BIJIAO2。 调用上、下课打铃比较子程序 LCALL DALING1。 调用响铃方式 1 执行子程序 LCALL DALING2。 调用响铃方式 2 执行子程序 MAIN1: LCALL DISPLAY。 调用显示子程序 LCALL KEY_SCAN。 调用按键检测子程序 JZ MAIN。 无键按下则返回重新循环 LCALL SET_KEY。 调用选择键处理子程序 JB 46H,MAIN。 如果已进行长按调整(调时快进),则不再执行下面的单步调整 LCALL ADD_KEY。 调用增加键处理子程序 LCALL DEC_KEY。 调用减少键处理子程序 LCALL DALING_KEY。 处理强制打铃 /强制关闭铃声键 15 LJMP MAIN。 重新循环 /*****定时中断服务程序 *****/ TIMER_0: PUSH ACC PUSH PSW。 保护现场 MOV TH0,3CH MOV TL0,0B0H。 重新赋定时初值 CPL 47H。 产生脉冲用于调时快进时基 INC 24H MOV A,24H CJNE A,10,ADD_TIME。 产生 秒基准时钟,用于调时闪烁 CPL 48H。 取反调时闪烁标志位 MOV 24H,00H ADD_TIME: INC 20H MOV A,20H CJNE A,20,RETI1。 产生 1 秒基准时钟 MOV 20H,00H。 一秒钟时间到,清零 20H MOV A,21H ADD A,01H DA A。 作十进制调整 MOV 21H,A CJNE A,60H,RETI1 MOV 21H,00H。 一分钟到 MOV A,22H ADD A,01H DA A MOV 22H,A CJNE A,60H,RETI1 16 MOV 22H,00H。 一小时到 MOV A,23H ADD A,01H DA A MOV 23H,A CJNE A,24H,RETI1 MOV 23H,00H。 到 24 点 ,清零小时 RETI1: POP PSW POP ACC。 恢复现场 RETI。 中断返回 /*****显示处理 *****/ DISPLAY: MOV A,21H。 秒 ANL A,0FH MOV 2FH,A。 转换出秒个位,存入 2FH MOV A,21H ANL A,0F0H SWAP A MOV 2EH,A。 转换出秒十位,存入 2EH JB 46H,MIN。 如果长按按键(调时快进),则跳过闪烁处理 CJNE R1,3,MIN。 如果 R1 为 3,闪烁秒位待调整 JB 48H,MIN MOV 2FH,0AH。 使该位为 10,查表得到使该位不显示的输出 MOV 2EH,0AH MIN: MOV A,22H。 分 ANL A,0FH MOV 2DH,A。 转换出分个位,存入 2DH 17 MOV A,22H ANL A,0F0H SWAP A MOV 2CH,A。 转换出分十位,存入 2CH JB 46H,HOUR。 如果长按按键(调时快进),则跳过闪烁处理 CJNE R1,2,HOUR。 如果 R1 为 2,闪烁分位待调整 JB 48H,HOUR MOV 2DH,0AH。 使该位为 10,查表得到使该位不显示的输出 MOV 2CH,0AH HOUR: MOV A,23H。 时 ANL A,0FH MOV 2BH,A。 转换出时个位,存入 2BH MOV A,23H ANL A,0F0H SWAP A MOV 2AH,A。 转换出时十位,存入 2AH JB 46H,DISP。 如果长按按键(调时快进),则跳过闪烁处理 CJNE R1,1,DISP。 如果 R1 为 1,闪烁时位待调整 JB 48H,DISP MOV 2BH,0AH。 使该位为 10,查表得到使该位不显示 的输出 MOV 2AH,0AH /*****数码管动态扫描显示 *****/ DISP: MOV DPTR,TABLE MOV A,2FH MOVC A,@A+DPTR MOV P0,A CLR LCALL DELAY 18 SETB。 显示秒个位 MOV A,2EH MOVC A,@A+DPTR MOV P0,A CLR LCALL DELAY。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。