问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

51单片机实验笔记:多色LED的基本控制

创作时间:
作者:
@小白创作中心

51单片机实验笔记:多色LED的基本控制

引用
CSDN
1.
https://blog.csdn.net/m0_46500149/article/details/132459913

目录

  • 前言
  • 硬件介绍
  • 双色LED
  • 三色LED
  • 七彩自动闪烁LED
  • 接线图
  • 面包板介绍
  • 直插电阻介绍
  • 双色LED实际接线图
  • 三色LED实际接线图
  • 七彩自动闪烁LED实际接线图
  • 软件实现
    1. 双色LED交替闪烁
    1. 三色LED灯交替闪烁
  • 总结

前言

本节内容主要介绍多色LED的显示原理及驱动方式。本节完整工程文件已上传GitHub,欢迎下载交流!

硬件介绍

双色LED

双色LED可以发出2种颜色的光,一般为红、绿两种颜色。其本质是将两个LED封装在一起。

直插式双色LED由三个引脚组成,中间的引脚为公共端口,有共阴极和共阳极两种。可以通过观察中间引脚的电极片来判断极性,如果是大电极,则为负极,即为共阴极。

三色LED

与双色LED类似,三色LED将三个LED封装在一起,通过控制相应引脚可以发出红、绿、蓝三种颜色的灯光。

直插式三色LED共有四个引脚组成,共阴极,分别为GND、R、G、B,通过PWM调制三基色可以获得不同颜色的光。贴片5050全彩LED共有六个引脚组成,其中5050指封装大小为5mm×5mm,每对引脚单独控制一个LED,原理类似。

七彩自动闪烁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一样,只要上电就自动执行闪烁程序,效果由内置芯片决定。

软件实现

采用模块化编程方式,给出通用文件delay.c

#include "delay.h"
/**
 **  @brief   延时函数(10us)
 **  @param   t:0~65535,循环一次约10us
 **  @retval  无
 **/
void delay_10us(u16 t){
    while(t--);
}
/**
 **  @brief   延时函数(ms)
 **  @param   t:0~65535,单位ms
 **  @retval  无
 **/
void delay_ms(u16 t){
    while(t--){
        delay_10us(100);
    }
}

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_
#include <REGX52.H>
#define false 0
#define true 1
typedef unsigned char u8;
typedef unsigned int u16;
void delay_10us(u16);
void delay_ms(u16);
#endif

1. 双色LED交替闪烁

#include "delay.h"
#define DOUBLE_LED_PORT P2
sbit Green_LED = DOUBLE_LED_PORT^0;
sbit Red_LED = DOUBLE_LED_PORT^1;
int main(void){
    while(1){
        Green_LED = 0;
        Red_LED = 1;
        delay_ms(500);
        Green_LED = 1;
        Red_LED = 0;
        delay_ms(500);
    }
}

实验现象为红绿灯交替闪烁。

2. 三色LED灯交替闪烁

#include "delay.h"
#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;
int main(void){
    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的控制原理与单色类似,只是对其硬件进行了组合封装。当然,这也得益于硬件技术的提升。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号