📄 12.asm
字号:
/*
3x3键盘接P3.2-P3.7,数码管数据线P0,位选线接P2.4
*/
org 0000h
ajmp main
ORG 0023H
lJMP COMINT
org 0030h
main:
MOV P0, #00H ;
MOV P2, #0FFH ;
;MOV R2,#5
;MOV R0,#53H
MOV 20H,#00H ;设置串口工作方式
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0F3H ;设置速率4800,(12M晶体)
MOV PCON,#80H
SETB EA
SETB ES
SETB TR1
loop:
mov dptr,#tab ;将表头放入DPTR
lcall KEY ;调用键盘扫描程序
movc a,@a+dptr ;查表后将键值送入ACC
mov p0,a ;将Acc值送入P0口
mov sbuf,a
CLR P2.7 ;开显示
ljmp loop ;返回反复循环显示
;-------------键盘扫描------------------------------------
KEY: LCALL KS ;调用检测按键子程序
JNZ K1 ;有键按下K1
LCALL DELAY2 ;无键按调用延时去抖
AJMP KEY ;返回继续检测按键
K1: LCALL DELAY2
LCALL DELAY2 ;有键按下延时去抖动
LCALL KS ;再调用检测按键程序
JNZ K2 ;确认有按下进行下一步
AJMP KEY ;无键按下返回继续检测
K2: MOV R2,#0DFH ;将扫描值送入 R2暂存
MOV R4,#00H ;将第一列值送入R4暂存
K3: MOV P3,R2 ;将R2的值送入P1口
L6: JB P3.4,L1 ;P3.4等于1跳转到L1
MOV A,#07H ;将第一行值送入ACC
AJMP LK ;跳转到键值处理程序
L1: JB P3.3,L2 ;P3.3等于1跳转到L2
MOV A,#04H ;将第二行的行值送入ACC
AJMP LK ;跳转到键值理程序进行键值处理
L2: JB P3.2,NEXT ;P3.2等于1跳转到NEXT
MOV A,#01H ;将第三行的行值送入ACC
AJMP LK ;跳转到键值处理程序
LK: ADD A,R4;行值与列值相加再加1后的键值送入A
;ADD A,#01H
PUSH ACC ;将A中的值送入堆栈暂存
K4: LCALL DELAY2 ;调用延时去抖动程序
LCALL KS ;调用按键检测程序
JNZ K4 ;按键没有松开继续返回检测
POP ACC ;将堆栈的值送入ACC
RET
NEXT:INC R4 ;将列值加一
MOV A,R2 ;将R2的值送入A
JNB ACC.7,KEY ;扫描完至KEY处进行下一扫描
RL A ;扫描未完将A中的值右移一位进行下一列的扫描
MOV R2,A ;将ACC的值送入R2暂存
AJMP K3 ;跳转到K3继续
KS: MOV P3,#1FH ;将P3口P3.7-P3.5位置0,P3.4-P3.2位置1
MOV A,P3 ;读P3口
XRL A,#1FH ;将A中的值与A中的值相异或
RET ;子程序返回
;-------------------串口中断--------------------------
COMINT:
push acc
CLR ES
CLR RI
MOV A,SBUF
CJNE A,#1,IN_1
MOV P1,#0FEH
IN_1:
CJNE A,#2,IN_2
MOV P1,#0FDH
IN_2:
CJNE A,#3,IN_3
MOV P1,#0FBH
IN_3:
CJNE A,#4,IN_4
MOV P1,#0F7H
IN_4:
CJNE A,#5,IN_5
MOV P1,#0EFH
IN_5:
CJNE A,#6,IN_6
MOV P1,#0DFH
IN_6:
CJNE A,#7,IN_7
MOV P1,#0BFH
IN_7:
CJNE A,#8,IN_8
MOV P1,#07FH
IN_8:
SETB ES
pop acc
RETI
;----------延时程序---------------------------
DELAY2: ;40ms延时去抖动子程序
MOV R5,#08H
L7: MOV R6,#0FAH
L8: DJNZ R6,L8
DJNZ R5,L7
RET
tab:
db 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -