📄 signal.lst
字号:
016C 2430 188 ADD A,#30H
A51 MACRO ASSEMBLER SIGNAL 09/24/2007 11:34:46 PAGE 4
016E 1202AC 189 LCALL SEND_D
0171 0535 190 INC COUNT1
0173 0538 191 INC AD4
0175 80DB 192 SJMP DATA3
0177 740C 193 DATA2: MOV A,#0CH ;关光标
0179 1202BC 194 LCALL SEND_I
017C 22 195 RET
196 ;************************10进制到16进制转换程序****************************
017D 197 ZHUANHUAN:
017D A838 198 MOV R0,AD4
017F 753D00 199 MOV M0,#0
0182 753C00 200 MOV M1,#0
0185 753B00 201 MOV M2,#0
0188 753A00 202 MOV M3,#0
018B 1536 203 DEC COUNT2
018D 3198 204 LOOP: ACALL XJ
018F 31B0 205 ACALL MUL_41
0191 08 206 INC R0
0192 D536F8 207 DJNZ COUNT2,LOOP
0195 3198 208 ACALL XJ
0197 22 209 RET
210
0198 E53D 211 XJ: MOV A,M0
019A 26 212 ADD A,@R0
019B F53D 213 MOV M0,A
019D E53C 214 MOV A,M1
019F 3400 215 ADDC A,#0
01A1 F53C 216 MOV M1,A
01A3 E53B 217 MOV A,M2
01A5 3400 218 ADDC A,#0
01A7 F53B 219 MOV M2,A
01A9 E53A 220 MOV A,M3
01AB 3400 221 ADDC A,#0
01AD F53A 222 MOV M3,A
01AF 22 223 RET
224
01B0 C3 225 MUL_41: CLR C
01B1 E53D 226 MOV A,M0
01B3 75F00A 227 MOV B,#10
01B6 A4 228 MUL AB
01B7 F53D 229 MOV M0,A
01B9 85F04E 230 MOV Z1,B
01BC E53C 231 MOV A,M1
01BE 75F00A 232 MOV B,#10
01C1 A4 233 MUL AB
01C2 354E 234 ADDC A,Z1
01C4 F53C 235 MOV M1,A
01C6 85F03F 236 MOV Z2,B
01C9 E53B 237 MOV A,M2
01CB 75F00A 238 MOV B,#10
01CE A4 239 MUL AB
01CF 353F 240 ADDC A,Z2
01D1 F53B 241 MOV M2,A
01D3 85F040 242 MOV Z3,B
01D6 E53A 243 MOV A,M3
01D8 75F00A 244 MOV B,#10
01DB A4 245 MUL AB
01DC 3540 246 ADDC A,Z3
01DE F53A 247 MOV M3,A
01E0 22 248 RET
249 ;***************************数据存储程序********************************
01E1 A837 250 CHUNSHU:MOV R0,AD2 ;将转换后的16进制数字放到并口发送缓冲区
01E3 A63D 251 MOV @R0,M0 ;注意缓冲区在80H后的要间接寻址
01E5 08 252 INC R0
01E6 A63C 253 MOV @R0,M1
01E8 08 254 INC R0
A51 MACRO ASSEMBLER SIGNAL 09/24/2007 11:34:46 PAGE 5
01E9 A63B 255 MOV @R0,M2
01EB 08 256 INC R0
01EC A63A 257 MOV @R0,M3
01EE 22 258 RET
259 ;*************************并行数据传输程序******************************
01EF C0E0 260 TRAN: PUSH ACC
01F1 C0D0 261 PUSH PSW
01F3 D2D3 262 SETB RS0
01F5 D2D4 263 SETB RS1 ;用寄存器组3
01F7 D2B6 264 SETB EN
01F9 A837 265 MOV R0,AD2
01FB 7F04 266 MOV R7,#4 ;发送6个字节的数据
01FD C2B7 267 TRAN1:CLR TXD
01FF D2B7 268 SETB TXD
0201 86A0 269 MOV P2,@R0
0203 08 270 INC R0
0204 DFF7 271 DJNZ R7,TRAN1
0206 C2B6 272 CLR EN ;6个字节发送完毕,发一个高电平脉冲
0208 D0E0 273 POP ACC
020A D0D0 274 POP PSW
020C 22 275 RET
276 ;============================================================================
277 ;**************************键盘扫描子程序************************************
020D C0E0 278 KEY: PUSH ACC
020F C0D0 279 PUSH PSW
0211 7590F0 280 KEY1: MOV P1,#0F0H ;行线为P0-P3,列线为P4-P7
0214 E590 281 MOV A,P1
0216 440F 282 ORL A,#0FH
0218 F4 283 CPL A
0219 7002 284 JNZ IN
021B 80F4 285 SJMP KEY1
286
021D 5151 287 IN: ACALL DELAY
021F 753004 288 MOV KEYH,#04H
0222 75337F 289 MOV KEYN,#07FH ;做指针,指示待扫描行
0225 753200 290 MOV KEYZ,#0
0228 E533 291 SCAN: MOV A,KEYN
022A 23 292 RL A
022B F533 293 MOV KEYN,A
022D F590 294 MOV P1,A ;逐行扫描,被扫描行送低
022F E590 295 MOV A,P1 ;读列线电平值
0231 C4 296 SWAP A
0232 753104 297 MOV KEYL,#04H
0235 13 298 KEY2: RRC A
0236 500A 299 JNC FIND ;C位不为1转
0238 0532 300 INC KEYZ
023A D531F8 301 DJNZ KEYL,KEY2
023D D530E8 302 DJNZ KEYH,SCAN
0240 800A 303 SJMP KEY3
304
0242 7590F0 305 FIND: MOV P1,#0F0H
0245 E590 306 LOOSEN:MOV A,P1
0247 440F 307 ORL A,#0FH
0249 F4 308 CPL A
024A 70F9 309 JNZ LOOSEN
310
024C D0D0 311 KEY3: POP PSW
024E D0E0 312 POP ACC
0250 22 313 RET
314 ;**************************键盘20MS延时**************************************
0251 7E15 315 DELAY:MOV R6,#15H
0253 7F18 316 DL2: MOV R7,#18H
0255 00 317 DL1: NOP
0256 00 318 NOP
0257 DFFC 319 DJNZ R7,DL1
0259 DEF8 320 DJNZ R6,DL2
A51 MACRO ASSEMBLER SIGNAL 09/24/2007 11:34:46 PAGE 6
025B 22 321 RET
322 ;============================================================================
323 ;************************显示欢迎界面****************************************
025C 324 WEL_XS:
025C 9002DB 325 MOV DPTR,#WEL_A
025F 753410 326 MOV COUNT,#10H ;地址计数器设为16。
0262 7480 327 MOV A,#80H ;第一行起始地址
0264 1202BC 328 LCALL SEND_I
0267 120279 329 LCALL QUWRD
026A 9002EB 330 MOV DPTR,#WEL_B
026D 753410 331 MOV COUNT,#10H ;地址计数器设为16。
0270 74C0 332 MOV A,#0C0H ;第二行起始地址
0272 1202BC 333 LCALL SEND_I
0275 120279 334 LCALL QUWRD
0278 22 335 RET
336 ;****************************取字符显示**************************************
0279 E4 337 QUWRD: CLR A
027A 93 338 MOVC A,@A+DPTR ;查表取数据
027B 1202AC 339 LCALL SEND_D ;送显示
027E A3 340 INC DPTR
027F D534F7 341 DJNZ COUNT,QUWRD
0282 22 342 RET
343 ;*************************取要显示的数据*************************************
0283 A838 344 QUSHU: MOV R0,AD4
0285 E6 345 MOV A,@R0
0286 2430 346 ADD A,#30H
0288 1202AC 347 LCALL SEND_D
028B 0538 348 INC AD4
028D D535F3 349 DJNZ COUNT1,QUSHU
0290 22 350 RET
351 ;*************************LCM初始化*******************************************
0291 352 INIT:
0291 7438 353 MOV A,#38H ;设置8 位格式,2行,5*7*
0293 1202BC 354 LCALL SEND_I
0296 740C 355 MOV A,#0CH ;开显示,关光标,不闪烁
0298 1202BC 356 LCALL SEND_I
029B 7406 357 MOV A,#06H ;设定输入方式,增量不移位
029D 1202BC 358 LCALL SEND_I
02A0 7401 359 MOV A,#01H ;清除显示
02A2 1202BC 360 LCALL SEND_I
02A5 22 361 RET
362 ;*************************清屏***********************************************
02A6 363 CLEAR_P:
02A6 7401 364 MOV A,#01H ;清屏
02A8 1202BC 365 LCALL SEND_I
02AB 22 366 RET
367 ;**********************写数据子程序*******************************************
02AC 368 SEND_D:
02AC 1202CC 369 LCALL CHK_BUSY ;查是否忙
02AF D2A5 370 SETB RS ;LCM有效
02B1 C2A6 371 CLR RW ;写模式
02B3 F580 372 MOV P0,A
02B5 D2A7 373 SETB E
02B7 00 374 NOP
02B8 00 375 NOP
02B9 C2A7 376 CLR E
02BB 22 377 RET
378 ;**************************向LCM送指令****************************************
02BC 379 SEND_I:
02BC 1202CC 380 LCALL CHK_BUSY
02BF C2A5 381 CLR RS
02C1 C2A6 382 CLR RW
02C3 F580 383 MOV P0,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -