经典案例分享:两种键盘扫描方法比较分析

最新更新时间:2012-05-15来源: 互联网关键字:键盘扫描 手机看文章 扫描二维码
随时随地手机看文章

说到键盘扫描,相信大多数人第一反应就是行列矩阵扫描,这样我们可以用相对有限的IO口得到尽可能多的按键。键盘扫描是单片机技术的一种基本处理方法,学校的单片机课程都会有相应章节进行阐述,只要按照课本上讲述的方法,一般都能设计出比较可靠的键盘扫描电路与程序。

  课本上的键盘扫描方法(见下图接法二)不能说是尽善尽美,从易懂性、成本、程序难易程度等方面综合看应该是不错的方法,给人感觉是已经没有太多的改善空间,至少我是这么认为的。

  然而前段时间一位台湾朋友画给我的键盘扫描矩阵电路(见下图接法二),让我又一次看到到自己的思维还有许多地方被自己的所谓“经验”束缚着。

  

  单纯的从硬件接法看,两种接法并没有明显区别,接法一甚至要复杂一些,但如果结合到键盘扫描的程序来看,就会发现接法一确实更好。

  两种接法我都没有把上拉电阻包含进来,来让我们看一下两种接法到底有什么不同:

  接法二:

  我们熟悉的传统扫键处理电路,假定键盘行列IO口标号分别为H1/H2/H3和V1/V2/V3,扫键流程通常如下。

  2.1. H1设置为输出,H2/H3和V1/V2/V3设置为输入

  2.2. H1分别输出1和0,读V1/V2/V3状态,如果Vy状态与H1一致,则认为H1与Vy交叉位置的键按下

  2.3. H2设置为输出,H1/H3和V1/V2/V3设置为输入

  2.4. H2分别输出1和0,读V1/V2/V3状态,如果Vy状态与H2一致,则认为H2与Vy交叉位置的键按下

  2.5. H3设置为输出,H1/H2和V1/V2/V3设置为输入

  2.6. H3分别输出1和0,读V1/V2/V3状态,如果Vy状态与H3一致,则认为H3与Vy交叉位置的键按下

  接法一:

  新扫键处理电路,假定键盘行列IO口标号分别为H1/H2/H3和V1/V2/V3,扫键流程通常如下。

  1.1. H1/H2/H3和V1/V2/V3都设置为输入

  1.2. 读H1/H2/H3和V1/V2/V3状态,如果Hx和Vy读到的状态均为0,则认为Hx与Vy交叉位置的键按下

  从上面流程可以看出接法一的程序代码要简单不少,既能减少扫键的代码量,又能加快扫键处理的时间,站在软件的角度看确实要比接法二要好。后来我反思了一下为什么我们教材上的传统处理方法没有采用接法一,虽然接法一软件上要简单一些,但硬件布局要复杂,传统的按键只有两条接线,接法一需要三条接线,所以用传统的按键是无法实现的,但现在许多电子产品的按键都用导电橡胶或锅仔片来实现,所以接法一变得可行。

  注:这两种电路对于同时按键达到3个的情况都有可能形成错误的按键逻辑。

关键字:键盘扫描 编辑:神话 引用地址:经典案例分享:两种键盘扫描方法比较分析

上一篇:基于GAL的I2C总线时序模拟
下一篇:一种嵌入式网络接口设计

推荐阅读最新更新时间:2023-10-12 20:40

基于AVR的4*4矩阵键盘扫描与LED显示程序
/************** 此程序在别人的基础上进行了一些修改,能应用到我的开发板中, 并与我自制的外接按键和LED灯配合使用,在此感谢原创者!!! 硬件:M16 作用:当按下按键时显示相对应的按键控制的LED灯 频率:8.000000MHZ 开发板:EasyAVR M16 v12 编译软件:ICCAVR6.31A 下载软件:AVRstudio4.14 编写人:伍建忠 编写日期:2011.10.14 修改日期: ************/ #include iom16v.h #include macros.h #define uchar unsigned char
[单片机]
矩阵式键盘扫描原理
将键值显示在七节显示器上的单片机源码: 把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。 比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设為VDD,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因為这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即為扫描原
[单片机]
4x4矩阵键盘 扫描程序
一:不排除第四位异常处理 uchar JuzhenkeyScan() { // P3=0xfe; // temp=P3; // while(temp!=0xfe) // { // temp=P3; // switch(temp) // { // case 0xee:num=10; // break; // case 0xde:num=3; // break; // case 0xbe:num=2; // break; // case 0x7e:num=1; // break; // } // delayms(10); // } P3=0xfd;//
[单片机]
矩阵式键盘扫描原理
  矩阵式键盘扫描原理   将键值显示在七节显示器上的单片机源码。把每个 键 都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,比对之后就可知道是哪个键被按下。   比如说扫描码送入01111111,前面的0111是代表扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设為VDD,若第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因為这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bi
[测试测量]
简单的4*4矩阵键盘扫描程序
/* 程序效果:按下任意键,LED显示P0读回的数据其中4*4的矩阵键盘接P0口 */ #include reg52.h //头文件 unsigned char key=0xff; //定义一个变量用于存放按键值 void readkey(); //读按键子函数,获取键值 void main() //主函数 { while(1) { readkey(); //读按键值 if(key!=0xff) //判断是否有按键按下 P2=~key;//这里取反:是因为LED为共阴,显示所按下的值 } } void readkey() //读键盘子函数 { P0=0xfe; //将第一列拉低,扫描是否有按键按下,第一列键值为:0,4,
[单片机]
简单的4*4矩阵<font color='red'>键盘</font><font color='red'>扫描</font>程序
4X4键盘扫描程序
4X4键盘扫描程序,采用查表方式,适用于AVR单片机。 此处为4X4键盘软件部分,硬件部分 设计 请参照: 此程序对应的键盘电路为: /* 键盘扫描函数 读取当前键盘的状态 有按键按下返回相应按键值 无按键按下返回 0x00 */ unsigned char key_read(void){ unsigned char i; DDRA = 0x00;/*获取列地址*/ PORTA = 0x0F; DDRA = 0xF0; i = PINA; DDRA = 0x00;/*获取行地址*/ PORTA = 0xF0; DDRA = 0x0F; i
[单片机]
4X4<font color='red'>键盘</font><font color='red'>扫描</font>程序
pic单片机4*4键盘扫描程序
#include p IC .h __CONFIG(0x1832); const char TABLE ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90}; //定义常数0-9的数据表格 volatile unsigned char result=0,temp=0,f=0; volatile unsigned int total=0,ge=0,shi=0,bai=0,qian=0,c=1; void delay(); //delay函数申明 void init(); //I/O口初始化函数申明 void s CAN
[单片机]
stc89c51单片机矩阵键盘扫描
#include reg52.h #include stdio.h #define GPIO_KEY P0 #define GPIO_LED P1 unsigned char KeyValue;//存储键值 unsigned char code DIG_CODE ={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F}; void Delay10ms();//延时10ms void KeyDown();//监测按键函数 void main(void) { while(1) { KeyDown()
[单片机]
小广播
最新模拟电子文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved