目录
前言
本节内容我们学习了解一些多色LED的显示原理及驱动方式。
本节涉及到的封装源文件可在《模块功能封装汇总》中找到。
本节完整工程文件已上传GitHub,仓库地址,欢迎下载交流!
硬件介绍
双色LED
可以发出2种颜色的LED,一般为红、绿两种颜色。本质是将两个LED封装在一起。
![]() | ![]() | ![]() |
直插式的双色LED由三个引脚组成,中间的引脚为公共端口,有共阴极和共阳极两种。可以观察中间引脚的电极片,如果是大电极,则为负极,即为共阴极。
三色LED
与双色LED类似,三色LED将三个LED封装在一起,控制相应引脚即可发出红、绿、蓝三种颜色的灯光。
![]() | ![]() |
直插式三色LED共有四个引脚组成,共阴极,分别为GND
、R
、G
、B
,通过PWM
调制三基色可以获得不同颜色的光。
贴片5050全彩LED共有六个引脚组成,其中5050
指封装大小为5mm
×
\times
× 5mm,每对引脚单独控制一个LED,原理类似。
七彩自动闪烁LED
共2个引脚,外观与单色LED一致,但实际上电后可以自动转换7种颜色。每一个小小的灯里都内置芯片,成本贵于普通LED,但优点是控制方便,稳定。
根据闪动频率可以分为慢闪和快闪两种。一般工作电压为2~3V之间,需要加限流电阻防止烧坏。
接线图
由于开发板上并没有板载上述LED,我们需要买到散件后,和开发板进行连接。
面包板介绍
在展示实际接线图之前,我想先介绍一个重要的伙伴——面包板。
面包板的作用是:帮助我们快速搭建电路,免焊接,从而便捷地验证我们的想法。
- 面包板两侧分别由蓝红两列竖线组成,所对应的孔位代表电源的正负极(红
+
蓝-
)。每列是等电位的,列与列之间是不相通的。 - 面包板中间由两个大列组成,两个大列之间不互通。这个列与电源列正好相反,它们每排是电气连接的,而不同排之间不互通。
我们一般借助跳线来实现导线的作用,通过一个电源模块提供稳定的5V
或3.3V
电源。
直插电阻介绍
同样的,我们需要使用一个直插电阻作为限流电阻。
这是常用的金属膜电阻(Metal Film Resistor
),利用真空沉积技术在陶瓷棒上形成一层镍铬合金镀膜,然后在镀膜上加工出螺旋沟槽来精确控制电阻。具备性能好,精度高,温度特性好,稳定性强等特点。
色环解析
电阻的色环一般用于描述阻值大小和精度。常用颜色为:黑(0
)、棕(1
)、红(2
)、橙(3
)、黄(4
)、绿(5
)、蓝(6
)、紫(7
)、灰(8
)、白(9
)、金(误差值)、银(误差值)
色环电阻有四环和五环两种。以五环电阻为例,第一色环至第三色环表示阻值的三位数字;第四色环表示以10
为底数的指数;第五条色环表示误差值。
一般前四环间隔较小,第五环间隔较大,从而可以判断色环顺序。亦可以通过找到金银环来确定第五环,从而判断色环顺序。
双色LED实际接线图
![]() | ![]() |
其中,双色LED的共阳极端串联了一个200Ω的电阻,并通过跳线与单片机的5V
输出端相连。红色和绿色的阴极分别接P2.0
和P2.1
。
三色LED实际接线图
![]() | ![]() |
需要注意,直插式三色LED模块已经板载了限流电阻150Ω,我们无需再另外接电阻。而贴片式三色LED模块必须外接电阻防止烧坏。
由于是共阴极接法,通过跳线与单片机的GND
相连。红色、绿色和蓝色的阳极分别接P2.0
、P2.1
和P2.2
。
七彩自动闪烁LED实际接线图
![]() | ![]() |
七彩自动闪烁LED与普通LED一样,需要接对七彩自动闪烁LED,并且接七彩自动闪烁LED。不同的是,它只要上电后自动执行闪烁程序,效果由内置芯片决定。
软件实现
双色LED交替闪烁
#include "delay.h"
/**
** @brief 双色灯闪烁
** @author QIU
** @data 2023.09.22
**/
/*-------------------------------------------------------------------*/
#define DOUBLE_LED_PORT P2
sbit Green_LED = DOUBLE_LED_PORT^0;
sbit Red_LED = DOUBLE_LED_PORT^1;
void main(){
while(1){
Green_LED = 0;
Red_LED = 1;
delay_ms(500);
Green_LED = 1;
Red_LED = 0;
delay_ms(500);
}
}
实验现象为红绿灯交替闪烁。
三色LED灯交替闪烁
#include "delay.h"
/**
** @brief 三色灯闪烁
** @author QIU
** @data 2023.09.23
**/
/*-------------------------------------------------------------------*/
#define THREE_LED_PORT P2
// 也可以单独赋值
sbit Green_LED = THREE_LED_PORT^0;
sbit Red_LED = THREE_LED_PORT^1;
sbit Blue_LED = THREE_LED_PORT^2;
void main(){
u8 val = 0x01, i = 0;
while(1){
// 先清零
THREE_LED_PORT = 0x00;
// 再赋1
THREE_LED_PORT |= (val<<i);
i += 1;
if(i >= 3){
i = 0;
}
delay_ms(500);
}
}
实验现象为红绿蓝灯交替闪烁。
![]() | ![]() |
总结
多色LED的控制原理与单色类似,只是对其硬件进行了组合封装。当然,这也得益于硬件技术的提升。