【物联网技能竞赛】【ZigBee】CC2530按键检测入门笔记_职业技能大赛物联网zigbee

电路图

首先,要想通过按钮点亮LED灯,那就必须了解开发板上led灯和按钮所对应的引脚,最直接的方法就是看电路图(这边所使用的是物联网技能大赛对应的ZigBee开发板,若用其它板子得对引脚和代码进行更替):

如图可以看出led灯的引脚分别对应到:

D3P1_0
D4P1_1
D5P1_3
D6P1_4

按钮的引脚对应到:

SW2P0_1
SW1P1_2

寄存器设置

上一篇了解了2个重要的寄存器在这次案例中也会涉及得到,现在再来看看两个对于输入模式下重要的寄存器

P0INP 端口输入配置寄存器

位名称复位值操作描述
7:0MDP0[7:0]0x00R/W设置 P0_7 到 P0_0 端口的输入模式。 0:上拉/下拉(需要结合 P2INP 联合配置)。 1:三态。

P1INP 端口输入配置寄存器

位名称复位值操作描述
7:2MDP1[7:2]0x00R/W设置 P1_7 到 P1_2 端口的输入模式。 0:上拉/下拉(需要结合 P2INP 联合配置)。 1:三态。
1:0-00R0不使用

P2INP 端口输入配置寄存器

位名称复位值操作描述
7PDUP20R/WP2 端口所有引脚选择上拉或下拉。 0:上拉。                            1:下拉。
6PDUP10R/WP1端口所有引脚选择上拉或下拉。 0:上拉。                            1:下拉。
5PDUP00R/WP0 端口所有引脚选择上拉或下拉。 0:上拉。                            1:下拉。
4:0MDP2_[4:0]0x00R/W设置 P2_4 到 P2_0 端口的输入模式。 0:上拉/下拉。                   1:三态。

我们若想检测引脚的高低电平,需将其PxSEL端口功能寄存器设置成通用 I/O 功能,和将PxDIR 端口方向寄存器设置成输入,以及将对应的引脚设置成上下拉模式,最后根据电路图将其设置为上拉或者下拉

当电路为IO接GND时候,则为设置为上拉输入,提供默认电平为高电平。下降沿触发。

当电路为IO接VCC时候,则为设置为下拉输入,提供默认电平为低电平。上升沿触发。

  P0SEL &= ~0x02;//将 P0_1 设置成通用I/O
  P0DIR &= ~0x02;//将 P0_1 设置成输入方向
  P0INP &= ~0x02;//将 P0_1 设置成上拉/下拉
  P2INP &= ~0x20;//将 P0端口 设置成上拉
  
  P1SEL &= ~0x04;//将 P1_2 设置成通用I/O
  P1DIR &= ~0x04;//将 P1_2 设置成输入方向
  P1INP &= ~0x04;//将 P1_2 设置成上拉/下拉
  P2INP &= ~0x40;//将 P2端口 设置成上拉

按钮抖动原理及处理方法

机械按钮的触点闭合断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。按键的抖动对于人类来说是感觉不到的,但对单片机来说,则是完全可以感应到的,而且还是一个很“漫长”的过程,因为单片机处理的速度在**“微秒”级,而按键抖动的时间至少在“毫秒”**级。

如果在触点抖动期间检测按键的通断状态,则可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,从而引起误处理。因此,为了确保单片机对一次按键动作只作一次响应,就必须考虑如何消除按键抖动的影响。

在处理按键抖动的程序中,必须同时考虑消除闭合和断开两种情况下的抖动。所以,对于按键消抖的处理,必须按最差的情况来考虑。机械式按键的抖动次数、抖动时间、抖动波形都是随机的。不同类型的按键其最长抖动时间也有差别,抖动时间的长短和按键的机械特性有关,按键输出的信号的跳变时间(上升沿和下降沿)最大是在20ms左右。按键一次闭合最短的时间大概是120ms。按键消抖的关键是提取稳定的低电平(或高电平)状态,滤除按键稳定前后的抖动脉冲。

消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。按键的消抖,可用硬件软件两种方法。

硬件消抖

在键数较少时可用硬件方法消除键抖动。硬件消抖的典型做法是:采用R-S触发器或RC积分电路。

1. 双稳态消抖

​编辑icon-default.png?t=N7T8https://baike.baidu.com/pic/%E6%8C%89%E9%94%AE%E6%B6%88%E6%8A%96/1566537/0/c9fcc3cec3fdfc03efab96b1db3f8794a5c226e3?fr=lemma&fromModule=lemma_content-image

双稳态消抖即在按键输出端加R-S触发器或单稳态触发器构成消抖电路,如图所示,触发器一旦翻转,触点抖动对其不会产生任何影响。

2. 滤波消抖

​编辑

如图所示,利用RC积分电路可以吸收振荡脉冲的特点,正确选取适当的时间常数,便可消除按键抖动的影响。

软件消抖

当按键较多时,硬件方法将导致系统硬件电路设计复杂化,硬件消抖将无法胜任,这时常采用软件方法进行消抖。常用软件方法去抖,即检测出引脚触发沿后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后再一次检测引脚的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

软件消抖的基本原理是:在检测到有按键按下时,不是立即认定此键已被按下,而是执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍然保持闭合状态电平,若仍然保持,则确认该键真正被按下。

对于我们而言,当单片机的电路已经确定切不具备有硬件消抖的情况下,我们都采用软件消抖。

    if(判断按钮是否是被按下的电平状态)
    {
      延时10ms
      if(判断按钮是否是被按下的电平状态)
      {
        while(判断按钮是否还保持被按下的电平状态);
        延时10ms
        /*
          按钮触发处理事件

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值