📄 ir-1602lcd.lst
字号:
00FA DCFC 176 DJNZ R4,I20
00FC 20B2F2 177 JB IRIN,I1 ;确认IR信号出现
00FF 20B204 178 I21: JB IRIN,I3 ;等 IR 变为高电平
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 4
0102 3191 179 CALL DEL
0104 80F9 180 JMP I21
0106 7B00 181 I3: MOV R3,#0 ;8位数清为0
0108 30B204 182 LL: JNB IRIN,I4 ;等 IR 变为低电平
010B 3191 183 CALL DEL
010D 80F9 184 JMP LL
010F 20B204 185 I4: JB IRIN,I5 ;等 IR 变为高电平
0112 3191 186 CALL DEL
0114 80F9 187 JMP I4
0116 7A00 188 I5: MOV R2,#0 ;0.14ms 计数
0118 3191 189 L1: CALL DEL
011A 20B213 190 JB IRIN, N1 ;等 IR 变为高电平
191 ;IR=0,检查R2中的计数值
011D 7408 192 MOV A,#8
011F C3 193 CLR C
0120 9A 194 SUBB A,R2 ;判断高低位
195 ;IF C=0 BIT=0
0121 E6 196 MOV A,@R0
0122 13 197 RRC A
0123 F6 198 MOV @R0,A ;处理完一位
0124 0B 199 INC R3
0125 BB08E0 200 CJNE R3,#8,LL ;需处理完8位
0128 7B00 201 MOV R3,#0
012A 08 202 INC R0
012B B824DA 203 CJNE R0,#24H,LL ;收集到4字节了
012E 8004 204 JMP OK
0130 0A 205 N1: INC R2
0131 BA1EE4 206 CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开
0134 22 207 OK: RET
208 ;--------------------------------------------------------------------
0135 209 IR_SHOW:
0135 E522 210 MOV A,22H
0137 F4 211 CPL A ;将22H取反后和23H比较
0138 B52304 212 CJNE A,23H,IR_SHOW1 ;如果不等表示接收数据发生错误,放弃。
013B 3140 213 CALL CONV
013D 3173 214 CALL BEEP_BL ;蜂鸣器鸣响表示解码成功
013F 22 215 IR_SHOW1: RET
216 ;--------------------------------------------------------------------
217 ;转换为 ASCII 码并显示
218 ;--------------------------------------------------------------------
0140 219 CONV:
0140 75260B 220 MOV X,#11 ;设置显示起始位置
0143 E522 221 MOV A,22H
0145 54F0 222 ANL A,#0F0H ;取出高四位二进制数
0147 C4 223 SWAP A ;高四位与低四位互换
0148 C0E0 224 PUSH ACC ;压入堆栈
014A C3 225 CLR C ;C=0
014B 940A 226 SUBB A,#0AH ;减10
014D D0E0 227 POP ACC ;弹出堆栈
014F 4002 228 JC ASCII0 ;该数小于10,转ASCII0
0151 2407 229 ADD A,#07H ;大于10的数加上37H
0153 2430 230 ASCII0: ADD A,#30H ;小于10的数加上30H
0155 8526F0 231 MOV B,X
0158 11E2 232 CALL LCDP2
233
015A E522 234 MOV A,22H
015C 540F 235 ANL A,#0FH ;取出低四位二进制数
015E C0E0 236 PUSH ACC
0160 C3 237 CLR C
0161 940A 238 SUBB A,#0AH ;减10
0163 D0E0 239 POP ACC
0165 4002 240 JC ASCII1 ;该数小于10,转ASCII0
0167 2407 241 ADD A,#07H ;大于10的数加上37H
0169 2430 242 ASCII1: ADD A,#30H ;小于10的数加上30H
016B 0526 243 INC X
016D 8526F0 244 MOV B,X
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 5
0170 11E2 245 CALL LCDP2
0172 22 246 RET
247 ;--------------------------------------------------------
248 ;蜂鸣器响一声子程序
249 ;--------------------------------------------------------
0173 250 BEEP_BL:
0173 7E64 251 MOV R6,#100
0175 3180 252 BL1: CALL DEX1
0177 B2B7 253 CPL BEEP
0179 DEFA 254 DJNZ R6,BL1
017B 7D19 255 MOV R5,#25
017D 3186 256 CALL DELAY
017F 22 257 RET
0180 7FB4 258 DEX1: MOV R7,#180
0182 00 259 DEX2: NOP
0183 DFFD 260 DJNZ R7,DEX2
0185 22 261 RET
0186 262 DELAY: ;延时R5×10MS
0186 7E32 263 MOV R6,#50
0188 7F64 264 D1: MOV R7,#100
018A DFFE 265 DJNZ R7,$
018C DEFA 266 DJNZ R6,D1
018E DDF6 267 DJNZ R5,DELAY
0190 22 268 RET
269 ;------------------------------------------------
270 ; DELAY R5*0.14MS
0191 271 DEL:
0191 7D01 272 MOV R5,#1 ;IR解码使用
0193 7E02 273 DEL0: MOV R6,#2
0195 7F20 274 DEL1: MOV R7,#32
0197 DFFE 275 DEL2: DJNZ R7,DEL2
0199 DEFA 276 DJNZ R6,DEL1
019B DDF6 277 DJNZ R5,DEL0
019D 22 278 RET
279
019E 280 DELAY1: ;延时5MS
019E 7E19 281 MOV R6,#25
01A0 7F64 282 DL2: MOV R7,#100
01A2 DFFE 283 DJNZ R7,$
01A4 DEFA 284 DJNZ R6,DL2
01A6 22 285 RET
286 ;-------------------------------------------------
287 END
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
ASCII0 . . . . . . C ADDR 0153H A
ASCII1 . . . . . . C ADDR 0169H A
B. . . . . . . . . D ADDR 00F0H A
BEEP . . . . . . . B ADDR 00B0H.7 A
BEEP_BL. . . . . . C ADDR 0173H A
BL1. . . . . . . . C ADDR 0175H A
CL1. . . . . . . . C ADDR 0081H A
CLR_LINE . . . . . C ADDR 007FH A
CONV . . . . . . . C ADDR 0140H A
D1 . . . . . . . . C ADDR 0188H A
DEL. . . . . . . . C ADDR 0191H A
DEL0 . . . . . . . C ADDR 0193H A
DEL1 . . . . . . . C ADDR 0195H A
DEL2 . . . . . . . C ADDR 0197H A
DELAY. . . . . . . C ADDR 0186H A
DELAY0 . . . . . . C ADDR 00DDH A
DELAY1 . . . . . . C ADDR 019EH A
DEX1 . . . . . . . C ADDR 0180H A
DEX2 . . . . . . . C ADDR 0182H A
DL2. . . . . . . . C ADDR 01A0H A
EN . . . . . . . . B ADDR 00A0H.2 A
FILL . . . . . . . C ADDR 0073H A
I1 . . . . . . . . C ADDR 00F1H A
I2 . . . . . . . . C ADDR 00F6H A
I20. . . . . . . . C ADDR 00F8H A
I21. . . . . . . . C ADDR 00FFH A
I3 . . . . . . . . C ADDR 0106H A
I4 . . . . . . . . C ADDR 010FH A
I5 . . . . . . . . C ADDR 0116H A
INFO1. . . . . . . C ADDR 00A1H A
INFO2. . . . . . . C ADDR 00B2H A
INIT_LCD . . . . . C ADDR 003BH A
IRCOM. . . . . . . N NUMB 0020H A
IRIN . . . . . . . B ADDR 00B0H.2 A
IR_IN. . . . . . . C ADDR 00EFH A
IR_SHOW. . . . . . C ADDR 0135H A
IR_SHOW1 . . . . . C ADDR 013FH A
L1 . . . . . . . . C ADDR 0118H A
LC1. . . . . . . . C ADDR 0079H A
LCDP2. . . . . . . C ADDR 00E2H A
LCD_SHOW . . . . . C ADDR 005AH A
LINE1. . . . . . . C ADDR 005DH A
LINE2. . . . . . . C ADDR 0069H A
LL . . . . . . . . C ADDR 0108H A
LOOP0. . . . . . . C ADDR 0009H A
LOOP1. . . . . . . C ADDR 0014H A
LOOP2. . . . . . . C ADDR 001FH A
LOOP3. . . . . . . C ADDR 0024H A
MAIN . . . . . . . C ADDR 0002H A
MENU1. . . . . . . C ADDR 0088H A
MENU2. . . . . . . C ADDR 0090H A
N1 . . . . . . . . C ADDR 0130H A
OK . . . . . . . . C ADDR 0134H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
RELAY. . . . . . . B ADDR 0090H.3 A
RS . . . . . . . . B ADDR 00A0H.0 A
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 7
RW . . . . . . . . B ADDR 00A0H.1 A
SET_LCD. . . . . . C ADDR 0026H A
SP . . . . . . . . D ADDR 0081H A
WCOM . . . . . . . C ADDR 00C3H A
WDATA. . . . . . . C ADDR 00D0H A
X. . . . . . . . . N NUMB 0026H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -