|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
“双向双次”键盘“扫描”技术 (转自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 于 2006/11/13 9:38:00 发布:
avr做4*4键盘输出管脚上应加个反向二极管。 加二极管主要目的是把输出变成OC方式。防止两个键同时按时短路。 |
3楼: | >>参与讨论 |
作者: zsmbj 于 2006/11/13 11:51:00 发布:
不用加二极管的。 如果需要加二极管,那主要是你的程序没有写好。 * - 本贴最后修改时间:2006-11-13 12:11:55 修改者:zsmbj |
4楼: | >>参与讨论 |
作者: xwj 于 2006/11/13 12:22:00 发布:
加二极管是为了实现多键和长按键 |
5楼: | >>参与讨论 |
作者: hotpower 于 2006/11/14 23:10:00 发布:
我倒塌了~~~几百年的老黄历了,这次该双向三次扫描了~~~ http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2331440 * - 本贴最后修改时间:2006-11-14 23:11:19 修改者:hotpower |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |