原创 “双向双次”键盘“扫描”技术

2006-12-30 01:41 4471 9 9 分类: MCU/ 嵌入式

“双向双次”键盘“扫描”技术 -(精)(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;合并得到键号。

注:本例主要讲双向读键方式和相应的算法。



系统注:本文被丁丁加精.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条