📄 jianpan.asm
字号:
ORG 0000H
JMP INI
INI: MOV R1,#72H ;初始化数据缓存区72H,71H,70H,6FH
MOV R6,#0EFH ;初始化行列值
MOV R4,#00H ;
;******************************************
;
; 2*2 键盘显示主程序
;
;******************************************
MAIN:
LCALL KEY
LCALL DISPLAY
SJMP MAIN
;******************************************
; 键盘扫描子程序
;
;******************************************
;******************************************************
;键盘扫描子程序
;******************************************************
KEY: MOV A,R6
MOV P2,A ;2口送出初始化行列值(P2.0,2.1,2.2,2.3为高电平)
;( P2.4,2.5,2.6,2.7 为列, 2.4为低电平(0列))
LCALL DELAY1 ;调用延时
MOV A,P2 ;读取P2口的值进行后面的判断
JB ACC.0,NEXT1 ;判断第0列,不是0行被阿下
WKEY1: MOV A,P2 ;是0行被按下
JNB ACC.0,WKEY1 ;等待0行按键释放
MOV A,R4 ;纪录当前列值
MOV DPTR,#INDEX1;初始化数据表指针
MOVC A,@A+DPTR ;查表获得按键的标号值
MOV @R1,A ;将查得的数据放置在按键存储区内(72H)
DEC R1 ;存储区地址减一运算指向(71H)单元
LJMP PANDUAN ;调用PANDUAN子程序,判断数据单元是否已存满
NEXT1: JB ACC.1,PANDUAN ;判断不是第1行被按下
WKEY2: MOV A,P2
JNB ACC.1,WKEY2
MOV A,R4
MOV DPTR,#INDEX2
MOVC A,@A+DPTR
MOV @R1,A
DEC R1
PANDUAN:CALL DELAY1
CJNE R1,#6FH,SKIP ;如果未存满,即不等于6FH,执行下一轮扫描
MOV R1,#72H ;如果已存满,存储区重新赋值
SKIP: MOV A,R6 ;列数据移入累加器
RL A ;左移列数据,扫描下一列,01列
MOV R6,A ;暂存列数据
INC R4 ;纪录01列数值
CJNE R4,#04H,KEY ;判断列数值是否扫完,如果没有,继续进行循环
MOV R6,#0EFH ;--------------扫完,重新赋初始值
MOV R4,#00H
RET
;**********************************************
; 数码管显示子程序
; DATA BUFFER: 72H,71H,70H,6FH
; P1.0,P1.1,P1.2,P1.3-----data show;
; P3.0,P3.1,P3.2,P3.3-----control;
; high power is Valid
;
;**********************************************
DISPLAY:MOV A,72H
DA A
MOV P1,A
SETB P3.0
CLR P3.1
CLR P3.2
CLR P3.3
LCALL DELAY1
MOV A,71H
DA A
MOV P1,A
SETB P3.1
CLR P3.0
CLR P3.2
CLR P3.3
LCALL DELAY1
MOV A,70H
DA A
MOV P1,A
SETB P3.2
CLR P3.0
CLR P3.1
CLR P3.3
LCALL DELAY1
MOV A,6FH
DA A
MOV P1,A
SETB P3.3
CLR P3.0
CLR P3.1
CLR P3.2
LCALL DELAY1
RET
DELAY1: MOV R5,#0FFH
DJNZ R5,$
MOV R5,#0FFH
DJNZ R5,$
MOV R5,#0FFH
DJNZ R5,$
MOV R5,#0FFH
DJNZ R5,$
RET
;**********************************************
;* 按键表
;**********************************************
INDEX1: DB 0,1,2,3
INDEX2: DB 4,5,6,7
INDEX3: DB 8,9,10,11
INDEX4: DB 12,13,14,15
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -