登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

“双向双次”键盘“扫描”技术 (转自hotpower)

作者:双龙 栏目:单片机
“双向双次”键盘“扫描”技术 (转自hotpower)
--本坛有人建议发些关于键盘的帖子,当然最好是原创贴了,看到ZSMBJ发了一个,姑且再转一位网友的帖子。
hotpower 发表于 8/9/2003 3:27:22 AM EMC 单片机 ←返回版面    

所谓行列式即矩阵。例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;合并得到键号。

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

2楼: >>参与讨论
MicroMMU
avr做4*4键盘输出管脚上应加个反向二极管。
加二极管主要目的是把输出变成OC方式。防止两个键同时按时短路。

3楼: >>参与讨论
zsmbj
不用加二极管的。
如果需要加二极管,那主要是你的程序没有写好。


* - 本贴最后修改时间:2006-11-13 12:11:55 修改者:zsmbj

4楼: >>参与讨论
xwj
加二极管是为了实现多键和长按键
 
5楼: >>参与讨论
hotpower
我倒塌了~~~几百年的老黄历了,这次该双向三次扫描了~~~
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2331440

* - 本贴最后修改时间:2006-11-14 23:11:19 修改者:hotpower

双龙教主在AVR中的n个io实现的n×n个键盘的方案

参与讨论
昵称:
讨论内容:
 
 
相关帖子
我用GCC写的AT24C64接口程序,已调试通过,与大家分享
请教ic卡设计方案
请教个问题
M48的中断机制导致计时失误!
请问AVRISP  MKii的6个引脚分别接什么?(原来用10脚的座)
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号