基于单片机的数字电子钟单片机课程设计内容摘要:

14 RET NOT_CLOCK0: MOV A,MODE CJNE A,8,NOT_CLOCK1。 MODE2 为 1 时,不为模式 8,判断是否为模式 9 LCALL CONVERT_BCD3。 为模式 8,调用 display—— clock 程序 LCALL CLOCK_DISPLAY RET NOT_CLOCK1: CJNE A,9,NOT_CLOCK2。 不为模式 9,显示 mode2=0 下的 display程序 LCALL CONVERT_BCD3。 为模式 9,调用 clockdisplay 程序 LCALL CLOCK_DISPLAY RET NOT_CLOCK2: LCALL CONVERT_BCD2。 此时为 mode2 模式为 1 的,选择闪烁模式,对 DISPLAY 程序经行选择 LCALL CHOOSE_DISPLAY2。 模式 0, display 程序 RET。 显示模式选择函 数 CHOOSE_DISPLAY1: MOV A,MODE CJNE A,0,CH_1 LCALL DISPLAY1。 模式为 0,调用正常的显示程序 RET CH_1: LCALL DISPLAY1_2 RET CHOOSE_DISPLAY2: MOV A,MODE CJNE A,0,CH_2 LCALL DISPLAY2。 模式为 0,调用正常的显示程序 RET CH_2: LCALL DISPLAY2_2 RET。 中断服务程序。 中断服务程序 T0_INT: PUSH ACC。 保护现场开始,保护 A 累加器 PUSH PSW。 保护程序状态字存储器 基于单片机的数字电子钟 LKH 11/27/2020 15 PUSH DPL。 数据地址指针(低 8 位) PUSH DPH SETB RS1。 选择 2 区工作存储单元 MOV TL0,(655365000)MOD 256。 恢复时间常数 MOV TH0,(655365000)/256 LCALL KEY_SCAN INC TIMER_COUNT MOV A,TIMER_COUNT CJNE A,100,T0_INT1。 如果 A 不等于 100 ,跳到TO_INT1 MOV TIMER_COUNT,0 CPL FLASH_FLAG。 每 5MS*100=500MS取反闪烁标志位。 CPL。 LCALL FLASH。 CPL:Converse Position Logical 位取反 JNB FLASH_FLAG,T0_INT1。 为 0 跳到 TO_INT1 INC S_MEM MOV A,S_MEM CJNE A,60,T0_INT1。 秒位 MOV S_MEM,0 INC M_MEM MOV A,M_MEM CJNE A,60,T0_INT1。 分位 MOV M_MEM,0 INC H_MEM MOV A,H_MEM CJNE A,24,T0_INT1 MOV H_MEM,0。 时位 INC D_MEM MOV A,D_MEM CJNE A,32,T0_INT1 MOV D_MEM,1。 天 INC MON_MEM MOV A,MON_MEM CJNE A,13,T0_INT1 MOV MON_MEM,1。 月 INC Y_MEM_1 基于单片机的数字电子钟 LKH 11/27/2020 16 MOV A,Y_MEM_1 CJNE A,100,T0_INT1 MOV Y_MEM_1,0。 低位年 INC Y_MEM_2 MOV A,Y_MEM_2 CJNE A,100,T0_INT1 MOV Y_MEM_2,0。 高位年 T0_INT1: POP DPH POP DPL POP PSW POP ACC RETI。 出栈。 闹钟 显示 及转码 程序。 闹钟显示程序。 时钟的显示函数 CLOCK_DISPLAY:。 SETB CLOCK_FLASH MOV P0,11111111B SETB NOP NOP CPL MOV A,SCAN_COUNT5 ADD A,ACC MOV R1,A LCALL FLASH3。 在 flash 函数中选择调用哪个表。 MOV DPTR,LED_SCAN_TABLE MOV A,R1 MOVC A,@A+DPTR SETB。 位锁存 MOV P0,A CLR MOV A,SCAN_COUNT5 ADD A,ACC INC A MOVC A,@A+DPTR MOV R0,A MOV A,@R0 SETB 基于单片机的数字电子钟 LKH 11/27/2020 17 MOV P0,A。 LCALL DELAY_1S。 调试用 CLR。 DB 3FH,06H,5BH,04FH,66H,6DH,7DH,07H。 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH INC SCAN_COUNT5 MOV A,SCAN_COUNT5 CJNE A,4,DONE5 MOV SCAN_COUNT5,0 DONE5: RET。 闹钟闪烁及模式选择程序。 时钟闪烁模式选择程序 FLASH3: JNB FLASH_FLAG,F31。 若标志位位为 0,显示闪烁程序,否则显示正常模式。 LCALL LIGHT_OFF LJMP FLASH3 F31: MOV A,MODE CJNE A,8,F32 LJMP H_F_CLOCK。 模式 8,校准小时 F32:。 CJNE A,0,F34。 模式为 0,则返回 ? LJMP M_F_CLOCK。 模式 9,校准分钟 F34: RET。 闪烁程序 H_F_CLOCK: MOV DPTR,LED_SCAN_TABLE_CLOCK_1 RET M_F_CLOCK: MOV DPTR,LED_SCAN_TABLE_CLOCK_2 RET。 闹钟 BCD 转码程序。 为闹钟做 BCD 转码 CONVERT_BCD3:。 第一个数码管 MOV R3,H_MEM_CLOCK MOV R2,0 LCALL BTID MOV A,R6 ANL A,0FH。 保留低四位 基于单片机的数字电子钟 LKH 11/27/2020 18 MOV DPTR,LED_CODE MOVC A,@A+DPTR MOV LED1_CLOCK_HOUR,A。 第二个数码管 MOV A,R6 ANL A,0F0H。 保留高四位 SWAP A MOV DPTR,LED_CODE MOVC A,@A+DPTR MOV LED2_CLOCK_HOUR,A。 第三个数码管 MOV R3,M_MEM_CLOCK MOV R2,0 LCALL BTID MOV A,R6 ANL A,0FH MOV DPTR,LED_CODE MOVC A,@A+DPTR MOV LED1_CLOCK_MIN,A。 第四个数码管 MOV A,R6 ANL A,0F0H SWAP A。 MOV DPTR,LED_CODE MOVC A,@A+DPTR MOV LED2_CLOCK_MIN,A RET。 检测闹钟程序。 检测是否到达闹钟时间 CHECK_TIME: MOV A,H_MEM_CLOCK CJNE A,H_MEM,OVER2 CHECK_NEXT: MOV A,M_MEM_CLOCK CJNE A,M_MEM,OVER2 MOV A,S_MEM。 为了防止整一分钟都会叫,只在一秒的时候判断一次 CJNE A,0,OVER2 LCALL CLOCK_SOUND RET OVER2: RET。 显示时分秒程序。 时分秒显示程序 基于单片机的数字电子钟 LKH 11/27/2020 19。 显示时分秒程序 DISPLAY1: MOV P0,11111111B SETB NOP NOP。 MOV P0,0FFH CPL MOV A,SCAN_COUNT。 之 前 定 义 过 :SCAN_COUNT EQU 7BH ADD A,ACC MOV DPTR,LED_SCAN_TABLE MOVC A,@A+DPTR SETB。 位锁存 MOV P0,A CLR MOV A,SCAN_COUNT ADD A,ACC INC A MOVC A,@A+DPTR MOV R0,A MOV A,@R0 MOV R0,SCAN_COUNT DOT: CJNE R0,2,NOACT1 ACT: SETB ORL A,80H MOV P0,A SETB。 调试用 CLR SJMP GO_ON NOACT1: CJNE R0,4,NOACT2 SJMP ACT NOACT2: SETB MOV P0,A CLR。 DB 3FH,06H,5BH,04FH,66H,6DH,7DH,07H。 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH GO_ON: INC SCAN_COUNT MOV A,SCAN_COUNT CJNE A,6,DONE 基于单片机的数字电子钟 LKH 11/27/2020 20 MOV SCAN_COUNT,0 DONE: RET。 时分秒 BCD 程序。 CONVERT_BCD1:。 第一个数码管 MOV R3,S_MEM MOV R2,0 LCALL BTID MOV A,R6 ANL A,0FH。 保留低四位 MOV DPTR,LED_CODE MOVC。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。