㈠ 单片机 矩阵键盘 怎么扫描多个数
将接键盘的端口置为读状态,例如接在P1口上的4*4键盘就写:MOV
P1,#0F0H
然后读P1口的状态,然后消除键抖动,在确定有键按下的情况下逐个判断P1.0,P1.1P,P1.2,P1.3的状态,再逐个判断P1.4,P1.5,P1.6,P1.7的状态,最后的键值等于行首号加列号。行首号从上到下依次为:0,4,8,C,列号从左到右依次为0,1,2,3,例如第二列第三个数应该为4+2=6,第三行第二个数应为8+1=9,第一个应为8+0=8.4*4键盘最后一个数应为第四行初值C+第四列值3=键码F.让我们共同进步。
㈡ 单片机行列式键盘扫描原理
单片机行列式键盘扫描原理如下:
1、行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。
2、延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。
3、单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平。
4、此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。
(2)单片机扫描键盘扩展阅读
单片机学习方法
1、基础理论知识学习
基础理论知识包括模拟电路、数字电路和C语言知识。。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。
2、单片机实践
准备一台电脑、一块单片机开发板、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板来运行单片机程序,验证实际效果。
㈢ 单片机键盘扫描怎么实现一键多用
1:键值记录
2:时间记录
3:是不是同一个键。
以上三个条件组合,一个条件用一个变量。
㈣ 单片机汇编矩阵键盘实验(扫描法)
关于扫描按键的原理,可以看下面这篇文章。
本文以循序渐进的思路,引导大家思考如何用最少的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个。
最后再说下,如果实际设计时,还是按思路四设计好,软件也没那么麻烦。如果是你的话你会选择哪种方法呢?你还有没有其他的设计方法呢?
㈤ 初学单片机矩阵键盘逐行扫描,问题困扰好久
P3=0x7f;//高4位作为输出,低4 位为输入,作为输入时要先将其置1
每次扫描时高4位中只有一根线是0,如果没有按键按下,高4位中的0就不会传到低4位上
那么读P3的低4位,它将仍保持原状态4个1(0x0f)
反之,若读到的不是4个1,说明有按键按下了
temp=P3;//将P3口的状态读回来
temp=temp&0x0f;//只取低4 位
if(temp!=0x0f)//如果不全为1,说明有按键按下
{
Delay1ms(5);//消抖动
temp=P3;//再次将P3口的状态读回来
temp=temp&0x0f;//仍然只取低4 位
if(temp!=0x0f)//再次判断是不是4 个1
{
temp=P3;//是 再次读回,因高4位送出的是7,读回也只能是7
switch(temp)//1 根输出线上(此处是最高位)挂有4 个按键,因此读回的数值只有4 种可能
其它3 根线上也各挂4个按键,但你此时按下也不起作用,因它们输出是1
高4位以很快的速度轮流输出低电平,且你按任何键都要持续几十到上百ms,因此你按任何键都有可被扫描到
7二进制是0111 b二进制是1011 d二进制是1011 e二进制是1110
{
case 0x7e:num=1;xianshi=table[num-1];//num是你自己定义的
break;
case 0x7d:num=2;xianshi=table[num-1];
break;
case 0x7b:num=3;xianshi=table[num-1];
break;
case 0x77:num=4;xianshi=table[num-1];
break;
}