设计与开发

按键 c语言 单片机 详解单片机的按键检测与控制

小编 2024-10-08 设计与开发 23 0

详解单片机的按键检测与控制

按键在单片机控制系统中起到人机交互的作用,通过按键可以输入数据、命令和各种参数,按键侧键测处理是单片机系统设计和开发中一个重要的内容,关系到整个系统的交互性能和稳定性。按键处理形式在单片机系统中有两种形式:直接按键和矩阵编码键盘,下面分别对这两种按键检测电路的特点及编程思路和方法进行分析和介绍。

按键抖动问题产生的原因及解决方法

按键的抖动问题是指按键的触点在闭合和断开瞬间由于接触情况不稳定,从而导致电压信号的抖动现象(由按键的机械特性造成,不可避免)。图8-1所示为一次按键的抖动过程,在按键的前沿和后沿都会有5~10ms的抖动。

图8-1 按键抖动示意图

对于时钟是微秒级的单片机而言,键盘的抖动有可能造成单片机对一次按键的多次处理。为了提高系统的稳定性,我们必须采用有效的方式消除抖动。

去除抖动可以采用硬件方式和软件方式。硬件方式一般是在按键与单片机的输入通道上安装硬件去抖电路(如RS触发器)。软件方式的实现方法是:当查询到电路中有按键按下时,先不进行处理,而是先执行10~20ms的延时程序,延时程序结束后,再次查询按键状态,若此时按键仍为按下状态,则视为按键被按下。

按键检测电路及应用

1. 独立式按键

独立式键盘相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他按键的工作状态,CPU可直接读取该I/O线的高/低电平状态。这种按键硬件、软件结构简单,判键速度快,使用方便,但占用I/O口线较多,适用于按键数量较少的系统中。

独立连接式键盘连接如图8-2所示。当没有键被按下时,所有的数据输入线均为高电平;当任意一个按键被按下时,与之相连的数据输入线将变为低电平;通过相应指令,可以判断是否有键被按下。

图8-2 独立式键盘接口设计

【例8-1】 利用单片机的P1.0~P1.34个I/O口检测4个按键的触发信息,以实现不同功能的控制。

硬件电路参见图8-2所示,C51参考程序如下:

2. 矩阵式按键

在单片机系统中,当按键数量较多时,为了减少IO口的使用,通常将按键排列成矩阵型式。例如下例中的16个按键,被排列成了如图8-3所示的4X4矩阵方式。该矩阵式键盘由4根行线和4根列线组成,每个行线和列线的交叉点是一个按键。

【例8-2】 将矩阵式键盘的按键值通过数码管显示出来。

电路连接如图8-3所示(电源和震荡电路未标出)。

图8-3 矩阵式键盘按键显示电路图

如何判断被按下的键值呢?

分析如下:

根据下面的电路图,如果已知P1.0端口被置为低电平“0”,那么当按键K0被按下时,可以肯定P1.4端口的电平也变为了低电平“0”。基于这个原理,总结矩阵键盘识别按键的步骤如下:

a)首先判断是否有按键被按下

本例中矩阵键盘中P1端口低4位连接的是列线,高4位连接的是行线。将全部行线置为低电平“0”,全部列线置为高电平“1”。然后检测列线的状态。只要有一根列线的电平为低,则表示有按键被按下。否则没有按键按下。

b)按键消抖

当判断到有按键被按下后,还要进行消抖处理,以确认真正有按键被按下。

c)按键识别

当确认有键被按下后,采用逐行扫描的方法来确定是哪一个按键被按下。先扫描第一行,即将第一行输出低电平“0”,然后读取列值,那一列出现低电平“0”,则说明该列与第一行交叉处的按键被按下。如果读入的列值全部为"1",说明与第一行连接的按键均没有被按下。那么接下来开始扫描第二行,以此类推。直到完成全部行线的扫描。

C51程序如下:

矩阵式键盘与I/O接口应用

【例8-3】 四位数字密码锁

四位数字密码锁功能:通过键盘输入密码,当输入密码与内置密码相同时,继电器动作,表示密码锁解开。为了简化功能,该密码锁只使用12个键(即4x3键盘),其中S1~S9为1~9数字键,S10为0数字键,S11为“*”键作为确认键使用,而S12为“#”键作为复位键,键盘接口电路如图8-4所示,键值布局如表8-1所示。

图8-4 行列式键盘电路连接图

表8-1 键盘布局表

单片机上电时,数码管显示“0000”,此时输入数字,数码管将显示按键值,数字逐个向左递增,四次输入完毕,四个数码管显示输入的数,此时按“*”号按键将启动比较,若输入数字与内设密码相同,继电器动作。如不同,则系统复位等待重新输入密码。当按“#”号键,系统复位,数码管显示“0000”。

在上面键扫描程序基础上增加的源程序如下:

想从事单片机工作,C语言要达到什么水平?

今天我来聊聊从事单片机开发工作,C语言要达到什么样的水平。

我用自己从入门到找到工作的经历来说或许更贴切点。

我是2011年毕业,非本专业,读的是电气工程,看到师兄那苦逼样决定转行。

实习期比较自由,我就开始自学,从入门到转行成功,前后花了4个月左右。

刚开始,我也很焦虑….

自己能不能学得会?学到什么程度能去找工作?

万一花了几个月时间学习,找不到工作怎么办?

过程虽然很曲折,不过最终还是转行成功了,还记录当时学习的一些笔记。

只要你肯坚持下去,有兵来将挡,水来土掩的魄力,结果都不会太差

最怕就是你碰到问题就退缩,就质疑,这样还不如别开始。

我是从51单片机开始学习的,在某宝上买了一块51单片机开发板。

开发板一般都有配套视频教程,跟着教程一步步走就可以。

我是基础电路、C语言、51单片机一起学得,一边学一边在开发板上看功能效果。

技术学习过程太枯燥了,如果得不到及时的成果反馈,很难坚持下去。

我建议大家也一定要这样去学习。

学完开发板的所有内容,每天坚持学几个小时,大概需要1个多月的时间。

这个时候你会碰到一个瓶颈期,就是单片机每个外设资源都会用了,但是还是无法独立完成一个项目的代码。

这是正常的,因为开发板的定位是让你学习单片机这个工具怎么用而已。

那个时候我只是把开发板都学完了,然后在开发板上做了电子时钟的功能就去找工作了。

前前后后差不多给20家公司拒绝过,那年找工作都是到人才市场,当场面试的。

他们主要拒绝我的还是没有项目经验,其次就是学历、非本专业。

后面,我又在某宝上买了智能小车的套件,自己组装把这个项目重头到位做了一遍。

明显感觉自己的能力提升了,比如说实现功能的思路,和编程水平。

最重要的是多了一个可以吹的项目。

后面再去面试,总共面试了5家公司都不到就成功了。

但是我的经历放在现在,可能比较难。

主要现在优秀的学生太多了,我们无际单片机编程挺多学员都是大学生,最小的大一都有。

大一就有学习的意识,如果你的知识水平还保留10年前的,肯定不行。

单片机开发这个职位,不是说非要你c语言达到一个高级的水平,一般你能修改别人的代码也可以。

刚进去公司也不会让你马上研发新项目,而是维护老项目,改改代码升级功能。

所以,我认为啊,你c语言水平能达到改别人代码水平,暂时也就够了。

主要还是要多做项目,做它3-5个项目,把单片机常用的外设都能应用到实际场景了,一般的产品你也能独立做出来了。

光靠书本和教程的内容,你c语言的水平想提升到高级是很难的。

我是怎么提升的?

从工作中,多看老工程师写的代码,多看一些权威的固件库、协议栈。

前期先模仿他们的写法,比如说他们的按键检测功能怎么写,LCD菜单怎么写。

模仿的时候,思考一下他们这样写有什么优势,有什么不好的地方?

从实际项目中来,到实际项目中去,反复实践。

慢慢地,你对编程的思维和经验都会有一个质的飞越。

我也是这样过来的,自己在19年还录制了一个程序架构的视频,算是对自己的一个总结。

这个架构可以直接移植到产品使用,继承了很多常用的功能,比如说任务管理,队列、LED特效、按键检测。

目前也是开源,找无际单片机编程拿就行,全网同名的。

到某个阶段,你或许就能感悟,任何编程语言都是工具而已。

最核心的还是去实现某种功能的思维是否最优。

相关问答

通过 按键 来控制 单片机 的制冷和加热?

通过按键来控制单片机可实现LCD1602显示当前温度,可通过按键设置温度上下限温度超过限值制冷或制热,并通过蜂鸣器。报警STC89C52单片机为核心控制器,加上其...

单片机 独立 按键 控制流水灯的 C语言 程序怎么写?

首先选择一款单片机学习。推荐使用51单片机:简单好用资料多。网上随便找一套入门视频教程就行了。如果c语言不会的话,先学c语言。如果c语言已经入门了,就可...

请高手用AT89C51 单片机 C语言 设计一个小灯控制电路,实现利...

C51讨论回答(4)ORG00HAJMPMAINMAIN:MOVR0,#3MAIN1:MOVP2,#0FHACALLD2SMOVP2,#0FFHACALLD2SDJ...

求用 C 写一个61 单片机 8位单独 按键 程序,每个键控制一个发光二...

请大神帮我查一下序列号DNPNC01ZFR9V型号MF407CH/A605浏览4回答请大神帮我查一下序列号DNPNC01ZFR9V型号MF407cH/A230浏览4回答u盘格式过,以前...

单片机 三个 按键 独立控制三个led灯汇编 语言 ?

51单片机的IO口接按键,实现外部触发(外部中断,高低电平,上下降沿),触发后再通过IO控制LED的开关即可。51单片机的IO口接按键,实现外部触发(外部中断,高低电平...

51 单片机 定时闹铃( c语言 ) - ivguNtz1qo 的回答 - 懂得

我来2113发一个C语言51单片机时钟程序,希望能帮到你5261/*程序功能:带定时4102闹铃时钟*//*----------------------------------------------...

单片机 的独立键盘有什么用?

很多的嵌入式或者单片机系统中,一般都需要向嵌入式或者单片机系统输入信息的外设,以及嵌入式或者单片机向外输出信息的外设我们常见的显示屏,数码管等就是嵌...

单片机 一键长按与短按 按键 实现的 c 程序有问题,实在不知道是哪里有问题,请帮助修改一下,谢谢?

这……也太乱了吧?你能从这一大堆的逻辑中理出头绪来,我真佩服死你了。你这长按一处理,后面短按马上也生效了,长按跟没有一样。既然都用上定时器了,就别del...

51 单片机 定时闹铃( c语言 ) - R6OWXQ1Id 的回答 - 懂得

我来发一个C语言51单片机2113时钟程序,希望5261能帮到你/*程序功能:带定时闹4102铃时钟*//*----------------------------------------------...

求51 单片机 的P2口 按键 8个,P0口led8个,对应控制它的开或关,谢谢。要 C语言 ?

sbitP0^1=led1;sbitP0^2=led2;sbitP0^3=led3;sbitP0^4=led4;sbitP0^5=led5;sbitP0^6=led6...

猜你喜欢