📄 6.asm
字号:
ORG 0H
LJMP START
ORG 30H
START: MOV P0,#0FFH
MOV P2,#0H
MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
DISAGAIN:
MOV R4,#4
MOV R1,#30H
MOV R2,#00010000B
DISLOOP:MOV P1,#0FFH
CLR P1.2 ;P1.2清0,扫描第1行
MOV A,P1 ;读键盘至A
ANL A,#00000011B
XRL A,#00000011B;判断A的低二位是否为1
JZ SCANL2 ;如果低二位为1,则无按键,转第二行扫描
LCALL DELAY10MS;延时10ms(去抖延时)
MOV A,P1 ;读键盘至A
ANL A,#00000011B
XRL A,#00000011B;判断A的低二位是否为1
JZ SCANL2 ;如果低二位为1,则无按键,转第二行扫描
MOV A,P1 ;读键盘至A
ANL A,#00000011B;保留低二位的结果
CJNE A,#00000010B,NOK0;不是K0键,转NOK0
MOV 30H,#2 ;是K0键将30H地址赋值为2
MOV 31H,#3 ;将31H地址赋值为3
MOV 32H,#2 ;是将32H地址赋值为2
MOV 33H,#3 ;将33H地址赋值为3
LJMP DISPLAY ;转显示子程序
NOK0: MOV 30H,#8 ;不是K0键,则一定是K1。将30H地址赋值为8
MOV 31H,#9 ;将31H地址赋值为9
MOV 32H,#8 ;将32H地址赋值为2
MOV 33H,#9 ;将33H地址赋值为3
LJMP DISPLAY ;转显示子程序
SCANL2 :MOV P1,#0FFH
CLR P1.3 ;P1.3清0,扫描第2行
MOV A,P1 ;读键盘至A
ANL A,#00000011B
XRL A,#00000011B;判断A的低二位是否为1
JZ DISPLAY ;如果低二位为1,则无按键,转DISPLAY
LCALL DELAY10MS;延时10ms(去抖延时)
MOV A,P1 ;读键盘至A
ANL A,#00000011B
XRL A,#00000011B;判断A的低二位是否为1
JZ DISPLAY ;如果低二位为1,则无按键,转DISPLAY
MOV A,P1 ;读键盘至A
ANL A,#00000011B;保留低二位的结果
CJNE A,#00000010B,NOK2;不是K2键,转NOK2
MOV 30H,#6 ;是K2键将30H地址赋值为6
MOV 31H,#8 ; 将31H地址赋值为8
MOV 32H,#6 ;将32H地址赋值为6
MOV 33H,#8 ; 将33H地址赋值为8
LJMP DISPLAY ;转显示子程序
NOK2: MOV 30H,#7 ;不是K2,则一定是K3。将30H地址赋值为7
MOV 31H,#7 ;将31H地址赋值为7
MOV 32H,#1 ;将32H地址赋值为1
MOV 33H,#1 ; 将33H地址赋值为1
DISPLAY:
MOV A,@R1 ;
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P2,R2 ;选择数码管
MOV P0,A ;送到P0口数码管显示
LCALL DELAY ;显示延时
MOV A,R2 ;R2的值移位
RL A
MOV R2,A
INC R1
DJNZ R4,DD
LJMP DISAGAIN ;重新开始扫描
DD: LJMP DISLOOP
DELAY10MS:
MOV R6,#20
D1: MOV R7,#200
D2: DJNZ R7,D2
DJNZ R6,D1
RET
DELAY:
MOV R6,#20
D3: MOV R7,#100
D4: DJNZ R7,D4
DJNZ R6,D3
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
DB 99H,92H,82H,0F8H,80H,90H ;4,5,6,7,8,9
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -