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

📄 3_1.txt

📁 使用74164连接8行2列键盘的行线
💻 TXT
字号:
;使用74164连接8行2列键盘的行线,74165连接键盘的列线,编写扫描键盘
;按键的程序
;D4:JP36--------G5:JP92          (74165连接键盘的列线)
;D5:JP49--------G5:JP47          (74164连接键盘的行线)
;A3:JP59--------G6:JP65          (P2接发光管用来检验扫描键码值)
;A3:P1.0--------D5:A,B           (作为74164的数据线)
;A3:P1.1--------D5:CLK           (作为74164的时钟线)
;A3:P1.4--------D4:SH/~LD        (用于74165的移位加载信号)
;A3:P1.5--------D4:QH            (作为74165的数据线)
;A3:P1.2--------D4:CLK           (作为74165的时钟线)
          ORG     0000H
          LJMP    START
          ORG     0100H

START:    MOV     SP,#60H                                                                                                                                                               
LOOP:     ACALL   KEY0
          MOV     A,R0            R0中存放扫描得到的键码
          CPL     A
          MOV     P2,A
          SJMP    LOOP

KEY0:     ACALL   KEYIN
          JNZ     KEY1
          ACALL   DELAY
          AJMP    KEYOV           ;无按键,返回

KEY1:     ACALL   DELAY
          ACALL   DELAY           ;去抖动
          ACALL   KEYIN
          JNZ     KEY2
          ACALL   DELAY
          AJMP    KEYOV           ;无按键,返回

KEY2:     MOV     R4,#00           行码计数
          MOV     R2,#0FEH         行扫描码
          
          MOV     R1,#08H         将行扫描码按位送入
          MOV     A,R2
KEY3:     MOV     R3,A
          ANL     A,#80H
          CJNE    A,#00H,KEY4
          CLR     P1.0
          AJMP    KEY5
KEY4:     SETB    P1.0
KEY5:     CLR     P1.1
          SETB    P1.1 
          MOV     A,R3
          RL      A        
          DJNZ    R1,KEY3
	
          CLR	  P1.4	           读出列码
	  ACALL	  DELAY
	  SETB	  P1.4
          MOV     C,P1.5
	  MOV     ACC.0,C   
          CLR	  P1.2
          SETB	  P1.2

	  MOV     C,P1.5
	  MOV     ACC.1,C   
          JB      ACC.0,LONE       第0列无键闭合,转LONE
          MOV     A,#00H           装第0列状态友起始值
          AJMP    KEYNUM      
LONE:     JB      ACC.1,KEYNO      第1列无键闭合,转KEYNO
          MOV     A,#08H           装第0列状态友起始值
          AJMP    KEYNUM
KEYNO:    INC     R4               扫描行号加1
          MOV     A,R2
          RL      A
          JNB     ACC.0,KEYOV      扫锚完最后一行,转KEYOV
          MOV     R2,A
          MOV     R1,#08H
          AJMP    KEY3
KEYNUM:   ADD     A,R4             计算码值
          MOV     R0,A
          
KEYOV:    RET

KEYIN:    MOV     R1,#08H         检查是否有键闭合
KEYIN1:   CLR     P1.0
          CLR     P1.1
          SETB    P1.1
          DJNZ    R1,KEYIN1
          CLR	  P1.4	
	  ACALL	  DELAY
	  SETB	  P1.4
       	  MOV     C,P1.5
	  MOV     ACC.0,C   
	  CLR	  P1.2
          SETB	  P1.2
          MOV     C,P1.5
	  MOV     ACC.1,C
	  CPL	  A                 若无键按下,则全为0
	  ANL     A,#03H              
	  RET
	
DELAY:    MOV     R5,#02H         延时
DELAY1:   MOV     R6,#0FFH
DELAY2:   MOV     R7,#0FFH
          DJNZ    R7,$
          DJNZ    R6,DELAY2
          DJNZ    R5,DELAY1
          RET
          END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -