打印

一个延时程序的作用?

[复制链接]
6499|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a3711|  楼主 | 2012-6-10 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在书上看到一个简单的程序:按键控制继电器开合,继电器通电时灯泡来亮。

void main()
{
   P1=0xff;
   delay=1;//PNP三极管高电平截止,因为PNP三极管电流从基极流出,高电平时没有电流。
   while(1)
  {
   if (sw==0)//sw是按键,按键控制继电器的开合
      {

     while(sw==0);
//等待按键松开

delay=~delay;//按一次继电器开,再按一次继电器合上

delayms(20);//这里的延时程序有什么用?


  

  }
   }
用protues仿真时,把delayms(20);去掉也没有看出什么不同,那为什么书上要加上这一句?
}

相关帖子

沙发
JC.Wang| | 2012-6-10 14:57 | 只看该作者
你要明白,继电器是机械装置,不会像单片机那么快的,不过这里的20ms也没多大作用。建议你用硬件学习,proteus很多东西都不深入,跟硬件相差很远,用一用你就知道了

使用特权

评论回复
板凳
a3711|  楼主 | 2012-6-10 17:03 | 只看该作者
谢谢,我有51的板子。刚刚在 翻看仿真资料的时候看到这一程序就好奇了。这么说这个延时程序就是为了等待继电器的反应速度了。谢谢你~!

使用特权

评论回复
地板
joyme| | 2012-6-11 10:25 | 只看该作者
延时对按键松开时的防抖有一点作用,程序没有按键按下做防抖所以不实用

使用特权

评论回复
5
shuai37zhang| | 2012-6-11 15:28 | 只看该作者
建议楼主学习软件的同时还是要了解些硬件知识,不然写程序运行时逻辑会出现问题

使用特权

评论回复
6
a3711|  楼主 | 2012-6-11 23:52 | 只看该作者
谢谢5楼的建议。:loveliness:

使用特权

评论回复
7
a3711|  楼主 | 2012-6-11 23:53 | 只看该作者
4# joyme 不是等待继电器的反应吗?延迟加在这里显然不是为了防抖。

使用特权

评论回复
8
bbskate| | 2012-6-12 00:31 | 只看该作者
继电器的原理是电磁的原理 那么就以为这不像cpu执行每一条指令那样运行的时间很短很短 而是需要一定时间 那么久需要一个延时

使用特权

评论回复
9
joyme| | 2012-6-16 21:37 | 只看该作者
多看看书是对的,不过还是要自己多动脑筋

1、等继电器动作干什么?继电器的动作时间是ms级别(一般也就5-10ms)的,如果忽略按键抖动的话,你能在几或十几ms里按两次键吗?

2、按键防抖的原理是什么?连续两次扫描按键之间的间隔要大于一般的抖动时间6-10ms,否则可能把一次按键检测为多次。这个延时20ms就是防止过快的调用第二次扫键。

3、多学点怎么尽可能多的释放CPU资源才是学习单片机基本,比如用状态机扫描按键,一般按键防抖用连续多少次扫到相同的值来判断按键的状态,当然将扫描间隔加大也是可以的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

29

帖子

0

粉丝