网上有关“按键实验 ”话题很是火热 ,小编也是针对按键实验寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
无论是矩阵键盘还是独立键盘,单片机检测其是否被按下的方法都是一样的 。也就是检测与按键对应的 I/O 口的电平高低。
ؠ? 独立按键有一端固定为低电平或高电平 ,单片机写检测程序时比较方便。
ؠ? 矩阵按键两端都与单片机I/O口相连,因此检测时需要人为地通过单片机 ?I/O 口送出低电平。先送一列为低电平,其余几列全为高电平(此时确定了列数) ,然后轮流检测一次各行是否有低电平,若某一行为低电平(此时又确定了行数) 。那么我们就可以确定是哪一行哪一列的键被按下。? 用同样的方法,依次轮流送各列一次低电平 ,再轮流检测一次各行中是否有低电平。这样就可检测完 所有的按键,也就能判断出被按下的是哪一个键 。? 当然我们也可将各行线置低电平,然后扫描检测各列线中是否出现低电平, 这就是矩阵键盘检测的原理和方法。
#include <reg51.h>
#define uchr unsigned char
#define uint ?unsigned int
uchr code DSY_Table[]= ? //共阳极数码管编码
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, //0,1,2,3,4,5,6,7,8
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF, //9,A,B,C,D,E,F,-
};
uchr key; //按键序号
void delayms(uchr x)
{
uchr i;
while(x--) for(i=0;i<120;i++);
}
void main()
{
uchr kp;
P0=0xff;
while(1)
{
P1=0xfd; //P1.1置 0
if(P1!=0xfd) //有键按下?
{
delayms(5); //延时消抖动
if(P1!=0xfd)//确认
{
kp=P1; //读取端口键值
while(P1!=0xfd);//等待键松开
switch(kp&0xf0) //屏蔽低4位,判断高4位
{
case 0xe0: //若高4位为e(即1键)
key=1;//赋键值
break;
case 0xd0: //若高4位为d(即5键)
key=5;//赋键值
break;
case 0xb0: //若高4位为b(即9键)
key=9;//赋键值
break;
case 0x70: //若高4位为7(即"9"键:num[9])
key=13;//赋键值
break;
}
}
}
P0 = DSY_Table[key]; //显示按键值
delayms(5);
}
}
4x4矩阵键盘的工作原理是什么?
定义一个按键缓冲区
用普通的按键扫描程序 ,当扫描到有按键按下的时候。按键键的值写入缓冲区 。继续扫描直到完成。
然后返回缓冲区地址就可以得到多个按键的数据了。
这样只要定义16字节的缓冲区全部按键都能检测到 。(一般不需要那么多6个足够)
还有一种方式 是 如果只返回2个按键的话。
可以这样
常规按键扫描 返回范围在0-15也就是0-F
读取到一个值后把这个值左移4位
再继续读取。当读取到第二个值的时候与上第一个值 。就能获取2个按键的值了。
4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时 ,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低 ,通过读入输入线的状态就可得知是否有键被按下 。
扩展资料:
作为单片机外部设备,在键盘中按键数量较多时,为了减少I/O口的占用 ,通常将按键排列成矩阵形式。矩阵式结构的键盘比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源 ,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
矩阵式结构的键盘比之直接将端口线用于键盘多出了一倍,而且线数越多 ,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键) 。
关于“按键实验”这个话题的介绍 ,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
评论列表(3条)
我是乐信号的签约作者“梦香”
本文概览:网上有关“按键实验”话题很是火热,小编也是针对按键实验寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。无论是矩阵键盘还是独立键盘,单片机...
文章不错《按键实验》内容很有帮助