📄 4.sdi
字号:
,,, ORG 0h
0000,01 30,, AJMP START
,,, ORG 30h
0030,75 90 BF,START,START: MOV P1,#10111111B
0033,75 A0 FF,SCANK,SCANK: MOV P2,#0FFH
0036,C2 A3,, CLR P2.3 ;P2.3清0,扫描第1行
0038,E5 A0,, MOV A,P2 ;读键盘至A
003A,54 07,, ANL A,#00000111B
003C,64 07,, XRL A,#00000111B;判断A的低三位是否为1
003E,60 21,, JZ SCANL2 ;如果低三位为1,则无按键,转第二行扫描 LCALL DELAY10MS;延时10ms(去抖延时)
0040,E5 A0,, MOV A,P2 ;读键盘至A
0042,54 07,, ANL A,#00000111B
0044,64 07,, XRL A,#00000111B;判断A的低三位是否为1
0046,60 19,, JZ SCANL2 ;如果低三位为1,则无按键,转第二行扫描
0048,E5 A0,, MOV A,P2 ;读键盘至A
004A,54 07,, ANL A,#00000111B;保留低三位的结果
004C,B4 06 05,, CJNE A,#00000110B,NOK0;不是K0键,转NOK0
004F,74 00,, MOV A,#0 ;是K0键将A赋值为0
0051,02 00 CC,, LJMP DISPLAY ;转显示子程序
0054,B4 05 05,NOK0,NOK0: CJNE A,#00000101B,NOK1;不是K1键,转NOK1
0057,74 01,, MOV A,#1 ;是K1键将A赋值为1
0059,02 00 CC,, LJMP DISPLAY ;转显示子程序
005C,74 02,NOK1,NOK1: MOV A,#2 ; 不是K0、K1,则一定是K2。将A赋值为2
005E,02 00 CC,, LJMP DISPLAY
0061,75 A0 FF,,SCANL2 :MOV P2,#0FFH
0064,C2 A4,, CLR P2.4 ;P2.4清0,扫描第2行
0066,E5 A0,, MOV A,P2 ;读键盘至A
0068,54 07,, ANL A,#00000111B
006A,64 07,, XRL A,#00000111B;判断A的低三位是否为1
006C,60 21,, JZ SCANL3 ;如果低三位为1,则无按键,转第三行扫描 LCALL DELAY10MS;延时10ms(去抖延时)
006E,E5 A0,, MOV A,P2 ;读键盘至A
0070,54 07,, ANL A,#00000111B
0072,64 07,, XRL A,#00000111B;判断A的低三位是否为1
0074,60 19,, JZ SCANL3 ;如果低三位为1,则无按键,转第三行扫描
0076,E5 A0,, MOV A,P2 ;读键盘至A
0078,54 07,, ANL A,#00000111B;保留低三位的结果
007A,B4 06 05,, CJNE A,#00000110B,NOK3;不是K3键,转NOK3
007D,74 03,, MOV A,#3 ;是K3键将A赋值为3
007F,02 00 CC,, LJMP DISPLAY ;转显示子程序
0082,B4 05 05,NOK3,NOK3: CJNE A,#00000101B,NOK4;不是K4键,转NOK4
0085,74 04,, MOV A,#4 ;是K4键将A赋值为4
0087,02 00 CC,, LJMP DISPLAY ;转显示子程序
008A,74 05,NOK4,NOK4: MOV A,#5 ; 不是K3、K4,则一定是K5。将A赋值为5
008C,02 00 CC,, LJMP DISPLAY
008F,75 A0 FF,,SCANL3 : MOV P2,#0FFH
0092,C2 A5,, CLR P2.5 ;P2.5清0,扫描第3行
0094,E5 A0,, MOV A,P2 ;读键盘至A
0096,54 07,, ANL A,#00000111B
0098,64 07,, XRL A,#00000111B;判断A的低三位是否为1
009A,60 24,, JZ SCANLOOP;如果低三位为1,则无按键,转SCANLOOP
009C,12 00 C3,, LCALL DELAY10MS;延时10ms(去抖延时)
009F,E5 A0,, MOV A,P2 ;读键盘至A
00A1,54 07,, ANL A,#00000111B
00A3,64 07,, XRL A,#00000111B;判断A的低三位是否为1
00A5,60 19,, JZ SCANLOOP;如果低三位为1,则无按键,转SCANLOOP
00A7,E5 A0,, MOV A,P2 ;读键盘至A
00A9,54 07,, ANL A,#00000111B;保留低三位的结果
00AB,B4 06 05,, CJNE A,#00000110B,NOK6;不是K6键,转NOK6
00AE,74 06,, MOV A,#6 ;是K6键将A赋值为6
00B0,02 00 CC,, LJMP DISPLAY ;转显示子程序
00B3,B4 05 05,NOK6,NOK6: CJNE A,#00000101B,NOK7;不是K7键,转NOK7
00B6,74 07,, MOV A,#7 ;是K7键将A赋值为7
00B8,02 00 CC,, LJMP DISPLAY ;转显示子程序
00BB,74 08,NOK7,NOK7: MOV A,#8 ; 不是K6、K7,则一定是K8。将A赋值为8
00BD,02 00 CC,, LJMP DISPLAY
00C0,,SCANLOOP,SCANLOOP:
00C0,02 00 33,, LJMP SCANK
00C3,,DELAY10MS,DELAY10MS:
00C3,7E 0A,, MOV R6,#10
00C5,7F FA,D1,D1: MOV R7,#250
00C7,DF FE,D2,D2: DJNZ R7,D2
00C9,DE FA,, DJNZ R6,D1
00CB,22,, RET
00CC,,DISPLAY,DISPLAY:
00CC,90 00 D5,, MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
00CF,93,, MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
00D0,F5 90,, MOV P1,A ;送到P1口数码管显示
00D2,02 00 33,, LJMP SCANK ;跳到SCANK,重新开始扫描
00D5,C0 F9 A4 B0,TABLE,TABLE: DB 0C0H,0F9H,0A4H,0B0H
00D9,99 92 82 F8,, DB 99H,92H,82H,0F8H,80H
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -