设计与开发

单片机控制8个led 如何使用单片机一个IO端口分别控制两个LED?

小编 2024-10-11 设计与开发 23 0

如何使用单片机一个IO端口分别控制两个LED?

今天在公众号“芯片之家 ”看到一篇推文, 介绍使用单片机的一个IO端口,分别控制两个发光二极管各自独立的点亮与熄灭[1] ,总共四个状态。为了控制两个LED的目的,需要应用到MCU的IO端口的四个工作状态:输出高电平、输出低电平、高阻状态以及输出连续对称方波这四种状态。

在下面的面包板上,演示了使用一条IO控制线控制l两个LED分别点亮和熄灭的四种状态。

▲ 一个个单片机IO端口分别控制两个LED

为了理解其中的工作原理,则需要熟悉LED的两个工作特性:

单向导电特性;导通阈值特性;

正如发光二极管名字所说,LED只能向二极管那样单向导电发光。如果施加电压极性反了,LED则不工作。

导通阈值特性是指,只要施加的正向电压超过一定阈值之后,LED才能够导通。这一点可以从下面这支红色LED的正向V-A特性曲线看出。

▲ 红色LED的V-A特性

上面曲线表明,只有当正向电压超过大约1.5V之后,电流才会出现快速增加。在此之前,正向导通电流很小。

不同颜色的LED由于所使用的半导体材料不同,导通阈值电压会有所区别。比如下面这支黄色LED的正向导通电压超过了1.7V。

▲ 黄色LED的V-A曲线

如果LED发射光谱中包括更短的光谱成分,则相应的导通会更高。下面的绿色和蓝色LED的正向导通电压的阈值都已经超过了2.5V了。

▲ 绿色LEDV-A特性曲线

▲ 蓝色LED的V-A曲线

将不同LED的V-A特性曲线绘制在一起,可以凸显出不同LED的阈值电压的差异。值得说明的是,当电压小于阈值电压的时候,LED并不是不导电,只是电流极小。比如在2.5V,虽然还没有超过蓝色LED的阈值电压,但在LED灯芯处还是能够隐约看到发光。

一旦电压超过阈值电压,LED正向导通电流便会迅速增加到1mA以上。之后虽然电流增加很快,但看起来,在正向导通电流2 ~ 10mA之内,LED都显示为点亮状态,亮度倒是看起来差不多。

▲ 不同颜色LED的伏安特性

合理的 应用LED的单向导电和导通阈值特性,便可以在一条单片机IO口的四种工作状态下,来控制两个LED的点亮和熄灭了。

比如利用LED管的单向导通特性,将两个LED正反向并联 在一起,分别连接在分压电阻中心和单片机的IO口上,就可以实现单个IO口控制两个LED的目标。在下图中,显示了在一个工作在5V电压下的单片机IO控制两个LED(红色,黄色)的四中状态。

▲ 两个LED正反并联连接在MCU的IO口与分压电阻中点

当IO口为高阻状态,两个LED都熄灭;当IO端口为高电平时,红色LED点亮;当IO端口为低电平的时候,黄色LED点亮;当IO输出方波信号时(通常要求频率大于100Hz),两个LED交替点亮,根据人眼色视觉暂留特性,看起来两个LED都点亮了。

下面动图显示了IO口的四种状态对应两个LED的点亮与熄灭。

▲ 对应两个LED四个状态的IO输出波形

上面的LED并联方案是利用了LED的单向导通特性。如果考虑到LED的阈值特性,这种方案就会受到一定限制。比如,控制的LED绿色或者蓝色时,由于它们的导通阈值电压超过了2.5V,因此绿色和蓝色LED就很难被点亮。

下面动图显示,绿色和蓝色LED只能发出微弱的光线。

▲ 对于两个LED四种状态的IO波形

如果当单片机和LED的供电电压为3.3V时,情况将会更加严重。比如在3.3V供电情况下,使用并联LED方案,对于红色的LED还可以勉强工作,但对于绿色和蓝色LED则无法点亮了。

▲ 对于两个LED四种状态的IO波形

在前面推文中则介绍了另外一种方案,即LED串联方案 ,可以解决蓝色和绿色LED控制问题。

下图显示了LED串联方案电路示意图:

▲ 两个LED串联控制方案

当IO端口为高阻时,由于两个LED的导通阈值电压之和大于电源电压(+5V),它们都不导通;当IO端口为低电平时;上面的绿色LED点亮;当IO端口为高电平时,下面的蓝色LED点亮;当输出高频方波信号时,两个LED都被点亮。

▲ 对应两个LED四种状态IO波形

串联LED控制模式只能应用于两个LED的电压加起来超过电路电源电压的情况。比如蓝色、绿色LED,工作在3.3V,5V电压下都是可以的。

如果将两个LED更换成红色(1.6V)和绿色(2.5V),使用串联模式,则只能应用在电源电压小于4.1V的情况下,比如3.3V的单片机电路中。如果在5V电路中,则会出现两个LED无法同时熄灭的情况。

下面就显示了一个红色,一个绿色LED工作在5V电源电压下,当IO为高阻时,它们实际上无法熄灭。

▲ 对应两个LED四种状态IO波形

在5V电压下,那么对于红色、绿色LED使用前面并联LED方案行不行呢?

通过实验会发现,也出现了问题。由于绿色LED在2.5V下无法点亮,因此并联方案也无法工作。如下图所示:

▲ 对应两个LED四种状态IO波形

