📄 keynum-ts12864a-3.lst
字号:
0106 C2A2 177 CLR EN
0108 22 178 RET
179 ;=============================================
180 ;写数据使能子程序
181 ;RS=H,RW=L,D0-D7=数据,E=高脉冲
182 ;=============================================
0109 183 WDATA:
0109 F580 184 MOV P0,A
010B D2A0 185 SETB RS
010D C2A1 186 CLR RW
010F D2A2 187 SETB EN
0111 3116 188 CALL DELAY0
0113 C2A2 189 CLR EN
0115 22 190 RET
191
0116 7FFA 192 DELAY0: MOV R7,#250 ;延时500微秒
0118 DFFE 193 DJNZ R7,$
011A 22 194 RET
195 ;===============================================
196 ;在 LCM 第三行、第四行显示字符
197 ;A=ASC DATA, B=LINE X POS
198 ;===============================================
011B 199 LCDP3: ;在LCD的第三行显示字符
011B C0E0 200 PUSH ACC ;
011D E5F0 201 MOV A,B ;设置显示地址
011F 2488 202 ADD A,#088H ;设置LCD的第三行地址
0121 11FC 203 CALL WCOM ;写入命令
0123 D0E0 204 POP ACC ;由堆栈取出A
0125 3109 205 CALL WDATA ;写入数据
0127 22 206 RET
207
208 ;LCDP4: ;在LCD的第四行显示字符
0128 C0E0 209 PUSH ACC ;
012A E5F0 210 MOV A,B ;设置显示地址
012C 2498 211 ADD A,#098H ;设置LCD的第四行地址
012E 11FC 212 CALL WCOM ;写入命令
0130 D0E0 213 POP ACC ;由堆栈取出A
0132 3109 214 CALL WDATA ;写入数据
0134 22 215 RET
216 ;========================================================
217 ;矩阵键盘键值读取子程序
218 ;(A)=键值
219 ;========================================================
0135 7590F0 220 KEY_IN: MOV P1,#0F0H ;置列线为0,行线为1
0138 E590 221 MOV A,P1
013A 54F0 222 ANL A,#0F0H
013C F5F0 223 MOV B,A
013E 75900F 224 MOV P1,#0FH ;置列线为1,行线为0
0141 E590 225 MOV A,P1
0143 540F 226 ANL A,#0FH
0145 45F0 227 ORL A,B ;高四位与低四位重新组合
0147 B4FF01 228 CJNE A,#0FFH,KEY_IN1 ;0FFH为末按键
014A 22 229 RET
014B F5F0 230 KEY_IN1: MOV B,A
014D 9001A3 231 MOV DPTR,#KEYTABLE
0150 7BFF 232 MOV R3,#0FFH
0152 0B 233 KEY_IN2: INC R3
0153 EB 234 MOV A,R3
0154 93 235 MOVC A,@A+DPTR
0155 B5F006 236 CJNE A,B,KEY_IN3
0158 EB 237 MOV A,R3 ;找到,取顺序码
0159 7D08 238 MOV R5,#08H ;延时
015B 318F 239 CALL DELAY
015D 22 240 RET
015E B4FFF1 241 KEY_IN3: CJNE A,#0FFH,KEY_IN2 ;末完,继续查
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 5
0161 22 242 RET ;0FFH为结束码
243
244
245 ;===============================================
246 ;编码转换为 ASCII 码并显示
247 ;===============================================
0162 248 KEY_CONV:
0162 F522 249 MOV 22H,A
0164 752605 250 MOV X,#5 ;设置显示起始位置
0167 540F 251 ANL A,#0FH ;取出低四位二进制数
0169 C0E0 252 PUSH ACC
016B C3 253 CLR C
016C 940A 254 SUBB A,#0AH ;减10
016E D0E0 255 POP ACC
0170 4002 256 JC ASCII1 ;该数小于10,转ASCII0
0172 2407 257 ADD A,#07H ;大于10的数加上37H
0174 2430 258 ASCII1: ADD A,#30H ;小于10的数加上30H
0176 8526F0 259 MOV B,X
0179 311B 260 CALL LCDP3
017B 22 261 RET
262 ;===================================================
263 ;蜂鸣器响一声子程序
264 ;===================================================
017C 265 BEEP_BL:
017C 7E64 266 MOV R6,#100
017E 3189 267 BL1: CALL DEX1
0180 B2B7 268 CPL BEEP
0182 DEFA 269 DJNZ R6,BL1
0184 7D19 270 MOV R5,#25
0186 318F 271 CALL DELAY
0188 22 272 RET
0189 7FB4 273 DEX1: MOV R7,#180
018B 00 274 DEX2: NOP
018C DFFD 275 DJNZ R7,DEX2
018E 22 276 RET
018F 277 DELAY: ;延时R5×10MS
018F 7E32 278 MOV R6,#50
0191 7F64 279 D1: MOV R7,#100
0193 DFFE 280 DJNZ R7,$
0195 DEFA 281 DJNZ R6,D1
0197 DDF6 282 DJNZ R5,DELAY
0199 22 283 RET
284 ;======================================================
285 ;延时5MS
286 ;======================================================
019A 287 DELAY1:
019A 7E19 288 MOV R6,#25
019C 7F64 289 DL2: MOV R7,#100
019E DFFE 290 DJNZ R7,$
01A0 DEFA 291 DJNZ R6,DL2
01A2 22 292 RET
293 ;======================================================
294 ;键值顺序码
295 ;======================================================
01A3 296 KEYTABLE:
297
01A3 EEEDEBE7 298 DB 0EEH,0EDH,0EBH,0E7H,0DEH ;0,1,2,3,4, 顺序码
01A7 DE
01A8 DDDBD7BE 299 DB 0DDH,0DBH,0D7H,0BEH,0BDH ;5,6,7,8,9,
01AC BD
01AD BBB77E7D 300 DB 0BBH,0B7H,07EH,07DH,07BH ;A,B,C,D,E,
01B1 7B
01B2 77FF 301 DB 077H,0FFH ;F 0FF为结束码
302 ;======================================================
303 END
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
ASCII1 . . . . . . C ADDR 0174H A
B. . . . . . . . . D ADDR 00F0H A
BEEP . . . . . . . B ADDR 00B0H.7 A
BEEP_BL. . . . . . C ADDR 017CH A
BL1. . . . . . . . C ADDR 017EH A
CL1. . . . . . . . C ADDR 0092H A
CLR_LINE . . . . . C ADDR 0090H A
D1 . . . . . . . . C ADDR 0191H A
DELAY. . . . . . . C ADDR 018FH A
DELAY0 . . . . . . C ADDR 0116H A
DELAY1 . . . . . . C ADDR 019AH A
DEX1 . . . . . . . C ADDR 0189H A
DEX2 . . . . . . . C ADDR 018BH A
DL2. . . . . . . . C ADDR 019CH A
EN . . . . . . . . B ADDR 00A0H.2 A
FILL . . . . . . . C ADDR 0084H A
KEYTABLE . . . . . C ADDR 01A3H A
KEY_CONV . . . . . C ADDR 0162H A
KEY_IN . . . . . . C ADDR 0135H A
KEY_IN1. . . . . . C ADDR 014BH A
KEY_IN2. . . . . . C ADDR 0152H A
KEY_IN3. . . . . . C ADDR 015EH A
LC1. . . . . . . . C ADDR 008AH A
LCDP3. . . . . . . C ADDR 011BH A
LCD_SHOW . . . . . C ADDR 004AH A
LINE1. . . . . . . C ADDR 004DH A
LINE2. . . . . . . C ADDR 0059H A
LINE3. . . . . . . C ADDR 0068H A
LINE4. . . . . . . C ADDR 0077H A
LINE5. . . . . . . C ADDR 0089H A
LOOP0. . . . . . . C ADDR 0009H A
LOOP1. . . . . . . C ADDR 001DH A
LOOP2. . . . . . . C ADDR 0027H A
MAIN . . . . . . . C ADDR 0002H A
MENU1. . . . . . . C ADDR 0099H A
MENU1A . . . . . . C ADDR 00A1H A
MENU2. . . . . . . C ADDR 00B2H A
MENU2A . . . . . . C ADDR 00BAH A
MENU3. . . . . . . C ADDR 00CBH A
MENU3A . . . . . . C ADDR 00D3H A
MENU4. . . . . . . C ADDR 00E3H A
MENU4A . . . . . . C ADDR 00EBH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PSB. . . . . . . . B ADDR 00A0H.3 A
RELAY. . . . . . . B ADDR 0090H.3 A
RS . . . . . . . . B ADDR 00A0H.0 A
RST. . . . . . . . B ADDR 00A0H.5 A
RW . . . . . . . . B ADDR 00A0H.1 A
SET_LCD. . . . . . C ADDR 002FH A
SP . . . . . . . . D ADDR 0081H A
WCOM . . . . . . . C ADDR 00FCH A
WDATA. . . . . . . C ADDR 0109H A
X. . . . . . . . . N NUMB 0026H A
REGISTER BANK(S) USED: 0
A51 MACRO ASSEMBLER KEYNUM_TS12864A_3 12/20/2006 22:45:45 PAGE 7
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -