首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

矩阵式键盘扫描原理

矩阵式键盘扫描原理

矩阵式键盘扫描原理
将键值显示在七节显示器上的单片机源码:本文由www.dziuu.com整理提供,部分内容来源于网络,如有侵犯到你的权利请与我们联系更正。
把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,比对之后就可知道是哪个键被按下。本文由www.dziuu.com整理提供,部分内容来源于网络,如有侵犯到你的权利请与我们联系更正。
比如说扫描码送入01111111,前面的0111是代表扫描第一行P1.0列,而的1111是让读取的4行接脚先设為VDD,若第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因為按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即為扫描原理。
由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,為了避免让8051误判為多次输入同一按键,
我们在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定,再去判读所按下的键,就可以让键盘的输入稳定。


SCAN:

MOV R3,#F7H            ; 扫描初始值
MOV R1,#00H            ; 取码指标
SCAN1:

MOV A,R3               ; 开始扫描
MOV P1,A               ; 将扫描值输出到 P1
MOV A,P1               ; 读入 P1 判断是否有按下
MOV R4,A               ; 存到 R4, 判断是否放开
SETB C                 ; C=1
MOV R5,#04H            ; 扫描 P14~P17
L1:

RLC A                  ; 将按键值左移一位元
JNC KEYIN              ; 若 C=0, 有按, 执行 KEYIN
INC R1                 ; 将指标值加 1, 继续扫描下一行
DJNZ R5,L1             ; 扫描四行
MOV A,R3               ; 载入扫描值
SETB C                 ; C=1
RRC A                  ; 扫描下一列(P13~P10)
MOV R3,A               ; 存回扫描值
JC SCAN1               ; C=1, 尚未完成扫描
RET                    ; 结束键盘扫描, 回到 Main Program
KEYIN:

MOV R7,#10             ; 消除弹跳
D2:

MOV R6,#248
DJNZ R6,$
DJNZ R7,D2
D3:

MOV A,P1               ; 读入 P1
XRL A,R4
JZ D3
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
Table:
   db   0c0h,0f9h,0a4h,0b0h,099h   ;0-4
   db   092h,082h,0f8h,080h,090h   ;5-9
   db   088h,083h,0a7h,0a1h,086h   ;A-E
   db   08eh               ;F
end





>> 转载请注明出处并保留链接。http://www.dziuu.com
返回列表