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

📄 scankey11.asm

📁 单片机和键盘、LED的接口程序。键盘采用4x4非编码形式
💻 ASM
字号:
          ORG   000H
          LJMP KEY
          ORG    1000H
;------------检测是否有键按下------------------
IsKeyDown: MOV P2, #0FH  ;P2.4~P2.7输出全为0
           MOV A, P2
	   ANL A, #0FH   ;读取P2.0~P2.3状态
	   RET
;---------------程序开始----------
     KEY: ;MOV SP, #50H
          ACALL IsKeyDown  ;
          CJNE A, #0FH, LK  ;P2.0~P2.3不是全"1"时,有键闭合,转LK
      N1: ACALL DELAY ;延时6ms
          AJMP KEY    ;
      LK: ACALL DELAY
          ACALL DELAY ;延时12ms去抖动
          ACALL IsKeyDown  ; 再次检查键是否闭合
          CJNE A, #0FH, SCAN  ; 键再闭合,转SCAN扫描键盘
          ACALL DELAY
	  AJMP KEY  ;无键闭合时 转KEY
;--------------扫描键盘-----------------
   SCAN: MOV R0, #00H   ;扫描行号送R0
         MOV R1, #0EFH  ;扫描初值送R1(第一行)
	 MOV R3, #4H   ; 行扫描计数
   ROW:  MOV A, R1   ;
         MOV P2, A
	 MOV A, P2
	 JB ACC.0, LINE2  ;P2.0=1时第一列无键闭合,转第二列
	 MOV R2, #00H  ;列号送R2
	 AJMP CALKEY   ;转CALKEY, 计算键号
 LINE2:  JB ACC.1, LINE3  ;
         MOV R2, #1H  ;列号送R2
	 AJMP CALKEY
 LINE3:  JB ACC.2, LINE4  ;
         MOV R2, #2H  ;列号送R2
	 AJMP CALKEY
 LINE4:  JB ACC.3, NEXTROW  ;
         MOV R2, #3H  ;列号送R2
	 AJMP CALKEY
CALKEY:  MOV B, R0    ;键号=4*行号+列号
         MOV A, #04H
	 MUL AB
	 ADD A, R2
	 ;PUSH ACC   ;保存键号
	 ACALL KEYPROC  ;只考虑最先按下的键,调用处理程序
	 AJMP KEY
NEXTROW: ;DEC R3  ;扫描完一行后,计数减一
         DJNZ R3, NEXT  ;没有扫描完,转NEXT继续扫描
	 AJMP KEY      ; 扫描完4行后,转KEY
  NEXT:  INC R0  ;扫描行号加1
         MOV A, R1  ;将上一次的扫描初值送A
	 CPL A  ;A取反
	 RL A   ;
	 CPL A  ;
	 MOV R1, A  ;新一行的扫描初值送R1
	 AJMP ROW  ;
;----------------延时子程序--------------
 DELAY:  MOV R6, #6H
 LOOP1:  MOV R7, #0C8H   ;200次
 LOOP2:  NOP
         NOP
         NOP
 	 DJNZ R7, LOOP2  ; 内循环200*5=1ms
	 DJNZ R6, LOOP1  ; 共延时6ms
	 RET

;----------------键盘处理程序,用于LED的显示-------------
KEYPROC: MOV DPTR, #TABLE   ;指向表首地址
         ;POP ACC  ;取出键号
	 MOVC A, @A+DPTR    ;取出LED段选码
	 MOV  40H, #8H   ;计数
 RLOOP:  RLC A   ;带进位循环左移
         CLR P0.0  ;
	 MOV P0.1, C  ;将进位输进P0.1
	 CPL P0.0  ;完成一位读取数据
	 DJNZ 40H, RLOOP  ;8位数据是否读完,
	 RET

 TABLE:  DB   3FH
         DB   06H
	 DB   5BH
	 DB   4FH
	 DB   66H
	 DB   6DH
	 DB   7DH
	 DB   07H
	 DB   7FH
	 DB   6FH
	 DB   77H
	 DB   7CH
	 DB   39H
	 DB   5EH
	 DB   79H
	 DB   71H

         END





















⌨️ 快捷键说明

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