📄 4.asm
字号:
ORG 0h
AJMP START
ORG 30h
START: MOV P1,#10111111B
SCANK: MOV P2,#0FFH
CLR P2.3 ;P2.3清0,扫描第1行
MOV A,P2 ;读键盘至A
ANL A,#00000111B
XRL A,#00000111B;判断A的低三位是否为1
JZ SCANL2 ;如果低三位为1,则无按键,转第二行扫描 LCALL DELAY10MS;延时10ms(去抖延时)
MOV A,P2 ;读键盘至A
ANL A,#00000111B
XRL A,#00000111B;判断A的低三位是否为1
JZ SCANL2 ;如果低三位为1,则无按键,转第二行扫描
MOV A,P2 ;读键盘至A
ANL A,#00000111B;保留低三位的结果
CJNE A,#00000110B,NOK0;不是K0键,转NOK0
MOV A,#0 ;是K0键将A赋值为0
LJMP DISPLAY ;转显示子程序
NOK0: CJNE A,#00000101B,NOK1;不是K1键,转NOK1
MOV A,#1 ;是K1键将A赋值为1
LJMP DISPLAY ;转显示子程序
NOK1: MOV A,#2 ; 不是K0、K1,则一定是K2。将A赋值为2
LJMP DISPLAY
SCANL2 :MOV P2,#0FFH
CLR P2.4 ;P2.4清0,扫描第2行
MOV A,P2 ;读键盘至A
ANL A,#00000111B
XRL A,#00000111B;判断A的低三位是否为1
JZ SCANL3 ;如果低三位为1,则无按键,转第三行扫描 LCALL DELAY10MS;延时10ms(去抖延时)
MOV A,P2 ;读键盘至A
ANL A,#00000111B
XRL A,#00000111B;判断A的低三位是否为1
JZ SCANL3 ;如果低三位为1,则无按键,转第三行扫描
MOV A,P2 ;读键盘至A
ANL A,#00000111B;保留低三位的结果
CJNE A,#00000110B,NOK3;不是K3键,转NOK3
MOV A,#3 ;是K3键将A赋值为3
LJMP DISPLAY ;转显示子程序
NOK3: CJNE A,#00000101B,NOK4;不是K4键,转NOK4
MOV A,#4 ;是K4键将A赋值为4
LJMP DISPLAY ;转显示子程序
NOK4: MOV A,#5 ; 不是K3、K4,则一定是K5。将A赋值为5
LJMP DISPLAY
SCANL3 : MOV P2,#0FFH
CLR P2.5 ;P2.5清0,扫描第3行
MOV A,P2 ;读键盘至A
ANL A,#00000111B
XRL A,#00000111B;判断A的低三位是否为1
JZ SCANLOOP;如果低三位为1,则无按键,转SCANLOOP
LCALL DELAY10MS;延时10ms(去抖延时)
MOV A,P2 ;读键盘至A
ANL A,#00000111B
XRL A,#00000111B;判断A的低三位是否为1
JZ SCANLOOP;如果低三位为1,则无按键,转SCANLOOP
MOV A,P2 ;读键盘至A
ANL A,#00000111B;保留低三位的结果
CJNE A,#00000110B,NOK6;不是K6键,转NOK6
MOV A,#6 ;是K6键将A赋值为6
LJMP DISPLAY ;转显示子程序
NOK6: CJNE A,#00000101B,NOK7;不是K7键,转NOK7
MOV A,#7 ;是K7键将A赋值为7
LJMP DISPLAY ;转显示子程序
NOK7: MOV A,#8 ; 不是K6、K7,则一定是K8。将A赋值为8
LJMP DISPLAY
SCANLOOP:
LJMP SCANK
DELAY10MS:
MOV R6,#10
D1: MOV R7,#250
D2: DJNZ R7,D2
DJNZ R6,D1
RET
DISPLAY:
MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P1,A ;送到P1口数码管显示
LJMP SCANK ;跳到SCANK,重新开始扫描
TABLE: DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H,80H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -