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

向兵 杨述凯

摘 要:随着电子技术的发展,单片机的应用在教学及科技开发中越来越普遍,而针对单片机的开发环境而言,大多采用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级,电子信息工程技术专业专科在读,擅长单片机开发、程序设计。

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

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114084 人正在系统学习中 相关资源:凯歌软件安装管理器1.0-其它文档类资源-CSDN文库

来源:weixin_39946500

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月18日
下一篇 2021年4月18日

相关推荐