📄 text2.lst
字号:
145 ;时,分,秒的初始化
146 ;==========================================================================================
==========
00FB 753300 147 INTT: MOV SEC,#0; 变量初始化
00FE 753200 148 MOV MIN,#0
0101 75310C 149 MOV HOUR,#12
0104 22 150 RET
151 ;==========================================================================================
==========
152 ;K2小时加一,K3分钟加一,K4为正常走时
153 ;===================================================================================
0105 154 SET_TIME: ; 设置时间;K1键设置时间
0105 C28C 155 CLR TR0
0107 753300 156 MOV SEC,#0
010A 20A521 157 S0: JB K2,S1 ; K2键加时
010D 30A5FD 158 JNB K2,$
0110 0531 159 INC HOUR
0112 E531 160 MOV A,HOUR
0114 B41803 161 CJNE A,#24,S11
0117 753100 162 MOV HOUR,#0
011A 120246 163 S11: LCALL BUSY ;检查忙
011D 758001 164 mov p0,#01h ;清除屏幕,这条指令是能否显示的关键
0120 120080 165 lcall ENABLE;写入指令
0123 315F 166 CALL CONV ;时钟显示
0125 7D19 167 MOV R5,#25
0127 1200B6 168 S111: LCALL DELAY
012A DDFB 169 DJNZ R5,S111
012C 80DC 170 JMP S0
A51 MACRO ASSEMBLER TEXT2 12/26/2008 21:32:05 PAGE 4
012E 20A622 171 S1: JB K3,S2 ; K3键加分
0131 30A6FD 172 JNB K3,$
0134 0532 173 INC MIN
0136 E532 174 MOV A,MIN
0138 B43C03 175 CJNE A,#60,S21
013B 753200 176 MOV MIN,#0
013E 120246 177 S21: LCALL BUSY
0141 758001 178 mov p0,#01h ;清除屏幕,这条指令是能否显示的关键
0144 120080 179 lcall ENABLE;写入指令
0147 12015F 180 LCALL CONV
014A 7D14 181 MOV R5,#20
014C 1200B6 182 S211: LCALL DELAY
014F DDFB 183 DJNZ R5,S211
0151 80B7 184 JMP S0
0153 20A7B4 185 S2: JB K4,S0; K4恢复走时
0156 30A7FD 186 JNB K4,$
0159 1200ED 187 LCALL LED_BL
015C D28C 188 SETB TR0
015E 22 189 RET
190 ;=======================================================================================
191 ;时钟的液晶显示
192 ;=========================================================================================
015F E531 193 CONV: MOV A,HOUR ; 时钟显示
0161 753505 194 MOV X,#5
0164 12018A 195 LCALL SHOW_DIG2; 转化为字符并显示
0167 0535 196 INC X
0169 743A 197 MOV A,#":"
016B 8535F0 198 MOV B,X
016E 1201A7 199 LCALL LCDP2 ;显示地址程序
0171 E532 200 MOV A,MIN
0173 0535 201 INC X
0175 12018A 202 LCALL SHOW_DIG2
203 ;INC X
204 ;LCALL SHOW_DIG2
0178 0535 205 INC X
017A 743A 206 MOV A,#":"
017C 8535F0 207 MOV B,X
017F 1201A7 208 LCALL LCDP2
0182 E533 209 MOV A,SEC
0184 0535 210 INC X
0186 12018A 211 LCALL SHOW_DIG2
0189 22 212 RET
018A 75F00A 213 SHOW_DIG2:MOV B,#10
018D 84 214 DIV AB ;A为时位,B为个位
018E 2430 215 ADD A,#30H; 转换为字符
0190 C0F0 216 PUSH B ; 保护B的数据
0192 8535F0 217 MOV B,X
0195 1201A7 218 LCALL LCDP2; 确定A的显示地址
0198 D0F0 219 POP B
019A E5F0 220 MOV A,B
019C 2430 221 ADD A,#30H
019E 0535 222 INC X
01A0 8535F0 223 MOV B,X
01A3 1201A7 224 LCALL LCDP2
01A6 22 225 RET
226 ;===================================================================================
227 ;ADD A,#0C0H 应该在液晶的第二行首地址,可显示时却在第一行??????????
228 ;========================================================================================
01A7 C0E0 229 LCDP2: PUSH ACC; 保护A的数据
01A9 E5F0 230 MOV A,B
01AB 24C0 231 ADD A,#0C0H ;第二行的首地址
01AD 1201B6 232 LCALL WCOM; 写入指令
01B0 D0E0 233 POP ACC
01B2 1201C1 234 LCALL WDATA ;写入数据
01B5 22 235 RET
01B6 C2A0 236 WCOM: CLR RS ;送命令 写入指令
A51 MACRO ASSEMBLER TEXT2 12/26/2008 21:32:05 PAGE 5
01B8 C2A1 237 CLR RW ;写入数据
01BA C2A2 238 CLR E ;写入数据
01BC 11B6 239 CALL DELAY;2.5MS
01BE D2A2 240 SETB E ;写入地址
01C0 22 241 RET
01C1 F580 242 WDATA: MOV p0,A ;显示 写入数据显示
01C3 D2A0 243 SETB RS ;写入数据
01C5 C2A1 244 CLR RW ;写入数据
01C7 C2A2 245 CLR E ;写入数据
246 ;rlc A
01C9 33 247 RLC A
01CA 33 248 RLC A
01CB 33 249 RLC A
01CC 33 250 RLC A
01CD F580 251 MOV P0,A
01CF D2A0 252 SETB RS ;写入数据
01D1 11B6 253 CALL DELAY ;短延时;2.5MS
01D3 C2A2 254 CLR E ;写入数据
01D5 22 255 RET
256 ;==========================================================================================
==========
01D6 7E05 257 DE: MOV R6,#5
01D8 DEFE 258 DJNZ R6,$
01DA 22 259 RET
01DB D2A2 260 EN1: SETB E
01DD 1201D6 261 LCALL DE
01E0 C2A2 262 CLR E
01E2 1201D6 263 LCALL DE
01E5 22 264 RET
265 ;==========================================================================================
============
266 ;TO工作方式0 ,10MS定时 便于键盘扫描
267 ;==========================================================================================
=
01E6 758901 268 INTT_TIME:MOV TMOD,#01H ; TO的定时方式一
01E9 75A882 269 MOV IE,#10000010B
01EC 758CD8 270 MOV TH0,#0D8H;延时10MS;10MS便于键盘扫描
01EF 758AF0 271 MOV TL0,#0F0H
01F2 D28C 272 SETB TR0
01F4 22 273 RET
274 ;=========================================================================================
===========
275 ;如何定时来解决液晶闪烁的问题呢?????
276 ;=======================================================================================
01F5 C0E0 277 INTT0: PUSH ACC
01F7 758CD8 278 MOV TH0,#0D8H
01FA 758AF0 279 MOV TL0,#0F0H
01FD 0540 280 INC 40H
01FF E540 281 MOV A,40H
0201 B40A29 282 CJNE A,#10,TT;定时100MS;CJNE A,#100,TT;这里的1S又该怎么设置?????
0204 754000 283 MOV 40H,#0
0207 B2B7 284 CPL WLED
0209 0533 285 INC SEC
020B E533 286 MOV A,SEC
020D B43C1D 287 CJNE A,#60,TT
0210 0532 288 INC MIN
0212 753300 289 MOV SEC,#0
0215 E532 290 MOV A,MIN
0217 B43C13 291 CJNE A,#60,TT
021A 0531 292 INC HOUR
021C 753200 293 MOV MIN,#0
021F E531 294 MOV A,HOUR
0221 B41809 295 CJNE A,#24,TT
0224 753300 296 MOV SEC,#0
0227 753200 297 MOV MIN,#0
022A 753100 298 MOV HOUR,#0
A51 MACRO ASSEMBLER TEXT2 12/26/2008 21:32:05 PAGE 6
022D 299 TT: ;MOV P0,#01H;
300 ;LCALL ENABLE;
301 ;MOV p0,#06H ;+1;AC地址计数器自动加一
302 ;CALL ENABLE
022D 120056 303 LCALL LOP ;键盘扫描;当无键按下时
0230 120246 304 LCALL BUSY ; 检查忙
0233 758001 305 mov p0,#01h;清除屏幕,这条指令是能否显示的关键
0236 120080 306 lcall ENABLE;写入指令
0239 12015F 307 LCALL CONV; 显示输出;5MS;这里的5MS是否为影响1S定时的呢 与 键盘的扫描时间????
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -