关于蓝桥杯单片机 官方例程 矩阵按键 消抖原理 ‘s 解释

这篇具有很好参考价值的文章主要介绍了关于蓝桥杯单片机 官方例程 矩阵按键 消抖原理 ‘s 解释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于蓝桥杯单片机官方例程矩阵按键消抖原理解释

项目场景:

芯片:IAP15F2K60S
蓝桥杯原书41页官方例程


问题描述

最开始我以为这款开发板有硬件消抖,对于下面这部分代码一直当作固定格式写,最近回看,发现其中另有“玄机”。

......
  ucKey_Val = Key_Read();
  ucKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val);
  ucKey_Old = ucKey_Val;
......

原因分析:

这里默认大家看过并且会了 = = 之前的按键扫描例程了
众所周知,“ ^ ” 符号在C语言中是按位取 “ 异或 ” 的意思,并且,“ & ” 符号是按位取 “ 与 ”的意思。

这段代码的含义是获取扫描后的案件值然后进行消抖处理,我所截取的这一段代码是只保留了单边沿的。

详解:

首先,对于后面的异或,其作用到了ucKey_Old和ucKey_Val,其中ucKey_Old是上一次扫描按键获取的数值,包括获取到0,而ucKey_Val是这一次扫描按键获取的数值。如果二者不同,则会产生 “ 非零 ” 的结果,将代码改成如下。

......
  ucKey_Val = Key_Read();
  ucKey_Down = (ucKey_Old ^ ucKey_Val);
  ucKey_Old = ucKey_Val;
  
  if(ucKey_Down)
  {
       ......
  }
......

只要本次接收与上一次接收的按键值不同,ucKey_Down就会存储下“非零”的数值。回想一下,我们按键其实是有两个沿的,一次下降沿,一次上升沿。
更具体地针对官方例程来说,如果我按下4按键,那么他检测到的数值会出现两段变化,一次是ucKey_Val 从0到4的变化,另一次是其从4到0 的变化。
这样就会导致我的ucKey_Down在这两次变化过后都会有一次 “ 非零 ” 数值的出现,所以反应在我的输出上,就会将后面紧随的 if 代码段执行两次,这说明我们的 " ^ " 取异或只实现了部分的消抖功能,还需要保留单边沿,而非双边。

没错,我们的 “ & ” 取与符号就是实现的这个功能。我们分段讨论下0–4–0这个连续变化。

首先是 0–4,这段变化中,
我的 ucKey_Old = 0x00, 我的 ucKey_Val = 0x04;
因为这是从0到4的不同数值的变化,所以后面的取异或符号运算结束后一定是一个 “ 非零 ” 的量,并且结果一定是与 ucKey_Val 的数值相等!又加之与一个非零的 ucKey_Val 取与,那不就是 ucKey_Val 本身求与嘛!!!这就使得 ucKey_Down 最后的结果为 “ 非零 ” 的 ucKey_Val本身!!!这样解释了为什么后面会有

    switch(ucKey_Down)
    {
       ......
    }

的出现,原来我们仅凭借ucKey_Down的数值就可以判断我按下的是什么键。

-------------分隔符--------------

接下来是4–0这一段的变化,
我的 ucKey_Old = 0x40, 我的 ucKey_Val = 0x00;
之前说到如果是不同数值之间的变化必然会导致异或的结果为 “ 非零 ” 数值,所以这一段就很好明白了,我加上取与符号后,实现了ucKey_Val & “ 非零 ”,其中ucKey_Val为0,会将我的ucKey_Down,结果变成 0,这就实现了我取单边沿的效果。

总结
异或 “ ^ ” 是用来消抖的,只有扫描到不同的数值之后我才会发生变化。
取余 “ & ”是用来保留单边沿的,因为单单使用"^" 时,笨蛋机器不能判断是哪两个数值之间的变化,究竟是0–4还是4–0呢?当我加上 “ & ” 之后就可以消除一个沿。
PS:文中我们是以下降沿为例说明的,其实保留上升沿的话取个 “ ~ ” 就可以了,具体为啥,大家想想吧。文章来源地址https://www.toymoban.com/news/detail-401598.html

到了这里,关于关于蓝桥杯单片机 官方例程 矩阵按键 消抖原理 ‘s 解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下:   使用矩阵键盘时,要将跳线帽J5跳至KBD模式。   值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用。如果单片机为IAP15,则在上述原理图中,要将P36换成P42,P37换成P44。  

    2023年04月10日
    浏览(50)
  • 【蓝桥杯单片机】2023官方底层驱动代码【补充点】

    第14届蓝桥杯单片机设计,官方提供了新的底层驱动代码版本, 虽然依旧是onewire、iic、ds1302这三个源文件, 但是并没有给出头文件,且在此三个源文件中缺少了一些必要的管脚定义 下面是本人在往年真题中替换新的底层代码时总结出来的一些需要注意的地方 【关键点】引用

    2023年04月08日
    浏览(114)
  • 单片机——矩阵按键模块

    主要目的 学会按键扫描 1.延时函数 延时函数部分详见链接: 单片机控制一盏灯的亮与灭程序解释 这个程序里面的延时函数的目的是按键消抖。 2.按键扫描模块 这是本次实验的重点,将详细介绍。 先来观察矩阵按键模块的连接 总共8个口。 先实现关于列的扫描,设置初始值(

    2024年02月08日
    浏览(40)
  • 【51单片机】矩阵按键

    参考:普中 51 单片机开发攻略 main.c 只有第一个数码管量,并且按第几个键,就显示第几(0-F)。

    2024年01月21日
    浏览(61)
  • 51单片机 | 矩阵按键实验

      开发板上板载了一个 4*4 矩阵键盘。本节所要实现的功能是:通过开发板上的矩阵键盘控制静态数码管显示对应的键值 0-F 。   独立按键与单片机连接时,每一个按键都需要单片机的一个 I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的 I/O 口资源。

    2024年02月05日
    浏览(50)
  • 五、51单片机控制矩阵按键

    1.1、矩阵按键原理分析 这里矩阵按键为4*4的矩阵按键。 (1)矩阵按键横向和纵向分割。 (2)按键两端分别接不同的IO引脚。 (3)按键物理作用不变:按下按键两端接通,弹起按键两端断开。 1.2、矩阵按键的工作过程 JP4接P3端口,JP4_8接P3^7...JP4_1接P3^0。 (1)IO端口(P3)先输出0x0f,按键列

    2023年04月20日
    浏览(63)
  • 蓝桥杯单片机类按键代码讲解和考点探究(三行代码消抖讲解)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CON3中将1,2用跳线帽短接是矩阵键盘,可用范围为S4到S19。将2,3短接则是独立按键,可用范围是S4到S7. 按键原理讲解 单取一个按键,一端接到GND,一段接到单片机的IO口上(以下称I口,输入口)。当按

    2023年04月20日
    浏览(71)
  • 51单片机:数码管和矩阵按键

    目录 一:动态数码管模块 1:介绍  2:共阴极和共阳极 A:共阴极 B:共阳极 C:转化表  3:74HC138译码器 4:74HC138译码器控制动态数码管(位选) 5:数码管显示完整代码 6:74HC573锁存器 A:基本点 B:原理图介绍 c:74HC573控制数码管代码 二:矩阵按键模块 1:介绍 2:原理图  3:矩阵按键代码       

    2024年02月15日
    浏览(51)
  • 51单片机——数码管、按键、矩阵按键C语言入门编程

    目录 数码管: 1.静态数码管:第二位数码管显示0 2.动态数码管:每一位数码管依次显示对应位数 按键: 1.独立按键:按下按键对应LED亮灭 矩阵按键: 1.矩阵按键:按下的每个按键,数码管显示对应键码          数码管按段数可分为七段数码管和八段数码管,八段数码管

    2024年01月23日
    浏览(48)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包