那么问题来了,在5V电压下,该使用什么方案,才能够利用单片机一个IO口的四种模式,来分别控制一个绿色LED和一个红色LED的点亮和熄灭呢?就像下面这个动图里所示的那样。

▲ 对于两个LED四种状态的IO波形

如果并联LED和串联LED工作原理已经理解了,我想此时,你的脑子里已经有了答案了。如果你有了想法,就将答案写在后面的留言中吧。

用单片机DIY一个按键控制LED

学了单片机总想做些属于自己的东西,但有些时候不知道做些什么,其实这种现象对于每一个初学者都会有所体会,今天针对这一现象,对初学者进行一个学习引导,对于学过单片机之类的肯定不难,但对刚接触的初学者却能够起到一个很好地指引。

单片机一开始学就会接触到LED和按键,今天我们就把这两个功能给结合起来,DIY一个用按键控制LED,单片机选择51系列单片机。

51IC

先来看下按键原理图

独立按键原理图

流水灯原理图

先来分析下独立按键,四个按键有一个共同特点。那就是其中一个引脚是连一块的,然后直接连到GND上,而另一端接到单片机引脚上,当按键按下的时候,按键就会短路,也就是接到单片机引脚的那一根信号线直接接到GND上,我们只要检测这个端口有没有出现低电平就可以判断按键有没有按下,通过程序不断判断按键有没有按下,如果按下就执行需要执行的程序,否则继续等待。

注意:在使用按键的时候需要消抖,所谓消抖就是在按键按下之后延时一段时间,然后再来判断按键是否按下,目的为了减少外界的干扰还有按下按键或松开按键那一段时间内不是立马为高或为低电平,消抖能够使程序更稳定。

再来看一下LED流水灯,有8个LED灯,在控制方面原理都是一样,我们就以第一个灯为例,在LED中它们也有一端引脚是连在一起的不过这次是VCC连在一块,另一端接在单片机上,如果想要LED亮的话,根据电流方向,只要接在单片机的一端为低电平就可以实现这个效果,因此根据这一点就可以随便控制LED了。

再结合一下按键,如果按键按下,控制单片机让LED亮,再按一下就让LED灭,这就达成我们目的了,当然你也可以自己扩展一些功能,比如让流水灯流水,按下LED先闪烁,然后灭掉等等,可以展开想象的翅膀随意设计。

动图中从左到右四个按键功能依次为LED反亮、LED闪烁、LED亮、LED关。

注:文章中的原理图与所选择的硬件稍微有些差别,但不影响读者阅读与理解。

相关问答

单片机8个LED 灯随机闪烁怎么做?

方法:1:设定一个变量i,可以从0到3循环的变化2:检测一个经过消抖处理的按键,按一下,i+13:当i值为各个值时,执行相应的花样。流水灯参考程序#include...方...

单片机 用汇编语言编写用一个 控制 控制8个LED 灯亮?

ORG0000HLJMPMAINORG000BHLJMPT0ISRORG0030HMAIN:MOVTMOD,#01HMOVTH0,#HIGH(65536-50000)MOVTL0,#LOW(65536...

单片机 设计 8个led 灯同时闪烁的程序?

八个灯接在单片机的P1口(P0,P2,P3,P4都一样)while(1){delay(你想要延时的时间);P1=0xff;delay(你想要延时的时间);P1=0;}注意led最好加驱...

AT89C51 单片机 的P1口 控制8 LED 流水灯?

#include"reg51.h"//包含头文件#defineucharunsignedcharvoiddelay02s(void)//延时0.2s子程序...

单片机 求汇编语言设计一个彩灯控制系统,有4 个控制 开关,8盏 LED 灯?

对于这个问题处理起来是不难的,这是学习单片机常用的一个练习程序,比如我们用MCS-51来设计一个彩灯控制器,也俗称“跑马灯”。在硬件方面我们要焊接出一个单...

单片机 求汇编语言设计一个彩灯控制系统,有4 个控制 开关,8盏 LED 灯?

1、程序实现上应该不难,假设用3个8位变量来调节这三个灯,理想上可以得到256单色灰度效果。但通常能做到16等级灰度,也能看到一定效果。2、这三个PWM周期相同...

用C语言 控制 51 单片机 P2口的 8个LED 小灯,2468亮,1357不亮?

P2=0xaa;即可(因为0xaa=10101010),好久没看过了,应该差不多这样P2=0xaa;即可(因为0xaa=10101010),好久没看过了,应该差不多这样

怎样用 单片机控制 个LED 同时亮?

很简单。一个LED,正极接IO引脚,负极接地。即可实现:IO口输出1时,灯亮。另一个LED,正极接正电源,负极接IO引脚。即可实现:IO口输出0时,灯亮。注...

单片机 键盘显示电路设计的程序要求输入64个按键, 8个LED 显示?

用8*8的矩阵键盘组成64个按键,只需要16个IO口,8个LED需要8个IO口,所以选用STC89C51的单片机就够用了。用8*8的矩阵键盘组成64个按键,只需要16个IO口,8个LED需...

单片机控制 多组 LED 灯的编程技术对于新手来说好学吗?有哪些好的建议和需要注意的问题?

对于新手的话,51比较适合,首先得搞清楚单片机与外设是怎么链接的比如这里的单片机是如何与LED相连接的,51的P0端口好像是要上拉的,所以需要上拉的电阻,所谓...对...

猜你喜欢