单片机消抖c语言程序,基于单片机定时器软件消抖C51程序研究

本文介绍了如何利用51单片机的定时器进行全局时间记录,实现按键消抖。通过在每次中断后更新全局时间变量,避免了传统延时函数对程序效率的影响,提高了处理器在处理多个任务时的工作效率。在按键状态识别及消抖过程中,能准确判断按键的正常按下和松开,适于教学及科技开发中的单片机应用。
摘要由CSDN通过智能技术生成

向兵 杨述凯

摘 要:随着电子技术的发展,单片机的应用在教学及科技开发中越来越普遍,而针对单片机的开发环境而言,大多采用C51语法进行设计。按键的使用在大多数硬件设计里相当频繁,而按键的干扰处理可以使用硬件消抖,也可使用软件消抖。这两种方法可根据总体设计需求而选择,以高效的方式处理所有任务。本文采用51单片机的其中一个定时器作为全局时钟来定位处理任务,以不影响、不打断其他正常工作的前提为标准,可大大提高处理器工作效率。

关键词:单片机;按键;消抖;定时器

一、软件消抖现状

通常,我们会在程序中自定义一段延时程序命名为类似于delayms(unsigned int i)格式,然后在程序处理过程中判断按键状态达到要求后调用此函数来进行消抖。此方法在程序运行时,一旦按键状态符合,需要进行延时等待二次判断,任务较小的情况下能够达到预期要求,若处理器任務较多,使用delayms函数进行延时会极大降低程序处理效率,且总体效果不佳。本文介绍的消抖方式是利用单片机定时器记录全局时间,在每一次进入中断后时钟变量加1,在主要任务处理时循环判断按键状态变化时间,来达到类似于分时操作的效果。

二、程序初始化步骤

首先认为系统上电后按键状态为高电平1,定义一个位变量:bit key_last_state=1,用来存储程序运行过程中按键最后保持的状态。我们将按键接在单片机P2.0引脚上,用变量key_current_state来表示P2.0引脚的电平,故定义:sbit key_current_state,此变量是由按键按下或松开之后的真实状态变化。其次定义全局时钟变量,将每一次进入中断后总体时间变化量保存在其中,故有:unsigned int globle_time=0。本文中采用51单片机定时器0工作方式1产生1ms的时间间隔,即每1ms进入一次中断服务程序。最后,定义按键变化时保存的临时时间变量,故有:unsigned int key_last_time = 0。

至此,程序进入主函数后,首先应设置好定时器的工作模式及其方式,并赋予初始值。随后配置好定时器0中断,启动定时器计时。

三、按键状态识别及消抖

六、小结

本文采用单片机定时器作为时间基准,将全局时间保存在变量globle_time中,作为时间记录值,消抖过程中可分时进行其他任务的操作,这样,无需消耗多余的等待时间而降低程序效率。在消抖后进行当前按键状态判断时,可辨别出按键正常按下及松开两种情况,分别做相应的程序处理及外围控制。

参考文献:

[1] 乔之勇等.单片机应用系统设计项目化教程[M].北京:电子工业出版社.2014.9

[2] 王静霞.单片机基础与应用[M].高等教育出版社.2016.3

[3]赵勇等.单片机原理与接口技术[M].电子科技大学出版社.2016.12

[4] 陈希球等.单片机应用.高等教育出版社[M].2017.4

作者简介:

向兵(1990.10~),男,汉,四川南充人,助教,硕士研究生,从事单片机原理与应用、电子产品分析与制作等课程研究及项目开发。

杨述凯(1998.10~),男,汉,四川巴中人,绵阳职业技术学院信息工程系2017级,电子信息工程技术专业专科在读,擅长单片机开发、程序设计。

课题项目:绵阳职业技术学院,校级精品在线开放课程-《电子产品分析与 制作》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值