📄 5.asm
字号:
ORG 0H
LJMP START
ORG 30H
START: MOV P0,#0FFH ;P0口置1
MOV P2,#0H ;P2口清0
MOV 30H,#0 ;初始显示00
MOV 31H,#0 ;
MOV DPTR,#TABLE ;将数据表TABLE的首地址赋给DPTR
SCANK:
MOV R4,#2 ;数码管数目赋给R4
MOV R1,#30H ;R1装显示内容的地址
MOV R2,#01000000B ;R2装位选信号
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
LJMP DISPLAY ;转显示子程序
NOK0: MOV 30H,#8 ;不是K0键则是K1。将30H地址赋值为8
MOV 31H,#9 ;将31H地址赋值为9
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
LJMP DISPLAY ;转显示子程序
NOK2: MOV 30H,#7 ;不是K2,则一定是K3。将30H地址赋值为7
MOV 31H,#7 ;将31H地址赋值为7
DISPLAY:MOV A,@R1 ;R1中的数据作为地址,取数据给A
MOVC A,@A+DPTR;将(A+DPTR)地址中的值赋给A
MOV P2,R2 ;选择第一个数码管
MOV P0,A ;送到P0口数码管显示
LCALL DELAY ;显示延时
MOV A,R2 ;位选信号左移
RL A ;
MOV R2,A ;
INC R1 ;下一个显示的内容的地址
DJNZ R4,DT ;显示完转DT
LJMP SCANK ;重新开始扫描
DT: LJMP DISLOOP
DELAY10MS:
MOV R6,#20
D1: MOV R7,#200
D2: DJNZ R7,D2
DJNZ R6,D1
RET
DELAY:
MOV R6,#100
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 + -