求助c语言写单片机按钮长按长按或者放开问题

你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。求助帖:关于单片机的C语言_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:135,811贴子:
求助帖:关于单片机的C语言收藏
达内单片机编程培训,开设Java/C++/PHP/安卓/iOS/linux/web/UI设计/营销/测试/ACC等课程;达内单片机编程培训,美国上市机构,先就业后付款,7万名企内部就业通道,30w学员实力..
就是有几个程序图,看不懂,请指教
楼主暴露了你的电话号码
登录百度帐号推荐应用与否,即可以知道按键是否被按下,从而做出相应的响;◎现实并非理想;在我们通过上面的按键检测原理得出上述的结论的时候;(原文件名:3.jpg);引用图片;而实际中,由于按键的弹片接触的时候,并不是一接触;们执行时间以us为计算单位的微控制器来说,;它太漫长了;(原文件名:4.jpg);引用图片;这样便存在这样一个问题;听起来确实不错,而且实际应用起来效果也还可
与否,即可以知道按键是否被按下,从而做出相应的响应。一切看起来很美好,是这样的吗?
◎现实并非理想
在我们通过上面的按键检测原理得出上述的结论的时候,其实忽略了一个重要的问题,那就是现实中按键按下时候的电平变化状态。我们的结论是基于理想的情况得出来的,就如同下面这幅按键按下时候对应电平变化的波形图一样:
(原文件名:3.jpg)
而实际中,由于按键的弹片接触的时候,并不是一接触就紧紧的闭合,它还存在一定的抖动,尽管这个时间非常的短暂,但是对于我
们执行时间以us为计算单位的微控制器来说,
它太漫长了。因而,实际的波形图应该如下面这幅示意图一样。
(原文件名:4.jpg)
这样便存在这样一个问题。假设我们的系统有这样功能需求:在检测到按键按下的时候,将某个I/O的状态取反。由于这种抖动的存在,使得我们的微控制器误以为是多次按键的按下,从而将某个I/O的状态不断取反,这并不是我们想要的效果,假如该I/O控制着系统中某个重要的执行的部件,那结果更不是我们所期待的。于是乎有人便提出了软件消除抖动的思想,道理很简单:抖动的时间长度是一定的,只要我们避开这段抖动时期,检测稳定的时候的电平不久可以了吗?
听起来确实不错,而且实际应用起来效果也还可以。于是,各种各样的书籍中,在提到按键检测的时候,总也不忘说道软件消抖。就像下面的伪代码所描述的一样。(假设按键按下时候,低电平有效)
If(0 == io_KeyEnter)
//如果有键按下了
Delayms(20) ;
//先延时20ms避开抖动时期
If(0 == io_KeyEnter)
//然后再检测,如果还是检测到有键按下
return KeyV
//是真的按下了,返回键值
return KEY_NULL
//是抖动,返回空的键值
while(0 == io_KeyEnter) ;
//等待按键释放
乍看上去,确实挺不错,实际中呢?在实际的系统中,一般是不允许这么样做的。为什么呢?首先,这里的Delayms(20) , 让微控制器
在这里白白等待了20 ms 的时间,啥也没干,考虑我在《学会释放CPU》一章中所提及的几点,这是不可取的。其次while(0 == io_KeyEnter) ;更是程序设计中的大忌(极少的特殊情况例外)。任何非极端情况下,都不要使用这样语句来堵塞微控制器的执行进程。原本是等待按键释放,结果CPU就一直死死的盯住该按键,其它事情都不管了,那其它事情不干了吗?你同意别人可不会同意 所以合理的分配好微控制的处理时间,是编写按键程序的基础。
◎消除抖动有必要吗?
的确,软件上的消抖确实可以保证按键的有效检测。但是,这种消抖确实有必要吗?有人提出了这样的疑问。抖动是按键按下的过程中产生的,如果按键没有按下,抖动会产生吗?如果没有按键按下,抖动也会在I/O上出现,我会立刻把这个微控制器锤了,永远不用这样一款微控制器。所以抖动的出现即意味着按键已经按下,尽管这个电平还没有稳定。所以只要我们检测到按键按下,即可以返回键值,问题的关键是,在你执行完其它任务的时候,再次执行我们的按键任务的时候,抖动过程还没有结束,这样便有可能造成重复检测。所以,如何在返回键值后,避免重复检测,或者在按键一按下就执行功能函数,当功能函数的执行时间小于抖动时间时候,如何避免再次执行功能函数,就成为我们要考虑的问题了。这是一个仁者见仁,智者见智的问
题,就留给大家去思考吧。所以消除抖动的目的是:防止按键一次按下,多次响应。
“从单片机初学者迈向单片机工程师”之KEY主题讨论
基于状态转移的独立按键程序设计
本章所描述的按键程序要达到的目的:检测按键按下,短按,长按,释放。即通过按键的返回值我们可以获取到如下的信息:按键按下(短按),按键长按,按键连_发,按键释放。不知道大家还记得小时候玩过的电子钟没有,就是外形类似于CALL 机(CALL 机,好像是很古老的东西了 )的那种,有一个小液晶屏,还有四个按键,功能是时钟,闹钟以及秒表。在调整时间的时候,短按+键每次调整值加一,长按的时候调整值连续增加。小的时候很好奇,这样的功能到底是如何实现的呢,今天就让我们来剖析它的原理吧。
状态在生活中随处可见。譬如早上的时候,闹钟把你叫醒了,这个时候,你便处于清醒的状态,马上你就穿衣起床洗漱吃早餐,这一系列事情就是你在这个状态做的事情。做完这些后你会去等车或者开车去上班,这个时候你就处在上班途中的状态?..中午下班时间到了,你就处于中午下班的状态,诸如此类等等,在每一个状态我们都会做一
三亿文库包含各类专业文献、外语学习资料、幼儿教育、小学教育、中学教育、应用写作文书、高等教育、各类资格考试、生活休闲娱乐、30单片机c语言编程经验等内容。 
 51单片机C语言编程100例_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 51单片机C语言编程100例_电子/电路_工程科技_专业资料。51单片机C语言...  单片机 C 语言编程实例前 言 INTEL公 司的 MCS-51单 片机是目前在我国应用...因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人...  单片机寄存器定义的头文件 unsigned char code str1[ ]=&Temperature is tested by DS18B20&;//C 语言中,字符串 是作为字符数组来处理的 unsigned char code ...  单片机和C语言编程 209页 2下载券 单片机的C语言编程 19页 1下载券喜欢...​!​C​语​言​版​本​。​。​。​。1、点亮 2、3、...  单片机 C 语言编程常用的运算符介绍在单片机 C 语言编程中,通常用到 30 个运算符,如表 1 ,其中算术运算符 13 个, 关系运算符 6 个,逻辑运算符 3 个,位...  单片机 C 语言编程方法天津理工大学一、需求分析此阶段是编写单片机程序的第一步骤, 应根据功能的要求, 确定所要使用的单片机资源, 如控制电机转速和舵机方向的 PWM...  C语言对单片机编程的学习心得_IT/计算机_专业资料。很多朋友都在学习单片机或是想学单片机, 但在看了一些资料后, 要么感到不知道学的什么, 要么找不到下一步的...  单片机c语言程序_计算机软件及应用_IT/计算机_专业资料。单片机实验第一讲如何开关控制发光管闪烁(无开关) 如何开关控制发光管闪烁(有开关) 第二讲模拟交通灯 驱动...  一个中断控制器;(IE,IP) 针对 AT89C52 单片机,头文件 AT89x52.h 给出了 SFR 特殊功能寄存器所有端口的定义。 C 语言编程基础: 1. 十六进制表示字节 0x5a...1566人阅读
非同一般(111)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:234230次
积分:2105
积分:2105
排名:第17234名
原创:542篇

我要回帖

更多关于 单片机长按开关机电路 的文章

 

随机推荐