用单片机DIY一个按键控制LED
学了单片机总想做些属于自己的东西,但有些时候不知道做些什么,其实这种现象对于每一个初学者都会有所体会,今天针对这一现象,对初学者进行一个学习引导,对于学过单片机之类的肯定不难,但对刚接触的初学者却能够起到一个很好地指引。
单片机一开始学就会接触到LED和按键,今天我们就把这两个功能给结合起来,DIY一个用按键控制LED,单片机选择51系列单片机。
51IC
先来看下按键原理图
独立按键原理图
流水灯原理图
先来分析下独立按键,四个按键有一个共同特点。那就是其中一个引脚是连一块的,然后直接连到GND上,而另一端接到单片机引脚上,当按键按下的时候,按键就会短路,也就是接到单片机引脚的那一根信号线直接接到GND上,我们只要检测这个端口有没有出现低电平就可以判断按键有没有按下,通过程序不断判断按键有没有按下,如果按下就执行需要执行的程序,否则继续等待。
注意:在使用按键的时候需要消抖,所谓消抖就是在按键按下之后延时一段时间,然后再来判断按键是否按下,目的为了减少外界的干扰还有按下按键或松开按键那一段时间内不是立马为高或为低电平,消抖能够使程序更稳定。
再来看一下LED流水灯,有8个LED灯,在控制方面原理都是一样,我们就以第一个灯为例,在LED中它们也有一端引脚是连在一起的不过这次是VCC连在一块,另一端接在单片机上,如果想要LED亮的话,根据电流方向,只要接在单片机的一端为低电平就可以实现这个效果,因此根据这一点就可以随便控制LED了。
再结合一下按键,如果按键按下,控制单片机让LED亮,再按一下就让LED灭,这就达成我们目的了,当然你也可以自己扩展一些功能,比如让流水灯流水,按下LED先闪烁,然后灭掉等等,可以展开想象的翅膀随意设计。
动图中从左到右四个按键功能依次为LED反亮、LED闪烁、LED亮、LED关。
注:文章中的原理图与所选择的硬件稍微有些差别,但不影响读者阅读与理解。
单片机常用电路3-按键检测、LED驱动电路
在单片机入门学习中,最简单、最常见的两种入门元器件大概就是按键和LED了,围绕按键和LED可以基本上把单片机的功能学很多,例如按键可以用来学习单片机的端口输入功能、端口外部中断功能、定时/计数器的计数功能等等;而LED可以用来学习单片机的端口输出功能,定时/计数器的定时功能、PWM功能,位操作功能,电压比较器功能,以及单片机多种操作控制、流程指示等功能。
现在我们就来简单了解一下按键检测和LED驱动电路。
1、按键检测电路
图1是按键检测电路。该电路图包含两种电路:
图1 按键检测电路
一种是连接按键的单片机端口在按键未按下时,处于低电平状态,当按键按下后,单片机端口变为高电平,也就是说,当单片机端口检测到端口电平由低电平变为高电平后,可以判断为按键按下。
另一种是连接按键的单片机端口在按键未按下时,处于高电平状态,当按键按下后,单片机端口变为低电平,也就是说,当单片机端口检测到端口电平由高电平变为低电平后,可以判断为按键按下。
这种按键检测电路的缺点是没有防抖动功能,所以要实现消抖功能,必须通过单片机软件编程实现。
另外,电路中的电阻的作用是为了保护端口,避免电源直接连到单片机端口导致的烧毁端口情况发生。
2、带消抖功能的按键检测电路
图2是带消抖功能的按键检测电路,同样的,带消抖功能的按键检测电路也分为按键平时处于高电平还是低电平两种。我们以按键未按下时处于高电平,按下后处于低电平为例来了解一下电路原理。
图2 硬件消抖电路
当按键断开时,电源电压通过电阻对电容充电,电容上的电压与电源电压相等,当按键按下时,由于按键内阻很小,电容通过按键迅速放电,按键两端电压迅速降到接近0V,单片机输入端为低电平,在按键按下时,由于抖动导致按键会短时断开,电源电压经电阻对电容充电,由于电阻的阻值较大,短时间内电容充电量很少,所以电容两端电压基本不变,单片机输入端的电平也基本保持不变,从而保证了按键抖动时仍可以使单片机输入端保持稳定的低电平信号。
这种硬件消抖电路需要根据实际情况选择R和C的值,具体请参考我在头条里的文章《基于proteus的51单片机开发实例(7)--按键的检测》。
3、简单的LED驱动电路
图3是一种简单的LED驱动电路。这两个电路一个是LED发光时,电流经过LED流到单片机端口,俗称“灌电流”驱动LED,另一种是LED发光时,电流经过单片机端口流到地,俗称“拉电流”驱动LED。
图3 LED驱动电路
这种电路的缺点是:单片机的驱动能力有限,一般单片机端口驱动电流能力在10mA以下,并且单片机总的驱动电流一般不超过100mA。所以当单片机电路中电路模块较多时,可能会导致驱动能力不足,因此这种方式只适合在学习和实验时,不适合用在单片机产品中。
4、通用LED驱动电路
图4,图5是常用的LED驱动电路。在这两个电路中,单片机端口实际上相当于开关的功能,当单片机输出高(或者低)电平时,LED点亮(或者熄灭);当单片机输出低(或者高)电平时,LED熄灭(或者点亮),驱动LED发光所需的电流由三极管提供,单片机端口只负责控制三极管的导通或者截止就可以了。
图4 LED驱动电路1
图5 LED驱动电路2
5、LED驱动芯片
现在有很多专用的LED驱动芯片,可以直接驱动多路LED,至于LED驱动芯片的电路,每种芯片有各自特点,这里就不多说了。
相关问答
51 单片机 关于单独 按键控制LED 灯-ZOL问答刚看你程序,你上电按住就可以了,是你while(1)卡住了按键的扫描了楼上程序是错的。用到标志位才行。楼上写的程序。是第一个按键按下,不放,按第二个键,不放...
at89c51 按键控制led 的哪变化?按键控制AT89C51板上LED灯的亮灭状态。当按键未被按下时,GPIO端口输出低电平,P1^0输出高电平,导致LED灯不亮;当按键被按下时,其GPIO端口的值变为1(高电平)...
单片机 三个 按键 独立 控制 三个 led 灯汇编语言?51单片机的IO口接按键,实现外部触发(外部中断,高低电平,上下降沿),触发后再通过IO控制LED的开关即可。51单片机的IO口接按键,实现外部触发(外部中断,高低电平...
51 单片机 用1个 按键 点亮 LED 灯,另1个 按键 关?//假设按键输入P1.0,P1.1,LED控制P2.0,都是低电平有效#include"reg51.h"sbitKEY0=P1^0;关灯按键sbitKEY1=P1^1;开灯按键sb...
求一个51 单片机 的程序:一个 按键控制led 灯闪烁,就是按一下灯闪,再按灯就灭了?LEDBITP1.0KEYBITP1.1ORG0000HLJMPMAINORG0030HMAIN:CLR00HMAIN1:JBKEY,LOOPJNBKEY,$CPL00H...
51 单片机 怎么用一个 按键 和一个定时器来模拟PWM 控制 一个 LED 灯...用按键调整占空比,20级可调控制led灯的亮度等级.#include"my51.h"#include"timer0.h"#definegradin...
单片机 怎么从矩阵键盘中提取一个 按键 来实现“按一下键切换一个 LED 灯亮”?可以啊,可以根据按键时间的长短,和高低电平来实现。比如,长按1s为高电平是一个功能,长按2s是另一个功能。步骤为:先读取某个io口的值,若为高电平(if按...可...
求51 单片机 的P2口 按键 8个,P0口 led 8个,对应 控制 它的开或关,谢谢。要C语言?sbitP2^0=key0;sbitP2^1=key1;sbitP2^2=key2;sbitP2^3=key3;sbitP2^4=key4;sbitP2^5=key5...
20 单片机 79f3212触摸开关 控制led 亮灭怎么写程序?是代表led灯亮或者灭的一个变量。当你按下开关后,s1==0,就执行led=!led这条语句。led=!led的意思就是取反的意思,即原来led灯亮的话执行...led应该是一个变...
假设 单片机 的p1口连接2个 led ,p2连接2个的对地的 按键 ,当某个按钮按下时相应的 LED 点亮。根?上网上找个单片机的最小系统,之后P1.0和P1.1口分别接一个LED灯,之后接地。P2口一样,接两个按键,,在程序中,做个条件语句。如果P2口接按键的两个口为0。P1.1...