📄 key.sdi
字号:
,,,KEYBUF EQU 30H
,,, ORG 0
0000,02 00 30,, LJMP START
,,, ORG 3
0003,02 00 6F,, LJMP KEYSCAN
,,, ORG 30H
0030,75 81 60,START,START: MOV SP,#60H
0033,D2 88,, SETB IT0
0035,D2 A8,, SETB EX0
0037,75 90 0F,, MOV P1,#0FH
003A,D2 AF,, SETB EA
003C,75 30 47,, MOV KEYBUF,#47H ;将“G”送显示缓冲区,以便熄灭显示器
003F,12 00 44,LOOP,LOOP: LCALL DISP
0042,80 FB,, SJMP LOOP
,,,;显示程序
,,,;将KEYBUF单元的ASCII码送数码管显示
,,,;可以显示的ASCII码数据0-9,A-F。若ASCII码为“G”(47H)则显示熄灭
0044,E5 30,DISP,DISP: MOV A,KEYBUF
0046,C3,, CLR C
0047,94 3A,, SUBB A,#3AH
0049,40 06,, JC DISP1
004B,E5 30,, MOV A,KEYBUF
004D,94 37,, SUBB A,#37H
004F,80 04,, SJMP DISP2
0051,E5 30,DISP1,DISP1: MOV A,KEYBUF
0053,54 0F,, ANL A,#0FH
0055,90 00 5E,DISP2,DISP2: MOV DPTR,#DISP_TAB
0058,93,, MOVC A,@A+DPTR
0059,54 7F,, ANL A,#7FH
005B,F5 80,, MOV P0,A
005D,22,, RET
005E,C0 F9 A4 B0,DISP_TAB,DISP_TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
0066,80 90 88 83,, DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
,,,;键盘扫描程序
,,,;键码存在KEYBUF单元,格式为ASCII码
006F,C0 D0,KEYSCAN,KEYSCAN:PUSH PSW
0071,C0 E0,, PUSH ACC
0073,C0 83,, PUSH DPH
0075,C0 82,, PUSH DPL
0077,C2 D4,, CLR RS1
0079,D2 D3,, SETB RS0 ;选择1区工作寄存器
007B,12 01 00,, LCALL DELAY
007E,E5 90,, MOV A,P1
0080,F4,, CPL A
0081,54 0F,, ANL A,#0FH
0083,60 4B,, JZ FINISH
0085,90 00 DC,, MOV DPTR,#TAB
0088,75 90 EF,, MOV P1,#0EFH ;扫描第一行
008B,75 90 EF,, MOV P1,#0EFH
008E,E5 90,, MOV A,P1
0090,F4,, CPL A
0091,54 0F,, ANL A,#0FH
0093,60 02,, JZ K1 ;第一行没键按下,则扫描第二行
0095,80 31,, SJMP KEND
0097,75 90 DF,K1,K1: MOV P1,#0DFH ;扫描第二行
009A,75 90 DF,, MOV P1,#0DFH
009D,E5 90,, MOV A,P1
009F,F4,, CPL A
00A0,54 0F,, ANL A,#0FH
00A2,60 04,, JZ K2 ;第二行没键按下,则扫描第三行
00A4,24 09,, ADD A,#9
00A6,80 20,, SJMP KEND
00A8,75 90 BF,K2,K2: MOV P1,#0BFH ;扫描第三行
00AB,75 90 BF,, MOV P1,#0BFH
00AE,E5 90,, MOV A,P1
00B0,F4,, CPL A
00B1,54 0F,, ANL A,#0FH
00B3,60 04,, JZ K3
00B5,24 12,, ADD A,#18
00B7,80 0F,, SJMP KEND
00B9,75 90 7F,K3,K3: MOV P1,#7FH
00BC,75 90 7F,, MOV P1,#7FH
00BF,E5 90,, MOV A,P1
00C1,F4,, CPL A
00C2,54 0F,, ANL A,#0FH
00C4,60 07,, JZ K4
00C6,24 1B,, ADD A,#27
00C8,93,KEND,KEND: MOVC A,@A+DPTR
00C9,F5 30,, MOV KEYBUF,A
00CB,80 03,, SJMP FINISH
00CD,75 30 47,K4,K4: MOV KEYBUF,#47H ;'G'送键盘缓冲区,以便将显示器熄灭
00D0,75 90 0F,FINISH,FINISH: MOV P1,#0FH ;为下一次扫描作准备
00D3,D0 82,, POP DPL
00D5,D0 83,, POP DPH
00D7,D0 E0,, POP ACC
00D9,D0 D0,, POP PSW
00DB,32,, RETI
00DC,00 30 31 00,TAB,TAB: DB 00H,30H,31H,00H,32H,00H,00H,00H,33H
00E5,00 34 35 00,, DB 00H,34H,35H,00H,36H,00H,00H,00H,37H
00EE,00 38 39 00,, DB 00H,38H,39H,00H,41H,00H,00H,00H,42H
00F7,00 43 44 00,, DB 00H,43H,44H,00H,45H,00H,00H,00H,46H
0100,7E 14,DELAY,DELAY: MOV R6,#20
0102,7F FA,L1,L1: MOV R7,#250
0104,00,L2,L2: NOP
0105,00,, NOP
0106,DF FC,, DJNZ R7,L2
0108,DE F8,, DJNZ R6,L1
010A,22,, RET
000E,,, END
,,,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -