导航:首页 > 操作系统 > 单片机矩阵键盘设计

单片机矩阵键盘设计

发布时间:2023-01-23 11:42:45

A. 单片机汇编矩阵键盘实验(扫描法)

关于扫描按键的原理,可以看下面这篇文章。

本文以循序渐进的思路,引导大家思考如何用最少的IO驱动更多的按键,并依次给出5种方案原理图提供参考。在实际项目中我们经常会遇到有按键输入的需求,但有的时候为了节省资源成本,我们都会选择在不增加硬件的情况下使用最少的控制器IO驱动更多的按键,那么具体是怎么做的呢,下面我们就以用5个IO引脚为例,讲下怎么设计可以实现更多的按键?共有5种设计思路,下面依次介绍。

思路一

首先通常想到的可能是下面这样的设计:

这样我们可以先识别K01、K02、K03、K04、K05,若没有按键按下然后再和思路四的设计一样去识别其他按键。但这样存在一个问题,如果IO1配置为0,IO5读到0,那么怎么知道是K51按下还是K05按下呢,这里只需要在程序里做下判断,先判断下是不是K05按下,若不是就是K51,因为按键K01、K02、K03、K04、K05在5个IO口都为读取的情况下,就可以识别,不需要扫描识别处理,相当于这5个按键优先级高与其他按键。

总结

综合上述,5个IO口最多可以识别25个按键,思路五程序上处理比较麻烦,若实际中只按思路四设计,也可识别20个按键,那么如果有N个IO口可识别多少按键呢?这里给出如下公式:

假设有N个IO口按照思路三可以识别N*(N-1)/2个;

按照思路四可识别N*(N-1)个;

按照思路5可以识别N*(N-1)+N个。

最后再说下,如果实际设计时,还是按思路四设计好,软件也没那么麻烦。如果是你的话你会选择哪种方法呢?你还有没有其他的设计方法呢?

B. 51单片机矩阵键盘(c语言) 求大神啊~

uchar
KeyScan(void)
{
static
uchar
k=0;
//由于函数在调用结束时k值已返回给函数,k作为局部变量即可
/////////
uchar
Trg,Trg1,Trg2,Cont1,Cont2;
uchar
ReadData1,ReadData2;
/////////
P3=0x0f;
ReadData1=P3^0x0f;
Trg1=ReadData1&(ReadData1^Cont1);
//触发键
Cont1=ReadData1;
//长按键
/////////
P3=0xf0;
ReadData2=P3^0xf0;
Trg2=ReadData2&(ReadData2^Cont2);
Cont2=ReadData2;
Trg=Trg1+Trg2;
////////
switch(Trg)
{
case
0x81:{k=1;break;}
case
0x41:{k=2;break;}
case
0x21:{k=3;break;}
case
0x11:{k=4;break;}
case
0x82:{k=5;break;}
case
0x42:{k=6;break;}
case
0x22:{k=7;break;}
case
0x12:{k=8;break;}
case
0x84:{k=9;break;}
case
0x44:{k=10;break;}
case
0x24:{k=11;break;}
case
0x14:{k=12;break;}
case
0x88:{k=13;break;}
case
0x48:{k=14;break;}
case
0x28:{k=15;break;}
case
0x18:{k=16;break;}
default:{k=0;break;}
}
return(k);
}
//在主函数里面直接调用keyboard()函数,直接返回键值;
然后在数码管显示。
好好的研究下这个键盘程序,
这种方式很程序很精炼、简单
绝对可以调出来。

C. 普中51单片机 矩阵键盘

  1. 你可以尝试使用switch case语句代替if语句,这样可以避免程序出现参差上的错误(不用套那么多的if)

  2. 你可以尝试把key置零总觉得你用table1【1】有点不大好

    我也是新手,希望能帮到你


D. 单片机 行列矩阵键盘

这是一种常见的4*4矩阵键盘扫描按键的方法。其原理是先把4条列线设置为低电平,然后扫描行线,如有按键被按下,必定有一条行线为低电平;再把为低电平的行线设置为低电平,然后扫描列线,如有按键被按下,必定有一条列线为低电平。
倒数第3句(不算括号)的 P3=x; 这里的x中的值是对应行线为低电平,其他7位为高电平。x是P3和0x0f按位或,也就是高四位(行)不变,低四位(列)全置1。但key_code重新读取P3后,由于前面的操作中把高四位(行)的某一条线置为低电平,按下的键导致与该行线接触的列线必定被拉低为低电平,所以这里key_code的低四位不是 1111,而是有一位是0,这样结合高四位的值就可以确定键码了。
51单片机中需要注意,虽然向单片机的引脚输出1,但接着读回的数据完全受引脚外部电平控制。原则上读取51单片机的I/O之前必须向向对应I/O写1,而读回的数据完全决定于引脚外接电平。

阅读全文

与单片机矩阵键盘设计相关的资料

热点内容
app被处罚了怎么办 浏览:1
plc编译后错误18 浏览:612
python数组分片 浏览:251
linux图形化编程 浏览:176
阿里国际站app端怎么装修 浏览:528
微信小程序云开发简单搭建源码 浏览:851
以后缺程序员吗 浏览:294
jsp源码不能运行 浏览:363
淘客助手源码下载 浏览:733
如何使用app记账报税 浏览:562
python线程捕捉键盘 浏览:25
地推统计图app怎么做 浏览:162
android文件夹不能用了 浏览:857
加密软件的日志 浏览:892
肾病pdf 浏览:230
网站怎么用本地服务器 浏览:120
javadoc导入android 浏览:517
文件扫描成pdf 浏览:696
凉山火灾救援命令 浏览:54
压缩机三相检测 浏览:861