导航:首页 > 操作系统 > 单片机键盘扫描原理

单片机键盘扫描原理

发布时间:2022-05-12 06:01:43

单片机 键盘扫描 这个程序是如何工作的

别人写的代码我很难分析,代码也不全,就不想费时间分析,大概的思路,就是将接键盘的IO口设为输入,当按下时位低电平,就能判断哪个被按下。具体的是,4*4,四行四列,表示16个数,四个接行数,数个接列数,具体的接法就不说了,网上有,叫矩阵键盘,然后就是一直扫描,if语句判断哪行被按下,在扫描列,就可以对应到具体的按键了,然后就可以跳到相应的处理函数进行处理。

⑵ 简述单片机键盘扫描工作过程

键盘由行线列线交叉而成。列线接有上拉电阻。对第一行的行线置0,然后读取列线码,如果所有列线都是1说明买有被按下的键,继续扫描下一行。直到能读到0为止,读到0时所扫描的行就是该键的行码,而0所在的位是列码。一般的键盘扫描都做成中断形式,把列线所有线相与,只要有一个0就输出0,将这个信号送给中断,就可以实现在有键被按下时开启扫描了。

⑶ 51单片机 矩阵键盘扫描

bit keyscan()//扫描按键函数
{
bit yes=0;
unsigned char temp;
P2=0xfe;//扫描第1行
temp=P2;//读取端口值,检测是否有按键按下
if(temp!=0xfe)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xfe)//再一次判断,确实有键按下再执行
{
yes=1;

while(P2!=0xfe);
delay(15);
while(P2!=0xfe);

switch(temp)//获取键值
{
case 0x7e:NUM=14;break;
case 0xbe:NUM=0;break;
case 0xde:NUM=12;break;
case 0xee:NUM=11;break;
}
}
}

P2=0xfd;//扫描第2行
temp=P2;
if(temp!=0xfd)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xfd)
{
yes=1;

while(P2!=0xfd);
delay(15);
while(P2!=0xfd);

switch(temp)
{
case 0x7d:NUM=7;break;
case 0xbd:NUM=8;break;
case 0xdd:NUM=9;break;
case 0xed:NUM=15;break;
}
}
}

P2=0xfb;//扫描第3行
temp=P2;
if(temp!=0xfb)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xfb)
{
yes=1;
while(P2!=0xfb);
delay(15);
while(P2!=0xfb);
switch(temp)
{
case 0x7b:NUM=4;break;
case 0xbb:NUM=5;break;
case 0xdb:NUM=6;break;
case 0xeb:NUM=10;break;
}

}
}

P2=0xf7;//扫描第4行
temp=P2;
if(temp!=0xf7)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xf7)
{
yes=1;
while(P2!=0xf7);
delay(15);
while(P2!=0xf7);

switch(temp)
{
case 0x77:NUM=1;break;
case 0xb7:NUM=2;break;
case 0xd7:NUM=3;break;
case 0xe7:NUM=13;break;
}

}
}
return yes;
}
其中NUM为全局变量,每次检测到有按键按下时会返回‘1’,通过读取NUM来获得键值,四个switch语句中的NUM值完全取决于你要把该按键设定为何值而定的。
本程序的键盘扫描的原理就是进行行扫描,每一行先对端口写行扫描字,然后再读取端口值,若该行有按键按下,则按键对应列线被拉为低电平。扫描完四行就可以检测一遍16个键了。

⑷ 51单片机4×4小键盘的构造原理

其实就是一个排列组合的关系,4行和4列组成一个矩阵,根据作者的扫描软件处理不同,可以检测到单键,也可以检测到多键。比如行键全部设为高,一列一列的扫以“低电平”,此时检测行健的电平高低从而得知所按键的位置,这就是矩阵键盘的扫描原理。

⑸ 单片机数码显示和键盘扫描为什么需要不断刷新

因为数码管电路,多数都是采用动态扫描显示方式,即多位数码管是逐位点亮的,要不停地刷新,就是不停地扫描显示,否则就会灭掉了。而键盘也同样,需要不停地扫描,才能随时识别有按键了,并判断出是什么键,然后便执行相应的按键操作。因为,按键是随机的,不可能事预 测的,更不是事先约定的,只有随时扫描键盘才能及时发现有按键。数码管显示和按键的动态扫描这个道理非常简单,难道这有什么不好理解吗?

⑹ C51单片机按键扫描

1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机P01引脚,故可采用以下程序实现按键扫描
if(P01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(P01==0);//等待上升沿到
来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void
delay2()//20ms延时子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处P01==0均改为P01==1。

⑺ 单片机扫描电路原理

单片机行列式键盘扫描原理如下:

1、行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。

2、延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。

3、单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平。

4、此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。

(7)单片机键盘扫描原理扩展阅读

单片机学习方法

1、基础理论知识学习

基础理论知识包括模拟电路、数字电路和C语言知识。。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。

2、单片机实践

准备一台电脑、一块单片机开发板、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板来运行单片机程序,验证实际效果。

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

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

本文以循序渐进的思路,引导大家思考如何用最少的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个。

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

⑼ 51单片机中阐述4*4行列式按键的扫描原理

如图:单片机4个IO线如P1.0至P1.3作为输出,4 个作为输入如P1.4至P1.7,上面可以接16 个按键,这些按键都有是一端跨在一根输出线上,另一端跨在一根输入线上, 要是没有按键按下时,输入 状态和输出状态没有任何关系,这时单片机读输入线的状态,得到的结果全是1(默认或设定),若有按键按下,输出线的状态就会反映在输入线上。
先让输出线的一根线P1.0输出0,这时接这根线上的4个按键的某一个如S0被按下,在P1.3上就可以读到一个0,如果S1被按下,P1.4上就可以读到0,......从而可以确定4个按键有无按下,下一步,让输出线的另一根线P1.1输出0,如果S4按下,P1.3上就又可以读到一个0,
如果S5按下,P1.4上就又可以读到一个0........,又可以确定4个按键,4 根输出线分另输出0,就其可以确定16个按键

⑽ 求单片机4*4矩形键盘行扫描法的扫描过程和原理!

反转法键盘扫描过程:1)P3高4位为列低4位为行让高4位为1低4位为0。2)判断是否有按键按下,如果有按键按下则高4位上的有一位为低电平。3)去抖动程序。4)继续判断。5)保存高4位上的按键情况。6)判断是否有按键按下,如果有按键按下则低4位上的有一位为低电平。7)去抖动。8)继续判断。9)保存低4位上的按键情况。

阅读全文

与单片机键盘扫描原理相关的资料

热点内容
盈透证券加密币 浏览:70
阿里云服务器初始密码怎么修改 浏览:264
服务器怎么设定公用网络 浏览:97
程序员自己尝尿检测出糖尿病 浏览:590
打印添加pdf 浏览:930
苹果解压专家账号 浏览:842
度晓晓app为什么关闲 浏览:228
net文件是伪编译码吗 浏览:149
伴随矩阵的matlab编程 浏览:63
单片机和h桥是什么意思 浏览:314
51单片机光控设计论文 浏览:652
涡旋式压缩机无油 浏览:729
企业网搭建及应用pdf 浏览:744
symanteclinux 浏览:878
程序员朋友化妆改造 浏览:493
应用被加密但不知道密码 浏览:586
百度云黑马android 浏览:773
java格式化long 浏览:893
汽车如何加密文档 浏览:625
公司理财第9版pdf 浏览:524