“双向双次”键盘“扫描”技术 -(精)(5358字)hotpower2004-2-12 1:13:11[166次]
所谓行列式即矩阵。例4*4表示由4根行扫描线和4根列扫描线组成16个键。
一般采用行或列移位方式的扫描,共需扫描4次。n*m次时,共需Min(n,m)次。
“双向双次”键盘“扫描”技术,n*m次时,也只需2次。
方法如下:
注:所在行列线上拉电阻。
对于准双向IO输入需写高电平。
对于真双向IO输入需置IO为输入方式。(最好加限流电阻)
以51的P1口组成4*4键盘为例(不含键抖动部分,只讲原理):
第一次扫描
发送数据F0h至P1口 MOV P1,#0F0H;发送低4位(行)
延时 NOP
接收数据至B MOV B,P1;接收高4位(列)
第二次扫描
发送数据0Fh至P1口 MOV P1,#00FH;发送高4位(列)
延时 NOP
接收数据至A MOV A,P1;接收低4位(行)
合并结果 ORL A,B;得到负逻辑键值
变换为正逻辑 CPL A;变为正逻辑键值
此时的ACC若为0,表示无键压下
ACC若非0,表示有键压下
若为单键时且有键压下时,ACC中'1'的个数必须成双P=0
若采用查询,还需创建键值表,查询次数即为键号。
KEY15: DB 00010001B
KEY16: DB 00100001B
KEY17: DB 01000001B
KEY18: DB 10000001B
KEY25: DB 00010010B
KEY26: DB 00100010B
KEY27: DB 01000010B
KEY28: DB 10000010B
KEY35: DB 00010100B
KEY36: DB 00100100B
KEY37: DB 01000100B
KEY38: DB 10000100B
KEY45: DB 00011000B
KEY46: DB 00101000B
KEY47: DB 01001000B
KEY48: DB 10001000B
也可采用行列变换法:
将键值的高低4位“格式化”
0001B->0001B->0000B
0010B->0010B->0001B
0100B->0011B->0010B
1000B->0100B->0011B
再将高4位左移2位即可得到键号。
MOV B,A;存键值
ANL B,#00001111B;行
ANL A,#11110000B;列
JNB B.2,K1
XRL B,#00000111B;00000100B->00000011B
K1:JNB B.3,K2
XRL B,#00001100B;00001000B->00000100B
K2:DEC B;0~3
JNB ACC.6,K3
XRL A,#01110000B;01000000B->00110000B
K3:JNB ACC.7,K4
XRL A,#11000000B;10000000B->01000000B
K4:DEC A;00~30
RR A
RR A
ORL A,B;合并得到键号。
注:本例主要讲双向读键方式和相应的算法。
系统注:本文被丁丁加精.
文章评论(0条评论)
登录后参与讨论