51单片机之LED篇(一)

本文所用的单片机是普中51A2套件

一、LED介绍

1.1 结构

LED灯,即发光二极管,是一种固态的半导体器件,其核心是一个PN结。LED灯的结构相对简单,主要由PN结芯片、电极和光学系统组成。

ffb64283bdf0480aa0f336b3385e83c3.png

1.2 发光原理

LED灯的发光原理基于半导体材料的特性。当给LED的PN结加上正向电压时,由于PN结的内建电场作用,N区的电子会被推向P区,在P区与空穴复合,同时P区的空穴也会被推向N区,在N区与电子复合。这一过程中,电子和空穴的复合会释放出能量,这些能量以光子的形式发出,从而实现了LED的发光。

具体来说,LED的发光过程包括以下几个步骤:

  1. 载流子注入:在外加电压的作用下,电子从N区注入P区,空穴从P区注入N区。
  2. 载流子复合:注入的电子和空穴在PN结附近复合,形成电子-空穴对。
  3. 能量释放:电子-空穴对复合时,会以光子的形式释放出能量,这些光子的波长决定了LED发出的光的颜色。

1.3 封装

LED灯的封装方式多种多样,常见的封装方式包括DIP(双列直插式封装)、SMD(表面贴装式封装)和COB(板上芯片封装)等。这些封装方式各有特点,适用于不同的应用场景。

  1. DIP封装:DIP封装是最早的LED封装方式之一,其特点是将LED芯片封装在一个具有两个长引脚的塑料或金属外壳中,可以直接插入到电路板的孔洞中。DIP封装的LED灯具有安装方便、成本低廉等优点,但体积较大,不适合高密度集成。
  2. SMD封装:SMD封装是一种表面贴装式封装方式,其特点是将LED芯片直接封装在一个微小的金属或塑料基板上,并通过引脚或焊盘与电路板连接。SMD封装的LED灯具有体积小、重量轻、亮度高、散热性能好等优点,广泛应用于手机、显示器、照明等领域。
  3. COB封装:COB封装是一种将多个LED芯片直接封装在一个小型电路板上的封装方式。与DIP和SMD封装相比,COB封装具有更高的发光效率和更好的光均匀性,适用于大功率照明和背光显示等领域。

 1.4 使用

下面是LED的电路符号,左边是阳极,右边是阴极。

d9e84d77f3dc4a47889373a4bfadb162.png

 LED具有单向导电性,阳极接正电压,阴极接负电压或接地时LED点亮。

二、原理图

下图为开发板上LED模块的电路图,如图所示,8个LED灯阳极接入VCC,阴极各接入一个电阻,此处的电阻起到的作用是限流,防止通路上的电流过大而烧毁LED,在电阻的右端,分别连接P20-P27接口。

e82a3946881a48c69dd1c0ff0711c069.png

07057f0364cf4ff28298522711a48cc3.png

         在原理图的单片机核心部分,我们可以看到上述的P20-P27端,与单片机的P2.0-P2.7连接。

         通过分析电路硬件图以及原理图,我们得到相应的操作,要是LED(以D1为例)发亮只要使得阴极处于低电平就能够点亮。那么现在的目标就是使P2.0端口输出低电平即可,将问题转化为控制单片机引脚输出高低电平的问题。

        在单片机中,CPU通过控制相关寄存器,寄存器通过驱动器来控制某个端子的高低电平,这也就是说,我们只要配置相应的CPU寄存器(P2寄存器)来实现我们的功能。

        P2寄存器是一个八位寄存器,每个位分别控制一个LED灯,当某个位为0时(低电平)相应的LED灯就会发亮。也就是说当P2寄存器为1111 1110时D1点亮。

 

三、点亮任意一个LED灯

3.1 代码示例

以点亮D1为例,只需使P2寄存器的为1111 1110即可,用十六进制表示为0xfe

#include <REGX52.H>

void main()
{
	P2=0xfe;//1111 1110
	while(1)
	{
		
    }
}

3.2 实验现象 

d242ea5dc0834db69e2ceba61440bc5f.jpeg

四、LED灯闪烁

4.1 代码示例

使D1亮点一会儿,熄灭一会儿。其中的Delay500ms是通过STC-ISP设置相关参数得来的

f9ebee55fece4f02ab2a646d98490778.png

#include <REGX52.H>
#include<INTRINS.H>

void Delay500ms(void)	//@12.000MHz
{
	unsigned char data i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1)
	{
		P2=0xfe;  //1111 1110
		Delay500ms();  //ÑÓʱ500ms
		P2=0xff;     //1111 1111
		Delay500ms();  
  }
}

4.2 实验现象 

led闪烁

五、流水灯

5.1 for循环实现

实现左到右依次点亮

#include <REGX52.H>
#include<INTRINS.H>
typedef unsigned char u8;

void Delay500ms(void)	//@12.000MHz
{
	u8 i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	u8 i=0;
	while(1)
	{
		for(i=0;i<8;i++)
		{
			P2=~(0x01<<i);  //i=0,D1亮
			Delay500ms();
    }
  }
}

其中值得注意的是这行代码P2=~(0x01<<i) 由于<<会使移丢的低位补0,所以采用~,可以自己例举一下就能明白了 

流水灯1

 

5.2 左移和右移库函数实现

用左移能够实现从左到右依次点亮,右移函数能从右到左点亮

流水灯2

 

 

 

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值