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

单片机扫描按键

发布时间:2024-11-30 06:04:53

单片机4*4键盘扫描程序

//你要看得懂代码首先你要了解按键扫描的原理
//k_input是Px8个IO(x=0/1/2/3)
ucharkeys()
{
uchari,j,k_in,k_out=0xfe,jm;
k_input=0x0f//步骤1:Px7~Px4为低,Px3~Px0为高
if(k_input!=0x0f)//步骤2:是否有按键按下,如果有,Px的值将发生变化
yanshi(10);//软件消除抖动
else
return16;//如果没有,返回空键值

for(jm=0;jm<4;jm++)//扫描是哪个按键按下
{
k_input=k_out;//步骤3:从Px0这一列开始扫描
k_int=k_input;//这里应该是k_in
j=0x01;
for(i=0;i<4;i++)//步骤4:逐个扫描这一列上面的4个按键
{
if(~(k_in>>4)&j)//如果有按键按下,返回被按下的按键值
return(jm*4+i);
j=_crol_(j,1);//如果没有按键按下,依次扫描这一列的其他按键
}
k_out=crol_(k_out,1);//步骤5:移位,依次扫描另一列,直到检测到按键按下
}
return16;//如果没有扫描到按键,认为是误触发,返回空键值
}

② 单片机什么是用键值的方式解决按键扫描问题,简单解说下 单解说下

左边的图,每个按键对应于一个IO口,按下按键时相应的IO口被拉到低电平,其IO寄存器位回读为“0”。因此根据回读到的哪个寄存器位为0就能知道哪个键被按下。这种方式适用于规模较小的键盘。
右边的图是常见的行列扫描接法。当单个行扫描管脚拉低后,回读列扫描管脚的状态,即可知道该行有哪几个按键被按下。逐一拉低各个行扫描管脚并回读列管脚状态,即可获得整个矩阵键盘的按键状态。这种方式适用于规模较大的键盘,有效节省珍贵的IO口。

③ 单片机行列式键盘扫描原理

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

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

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

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

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

(3)单片机扫描按键扩展阅读

单片机学习方法

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个。

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

阅读全文

与单片机扫描按键相关的资料

热点内容
苹果手机头条app怎么没有tv 浏览:563
电脑qq文件夹怎么发不出去 浏览:613
解压小游戏测试钻石剑的硬度 浏览:962
java结束函数 浏览:622
打开远程桌面的命令 浏览:836
树莓派如何搭建mqtt服务器 浏览:587
怎么加密w8文件 浏览:609
linuxprogram 浏览:708
php接口编程思想 浏览:92
如何下载电话软件app 浏览:906
java命令行解析 浏览:572
云服务器白嫖 浏览:917
程序员小清新 浏览:989
编译器地址8字节对齐 浏览:464
三菱plc编程win1064 浏览:258
高中英语单词pdf 浏览:425
编译原理词法分析常见问题 浏览:197
车小艺app怎么更新 浏览:77
手机app被管控如何移除 浏览:753
51单片机温湿度检测 浏览:575