⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jianpan.asm

📁 实现2*2键盘扫描
💻 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 + -