📄 sz03.lst
字号:
A51 MACRO ASSEMBLER SZ03 01/04/2007 21:53:58 PAGE 4
00DF 85E0A0 191 MOV P2, ACC ;由P2送出扫描输出信号
00E2 7D02 192 MOV R5, #2 ;延迟一会儿
00E4 3150 193 ACALL DELAY
194 ;改变扫描码 EX:XXXX1011
00E6 03 195 RR A ;累加器向右移动一位
00E7 08 196 INC R0 ;显示器显示缓冲区地址加1
00E8 DAEE 197 DJNZ R2, S1 ;循环判断是否继续执行
00EA 22 198 RET
199
200 ;---―― 实现调整时间子程序 ――――――
201
202 ;设置目前时间
00EB 203 SET_TIME:
00EB C28C 204 CLR TR0 ;定时器动作暂停
00ED 753600 205 MOV SEC, #0 ;秒钟变量清除为0
00F0 206 L0:
00F0 11D1 207 ACALL DISP ;扫描显示
208
00F2 20A513 209 JB K2, L1 ;未按下K2键则继续扫描
00F5 30A5FD 210 JNB K2, $ ;有按下则等待放开来
211 ;K2小时调整
00F8 0534 212 INC HOUR ;小时计数加1
00FA E534 213 MOV A, HOUR
00FC B41803 214 CJNE A,#24, L11 ;是否24H到了
00FF 753400 215 MOV HOUR, #0 ;小时变量清除为0
0102 216 L11:
0102 119E 217 ACALL CONV ;转换显示数据
0104 11D1 218 ACALL DISP ;扫描显示
0106 80E8 219 JMP L0 ;继续程序执行
220
0108 20A613 221 L1:JB K3, L2 ;未按下K3键则继续扫描
010B 30A6FD 222 JNB K3,$ ;有按下则等待放开来
223 ;K3分钟调整.
010E 0535 224 INC MIN ;分钟计数加1
0110 E535 225 MOV A, MIN
0112 B43C03 226 CJNE A,#60, L21 ;是否60 min到了
0115 753500 227 MOV MIN, #0 ;分钟变量清除为0
0118 228 L21:
0118 119E 229 ACALL CONV ;转换显示数据
011A 11D1 230 ACALL DISP ;扫描显示
011C 80D2 231 JMP L0 ;继续程序执行
232
011E 20A7CF 233 L2: JB K4,L0 ;未按下K4键则继续扫描
0121 30A7FD 234 JNB K4, $ ;有按下则等待放开来
0124 3138 235 ACALL BZ ;压电喇叭鸣响一声
236 ;K4设置完成
0126 3145 237 ACALL LED_BL ;LED闪动
0128 D28C 238 SETB TR0 ;启动定时器
012A 22 239 RET
240
241 ;----―喇叭和指示灯等其它子程序 ----――
242
243 ;计时单元清零
012B 244 INIT:
012B 753700 245 MOV DEDA, #0 ;5ms计数值清除为0
012E 753600 246 MOV SEC, #0 ;秒钟变量清除为0
0131 753500 247 MOV MIN, #0 ;分钟变量清除为0
0134 753400 248 MOV HOUR, #0 ;小时变量清除为0
0137 22 249 RET
250 ;―――――――――――――
251 ;压电喇叭
0138 252 BZ: ;压电喇叭鸣响一声
0138 7EFA 253 MOV R6, #250
013A 315B 254 B1: ACALL DEX
013C B2B4 255 CPL SPK
013E DEFA 256 DJNZ R6,B1
A51 MACRO ASSEMBLER SZ03 01/04/2007 21:53:58 PAGE 5
0140 7D32 257 MOV R5, #50 ;#10
0142 3150 258 ACALL DELAY
0144 22 259 RET
260
261 ;----------―――
262 ;工作指示
0145 263 LED_BL: ;工作指示灯闪烁
0145 7C06 264 MOV R4,#6
0147 B290 265 LE1:CPL WLED ;位反向
0149 7D19 266 MOV R5,#25 ;#5
014B 3150 267 ACALL DELAY
014D DCF8 268 DJNZ R4, LE1 ;延迟50ms
014F 22 269 RET
270 ;----------―――
271 ;延时子程序
0150 272 DELAY: ;;总延迟时间 R5* 2ms
0150 7E0A 273 MOV R6,#10 ;#50
0152 7F64 274 D1:MOV R7,#100
0154 DFFE 275 DJNZ R7,$
0156 DEFA 276 DJNZ R6,D1
0158 DDF6 277 DJNZ R5,DELAY
015A 22 278 RET
279 ;----------―――
280 ; 压电喇叭短暂延时子程序
015B 7FB4 281 DEX: MOV R7,#180 ;短暂延时
015D 00 282 DE1: NOP
015E DFFD 283 DJNZ R7, DE1
0160 22 284 RET
285
286 ;-------―― 增加定时闹铃程序部分 -------――
287 ;―――――――― 设置闹铃时间 ―――――――――
288 ;设置闹铃时间
0161 289 SET_ATIME:
0161 319C 290 ACALL CONVA ;加载闹铃时间数据
0163 291 N0:
0163 11D1 292 ACALL DISP
293 ;-----------
0165 20A513 294 JB K2, N1 ;未按下K2键则继续扫描
0168 30A5FD 295 JNB K2, $ ;有按下则等待放开来
296 ;K2调整小时
016B 0538 297 INC HH ;小时数加1
016D E538 298 MOV A, HH
016F B41803 299 CJNE A, #24,N11 ;是否24h到了
0172 753800 300 MOV HH,#0 ;小时请为0
0175 301 N11:
0175 319C 302 ACALL CONVA ;加载闹铃时间数据
0177 11D1 303 ACALL DISP ;扫描显示
0179 80E8 304 JMP N0 ;继续按键扫描
305 ;------------
017B 20A613 306 N1: JB K3, N2 ;未按下K3键则继续扫描
017E 30A6FD 307 JNB K3, $ ;有按下则等待放开来
308 ;K3调整分钟
0181 0539 309 INC MM ;调整分钟数
0183 E539 310 MOV A,MM ;分钟数加1
0185 B43C03 311 CJNE A, #60,N21 ;是否60min到了
0188 753900 312 MOV MM, #0 ;分钟数请为0
018B 313 N21:
018B 319C 314 ACALL CONVA ;加载闹铃时间数据
018D 11D1 315 ACALL DISP ;扫描显示
018F 80D2 316 JMP N0 ;继续按键扫描
317 ;------------
0191 20A7CF 318 N2: JB K4, N0 ;未按下K4键则继续扫描
0194 30A7FD 319 JNB K4, $ ;等K4键放开
320 ;K4设置完成......
0197 3145 321 ACALL LED_BL ;LED闪动
0199 119E 322 ACALL CONV ;加载现在时间数据
A51 MACRO ASSEMBLER SZ03 01/04/2007 21:53:58 PAGE 6
019B 22 323 RET
324
325 ;―――――――― 加载闹铃时间数据 ―――――――
326
327 ;转换 时时:分分 数据
019C 328 CONVA:
329 ;转换小时数据
019C E538 330 MOV A, HH
019E 75F00A 331 MOV B, #10
01A1 84 332 DIV AB
333 ;-----------
01A2 9000C1 334 MOV DPTR,#TABLE ;查表转换
01A5 93 335 MOVC A, @A+DPTR
01A6 F530 336 MOV BUF, A
337 ;-----------
01A8 E5F0 338 MOV A, B
01AA 93 339 MOVC A, @A+DPTR
01AB F531 340 MOV BUF+1, A
341 ;转换分钟数据
01AD E539 342 MOV A, MM
01AF 75F00A 343 MOV B, #10
01B2 84 344 DIV AB
345 ;-----------
01B3 9000C1 346 MOV DPTR,#TABLE ;查表转换
01B6 93 347 MOVC A, @A+DPTR
01B7 F532 348 MOV BUF+2, A
349 ;-----------
01B9 E5F0 350 MOV A, B
01BB 93 351 MOVC A, @A+DPTR
01BC F533 352 MOV BUF+3, A
01BE 22 353 RET
354
355 ;―――――――― 检查闹铃时间处理 ――――――――
356
357 ;检查是否启动闹铃
01BF 358 TIME_PRO:
01BF 200001 359 JB ALB, TI3
01C2 22 360 RET
361 ;――――――――――――――
362
363 ;检查闹铃时间是否到了
01C3 364 TI3:
01C3 E534 365 MOV A, HOUR
01C5 8538F0 366 MOV B,HH
01C8 B5F00A 367 CJNE A, B, BK ;检查闹铃小时时间
368 ;-----------
01CB E535 369 MOV A, MIN
01CD 8539F0 370 MOV B,MM
01D0 B5F002 371 CJNE A, B, BK ;检查闹铃分钟时间
372 ;-----------
01D3 31D6 373 ACALL TIME_OUT ;执行检查闹铃时间到了处理
01D5 374 BK:
01D5 22 375 RET
376
377 ;-------- 执行闹铃时间处理 ――――――――
378
01D6 379 TIME_OUT: ;所设置的闹铃数据到了
01D6 3145 380 X1: ACALL LED_BL ;LED闪动
01D8 3138 381 ACALL BZ ;压电喇叭发出哗的一声
382 ;按下K4键停止闹铃
01DA 20A7F9 383 JB K4, X1 ;等待是否按下K4键
01DD 30A7FD 384 JNB K4,$ ;若有按下键则等待按键放开来
01E0 3145 385 ACALL LED_BL ;LED闪动
01E2 C200 386 CLR ALB ;清除闹铃位
01E4 22 387 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -