📄 a.sdi
字号:
,,,DBUF EQU 30H
,,,TEMP EQU 40H
,,, ORG 00H
0000,74 10,, MOV A,#16
0002,11 54,MAIN,MAIN: ACALL DISP
0004,11 08,, ACALL KEY1
0006,01 02,, AJMP MAIN
0008,75 90 F0,KEY1,KEY1: MOV P1,#0F0H ;读P1口前先写1
000B,E5 90,, MOV A,P1 ;读取键状态
000D,B4 F0 02,, CJNE A,#0F0H,K11 ;判断是否有键按下
0010,01 08,K10,K10: AJMP KEY1
0012,11 81,K11,K11: ACALL DELAY
0014,75 90 F0,, MOV P1,#0F0H
0017,E5 90,, MOV A,P1
0019,B5 F0 02,, CJNE A,0F0H,K12 ;消除按键抖动
001C,80 F2,, SJMP K10
001E,F5 F0,K12,K12: MOV B,A ;存列值
0020,75 90 0F,, MOV P1,#0FH
0023,E5 90,, MOV A,P1 ;读行值
0025,55 F0,, ANL A,B
0027,F5 F0,, MOV B,A ;存键码
0029,79 10,, MOV R1,#10H
002B,7A 00,, MOV R2,#0
002D,90 00 44,, MOV DPTR,#K1TAB ;键码表首地址
0030,EA,K14,K14: MOV A,R2
0031,93,, MOVC A,@A+DPTR
0032,B5 F0 0A,, CJNE A,B,K16 ;比较,计算键值
0035,75 90 0F,, MOV P1,#0FH
0038,E5 90,K15,K15: MOV A,P1
003A,B4 0F FB,, CJNE A,#0FH,K15 ;等待按键释放
003D,EA,, MOV A,R2
003E,22,, RET
003F,0A,K16,K16: INC R2
0040,D9 EE,, DJNZ R1,K14
0042,01 10,, AJMP K10
0044,81 41 21 11,K1TAB,K1TAB: DB 81H,41H,21H,11H ;键码表
0048,82 42 22 12,, DB 82H,42H,22H,12H
004C,84 44 24 14,, DB 84H,44H,24H,14H
0050,88 48 28 18,, DB 88H,48H,28H,18H
0054,F5 30,DISP,DISP: MOV DBUF,A ;键值存入缓存
0056,78 30,, MOV R0,#DBUF
0058,79 40,, MOV R1,#TEMP
005A,90 00 6F,DP10,DP10: MOV DPTR,#SEGTAB
005D,E6,, MOV A,@R0
005E,93,, MOVC A,@A+DPTR ;根据键值查表取段码
005F,F7,, MOV @R1,A ;暂存段码
0060,78 40,, MOV R0,#TEMP
0062,7A 08,DP12,DP12: MOV R2,#8 ;设置移位次数
0064,E6,, MOV A,@R0
0065,33,DP13,DP13: RLC A ;段码移位输出
0066,92 B0,, MOV P3.0,C
0068,C2 B1,, CLR P3.1
006A,D2 B1,, SETB P3.1 ;输出移位脉冲
006C,DA F7,, DJNZ R2,DP13
006E,22,, RET
006F,3F 06 5B 4F,SEGTAB,SEGTAB: DB 3FH,06H,5BH,4FH,66H,6DH
0075,7D 07 7F 6F,, DB 7DH,07H,7FH,6FH,77H,7CH
007B,58 5E 79 71,, DB 58H,5EH,79H,71H,00H,40H
0081,7C 01,DELAY,DELAY: MOV R4,#01H
0083,7D 88,AA1,AA1: MOV R5,#088H
0085,00,AA,AA: NOP
0086,DD FD,, DJNZ R5,AA
0088,DC F9,, DJNZ R4,AA1
008A,22,, RET
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -