迅维网

标题: 怎么用一个按键控制LED闪烁和亮灭 [打印本页]

作者: 葫芦娃668    时间: 2017-3-10 11:27
标题: 怎么用一个按键控制LED闪烁和亮灭
  今天说一个很简单的问题,但是对于初学单片机的朋友来说也许还是不会,今天我们就来说说这简单的问题。

  具体问题如下:怎么用一个按键控制小灯,按一次小灯不停闪烁,再按一次灭掉。问题很简单,但是我在论坛上看了好几楼的回复,都没有看到完整的答案。下面我们来分析下这个问题:1个小灯,其实就是LED灯;需要按键控制它的闪烁和灭,这样还需要一个按键;控制LED闪烁需要单片机来实现(问题提问者主要是要单片机程序)。按照上面的分析,我们画出图1的电路图(单片机部分省略)。


LED驱动和按键控制电路

  如图1所示,LED和R1组成了LED驱动电路,这里我们采用单片机拉电流的驱动方式,当单片机IO口(P1.0)输出高电平时,电流从单片机IO口输出,流过LED和电阻R1,最终流到电源地,从而LED发光。当单片机IO口(P1.0)输出低电平时,P1.0电平和电源地电平一样,没有电压差,就不会有电流流过LED,所以LED不会发光。也就是说只要我们通过程序控制单片机IO口P1.0口的电平就可以实现控制LED的亮灭,那我们控制IO的电平重复出现“高---低---高---低……”就可以实现LED闪烁了。今天的问题是用按键控制实现闪烁和灭。下面我就来说按键的事。

  图1中R2和S1组成按键电路,R2为上拉电阻,S1为我们真正的控制按键。R2的作用是给单片机IO口(P1.1)提供一个确定的状态,假如没有R2这个电阻,那在上电的瞬间或者是外接电磁干扰过大的时候,P1.1的状态可以会出现在高低电平上的跳变,这是我们不希望出现的。还有一点,假如没有R2这个电阻,在按键没有按下的情况下,IO(P1.1)是悬空的,这样P1.1的电平是不确定的。所以这个上拉电阻还是很有必要的。接下来说按键S1,如图1所示,当按键按下后,IO(P1.1)电平会被拉低为低电平,因为当按键按下后,P1.1直接通过按键接到电源地。当按键没有没按下时,IO(P1.1)电平被电阻R2上拉到高电平。这样一来,按键S1按下时,IO(P1.1)为低电平,按键S1没被按下时,IO(P1.1)为高电平,我们就可以读取IO(P1.1)的电平状态来识别按键是否被按下,从而控制LED的亮灭或者是闪烁。

  以上是电路原理,现在我们说说程序的原理。程序部分主要的难点在如何实现按键第一次按下去控制LED闪烁,第二次按下后LED熄灭。这里我们说到了按键第一次按下,第二次按下,这是我们人可以这样说,那我们程序怎么办呢,同样是要编程去记录按键按下的次数,当程序判断当前为为第一次按下按键,就去控制LED闪烁,程序判断当前为第二次按下按键后,就去执行LED灭的程序。这样就实现了题目里要实现的要求了。

  本文来自今日头条
  相关阅读:

  单片机实现的led流水灯电路
  http://www.chinafix.com/thread-908585-1-1.html

  无电解电容LED光引擎的优劣势分析
  http://www.chinafix.com/thread-743484-1-1.html

  led路灯电源设计电路图
  http://www.chinafix.com/thread-939529-1-1.html






作者: yanjindao    时间: 2017-3-10 11:56
维修不易,加分鼓励了
作者: バ幸福De右岸    时间: 2017-3-10 15:49
yanjindao 发表于 2017-3-10 11:56
维修不易,加分鼓励了

你加的分在哪里?怎么没有看见呢
作者: woku136    时间: 2017-3-10 22:27
バ幸福De右岸 发表于 2017-3-10 15:49
你加的分在哪里?怎么没有看见呢

你也是打酱油里 ,你没给他加分。
作者: mhw    时间: 2017-3-11 12:23
good,good.




欢迎光临 迅维网 (https://www.chinafix.com/) Powered by Discuz! X3.4