📄 digital clock (2).lst
字号:
A51 MACRO ASSEMBLER DIGITAL_CLOCK__2_ 10/07/2008 21:27:26 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN Digital Clock (2).OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE Digital Clock (2).asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0090 1 S_SET BIT P1.0 ;数字钟秒控制位
0091 2 M_SET BIT P1.1 ;分钟控制位
0092 3 H_SET BIT P1.2 ;小时控制位
0093 4 A_DISP BIT P1.3
0094 5 A_S_SET BIT P1.4
0095 6 A_M_SET BIT P1.5
0096 7 A_H_SET BIT P1.6
0030 8 SECOND EQU 30H
0031 9 MINUTE EQU 31H
0032 10 HOUR EQU 32H
0034 11 TCNT EQU 34H
0036 12 A_SEC EQU 36H
0037 13 A_MIN EQU 37H
0038 14 A_HOU EQU 38H
0039 15 ALARM EQU 39H
0000 16 ORG 00H
0000 800C 17 SJMP START
000B 18 ORG 0BH
000B 020110 19 LJMP INT_T0
000E 20 START:
000E 753200 21 MOV HOUR,#0 ;初始化
0011 753100 22 MOV MINUTE,#0
0014 753000 23 MOV SECOND,#0
0017 753400 24 MOV TCNT,#0
001A 753600 25 MOV A_SEC,#0 ;闹铃初始化为分隔
符
001D 753700 26 MOV A_MIN,#0
0020 753800 27 MOV A_HOU,#0
0023 753900 28 MOV ALARM,#0 ;闹铃显示按钮
0026 758901 29 MOV TMOD,#01H
0029 758C3C 30 MOV TH0,#(65536-50000)/256 ;定时50毫秒
002C 758AB0 31 MOV TL0,#(65536-50000)MOD 256
002F 75A882 32 MOV IE,#82H
0032 D28C 33 SETB TR0
34 ;****************************************************
35 ;判断是否有控制键按下,是哪一个键按下
0034 120148 36 A1: LCALL DISPLAY
0037 309015 37 JNB S_SET,S1
003A 309125 38 JNB M_SET,S2
003D 309235 39 JNB H_SET,S3
0040 30934A 40 JNB A_DISP,S4
0043 30944F 41 JNB A_S_SET,S5
0046 30955E 42 JNB A_M_SET,S6
0049 30966D 43 JNB A_H_SET,S7
44
45
004C 020034 46 LJMP A1
004F 1202AD 47 S1: LCALL DELAY ;去抖动
0052 2090DF 48 JB S_SET,A1
49
0055 0530 50 INC SECOND ;秒值加1
0057 E530 51 MOV A,SECOND
0059 B43C70 52 CJNE A,#60,J0 ;判断是否加到60秒
005C 753000 53 MOV SECOND,#0
005F 020068 54 LJMP K1
0062 1202AD 55 S2: LCALL DELAY
0065 2091CC 56 JB M_SET,A1
A51 MACRO ASSEMBLER DIGITAL_CLOCK__2_ 10/07/2008 21:27:26 PAGE 2
57
0068 0531 58 K1: INC MINUTE ;分钟值加1
006A E531 59 MOV A,MINUTE
006C B43C65 60 CJNE A,#60,J1 ;判断是否加到60分
006F 753100 61 MOV MINUTE,#0
0072 02007B 62 LJMP K2
0075 1202AD 63 S3: LCALL DELAY
0078 2092B9 64 JB H_SET,A1
65
007B 0532 66 K2: INC HOUR ;小时值加1
007D E532 67 MOV A,HOUR
007F B4185C 68 CJNE A,#24,J2 ;判断是否加到24小时
0082 753200 69 MOV HOUR,#0
0085 753100 70 MOV MINUTE,#0
0088 753000 71 MOV SECOND,#0
008B 01DE 72 AJMP J2
73
008D 1202AD 74 S4: LCALL DELAY
0090 2093A1 75 JB A_DISP,A1
0093 01E8 76 AJMP J3
77
0095 1202AD 78 S5: LCALL DELAY ;去抖动
0098 209499 79 JB A_S_SET,A1
80
009B 0536 81 INC A_SEC ;秒值加1
009D E536 82 MOV A,A_SEC
009F B43C50 83 CJNE A,#60,J4 ;判断是否加到60秒
00A2 753600 84 MOV A_SEC,#0
00A5 01F2 85 AJMP J4
86
00A7 1202AD 87 S6: LCALL DELAY
00AA 209587 88 JB A_M_SET,A1
89
00AD 0537 90 INC A_MIN ;分钟值加1
00AF E537 91 MOV A,A_MIN
00B1 B43C48 92 CJNE A,#60,J5 ;判断是否加到60分
00B4 753700 93 MOV A_MIN,#0
00B7 01FC 94 AJMP J5
95
00B9 1202AD 96 S7: LCALL DELAY
00BC 20960A 97 JB A_H_SET,OVER
98
00BF 0538 99 INC A_HOU ;小时值加1
00C1 E538 100 MOV A,A_HOU
00C3 B41840 101 CJNE A,#24,J6 ;判断是否加到24小时
00C6 753800 102 MOV A_HOU,#0
103
00C9 020034 104 OVER: LJMP A1
105 ;****************************************************
106 ;等待按键抬起
00CC 209003 107 J0: JB S_SET,N0
00CF 120148 108 LCALL DISPLAY
109 ;SJMP J0
00D2 0134 110 N0: AJMP A1
00D4 209105 111 J1: JB M_SET,N1
00D7 120148 112 LCALL DISPLAY
00DA 80F8 113 SJMP J1
00DC 0134 114 N1: AJMP A1
00DE 209205 115 J2: JB H_SET,N2
00E1 120148 116 LCALL DISPLAY
00E4 80F8 117 SJMP J2
00E6 0134 118 N2: AJMP A1
00E8 209305 119 J3: JB A_DISP,N3
00EB 12024F 120 LCALL INT_ALARM
00EE 80F8 121 SJMP J3
00F0 0134 122 N3: AJMP A1
A51 MACRO ASSEMBLER DIGITAL_CLOCK__2_ 10/07/2008 21:27:26 PAGE 3
00F2 209405 123 J4: JB A_S_SET,N4
00F5 1201E0 124 LCALL DISPLAY_ALARM
00F8 80F8 125 SJMP J4
00FA 0134 126 N4: AJMP A1
00FC 209505 127 J5: JB A_M_SET,N5
00FF 1201E0 128 LCALL DISPLAY_ALARM
0102 80F8 129 SJMP J5
0104 0134 130 N5: AJMP A1
0106 209605 131 J6: JB A_H_SET,N6
0109 1201E0 132 LCALL DISPLAY_ALARM
010C 80F8 133 SJMP J6
010E 0134 134 N6: AJMP A1
135 ;***********************************************
136 ;定时器中断服务程序,对秒,分钟和小时的计数
0110 758C3C 137 INT_T0: MOV TH0,#(65536-50000)/256
0113 758AB0 138 MOV TL0,#(65536-50000)MOD 256
0116 0534 139 INC TCNT
0118 E534 140 MOV A,TCNT
011A B4142A 141 CJNE A,#20,RETUNE ;计时1秒
011D 0530 142 INC SECOND
011F 753400 143 MOV TCNT,#0
0122 E530 144 MOV A,SECOND
0124 B43C20 145 CJNE A,#60,RETUNE
0127 0531 146 INC MINUTE
0129 753000 147 MOV SECOND,#0
012C E531 148 MOV A,MINUTE
012E B43C16 149 CJNE A,#60,RETUNE
0131 0532 150 INC HOUR
0133 753100 151 MOV MINUTE,#0
0136 E532 152 MOV A,HOUR
0138 B4180C 153 CJNE A,#24,RETUNE
013B 753200 154 MOV HOUR,#0
013E 753100 155 MOV MINUTE,#0
0141 753000 156 MOV SECOND,#0
0144 753400 157 MOV TCNT,#0
0147 32 158 RETUNE: RETI
159 ;******************************************
160 ;显示控制子程序
0148 9001D6 161 DISPLAY: MOV DPTR,#TABLE
014B E530 162 MOV A,SECOND ;显示秒
014D 75F00A 163 MOV B,#10
0150 84 164 DIV AB
0151 C2B6 165 CLR P3.6
0153 93 166 MOVC A,@A+DPTR
0154 F580 167 MOV P0,A
0156 1202AD 168 LCALL DELAY
0159 D2B6 169 SETB P3.6
015B E5F0 170 MOV A,B
015D C2B7 171 CLR P3.7
015F 93 172 MOVC A,@A+DPTR
0160 F580 173 MOV P0,A
0162 1202AD 174 LCALL DELAY
0165 D2B7 175 SETB P3.7
176
0167 C2B5 177 CLR P3.5
0169 758040 178 MOV P0,#40H ;显示分隔符
016C 1202AD 179 LCALL DELAY
016F D2B5 180 SETB P3.5
181
0171 E532 182 MOV A,HOUR ;显示分钟
0173 A939 183 MOV R1,ALARM
0175 B9010A 184 CJNE R1,#01H,B20
0178 B53807 185 CJNE A,A_HOU,B20
017B E531 186 MOV A,MINUTE
017D B53702 187 CJNE A,A_MIN,B20
0180 B297 188 CPL P1.7
A51 MACRO ASSEMBLER DIGITAL_CLOCK__2_ 10/07/2008 21:27:26 PAGE 4
0182 E531 189 B20: MOV A,MINUTE
0184 75F00A 190 MOV B,#10
0187 84 191 DIV AB
0188 C2B3 192 CLR P3.3
018A 93 193 MOVC A,@A+DPTR
018B F580 194 MOV P0,A
018D 1202AD 195 LCALL DELAY
0190 D2B3 196 SETB P3.3
0192 E5F0 197 MOV A,B
0194 C2B4 198 CLR P3.4
0196 93 199 MOVC A,@A+DPTR
0197 F580 200 MOV P0,A
0199 1202AD 201 LCALL DELAY
019C D2B4 202 SETB P3.4
203
019E C2B2 204 CLR P3.2
01A0 758040 205 MOV P0,#40H ;显示分隔符
01A3 1202AD 206 LCALL DELAY
01A6 D2B2 207 SETB P3.2
208
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -