首页 > 其他分享 >51单片机之LED篇(一)

51单片机之LED篇(一)

时间:2024-08-02 13:52:45浏览次数:14  
标签:P2 封装 -- void 51 单片机 while 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 实验现象 

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="C1Ca9zOe-1722353772907" src="https://live.csdn.net/v/embed/413847"></iframe>

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,所以采用~,可以自己例举一下就能明白了 

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="XfSojJSe-1722353793536" src="https://live.csdn.net/v/embed/413849"></iframe>

流水灯1

5.2 左移和右移库函数实现

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

#include <REGX52.H>
#include <INTRINS.H>
typedef 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;
	P2=0xfe;
	Delay500ms();
	while(1)
	{
		for(i=0;i<7;i++)
		{
			P2=_crol_(P2,1);
			Delay500ms();
    }
		for(i=0;i<7;i++)
		{
			P2=_cror_(P2,1);
			Delay500ms();
    }
  }
}
<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="kurJz9rL-1722353810164" src="https://live.csdn.net/v/embed/413850"></iframe>

流水灯2

标签:P2,封装,--,void,51,单片机,while,LED
From: https://blog.csdn.net/2302_77770138/article/details/140783018

相关文章

  • 基于STC8H4K64TL单片机的串口1打印RTC(即实时时钟)功能调试
    基于STC8H4K64TL单片机的串口1打印RTC(即实时时钟)功能调试STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O......
  • 基于STC8H系列单片机的串口1打印片内EEPROM擦除数据、读取数据、写入数据功能调试
    基于STC8H系列单片机的串口1打印片内EEPROM擦除数据、读取数据、写入数据功能调试STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚......
  • 华大单片机HC32F003/005在做软件硬件设计时请注意以下事项
    1.P00(RESET)引脚可以复用为带上拉的GPIO数字输入端口,外围的复位电路建议保留。2.P27(SWDIO)与P31(SWCLK)上电时默认为SWD调试功能,未复用为GPIO端口时一直是高平;可以设置成GPIO,但是设置成GPIO后就不能SWD下载了,只能用串口下载。3.P35(TX)与P36(RX)为芯片UART烧写端口(不可改变),当......
  • 独“数”一帜 双证加冕!TeleDB亮相可信数据库发展大会
    近日,2024可信数据库发展大会在北京召开,主题为“自主、创新、引领”。大会重磅发布多项中国信通院及中国通信标准化协会大数据技术标准推进委员会(CCSATC601)在数据库领域最新研究和实践成果。一众数据库领域的专家、学者、创业者汇聚一堂,围绕金融、电信、能源与政务领域的数据库应......
  • 代码随想录day16 || 513 树左下角值,112 路径之和,116 中序后序遍历构造二叉树
    切片传递问题question:什么情况下传递切片,什么情况下传递切片指针,为什么有时候会修改原始副本,有时候又不会呢?typesli[]intfuncmain(){ slice:=[]int{1} fmt.Printf("slice:%p\n",slice) change1(slice) fmt.Println("=================================") s2:=......
  • P10511 方差 题解
    【题目简述】定义一个长度为\(n\)的序列\(a\)的方差为:\(s^2=\frac{1}{n}\sum_{i=1}^n(a_i-\overline{a})^2\)。\(\sum\)为累加求和符号,\(\overline{a}\)为序列\(a\)的平均数。给定\(m\)个形如\([l,r,b]\)的组合,表示\(a_l,a_{l+1},\ldots,a_r\)为\(b\)。给定......
  • 基于51单片机的校园教室核酸检测人流统计非接触测温防接触系统
      1、前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉小洪学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,小洪学长分享优质毕业设计项目,今天要分享......
  • 使用keil进行51单片机的开发
    首先下载Keil打开https://www.keil.com/download/product/选择C51进行下载:表格里面的信息瞎填就完了。然后点击submit然后下载安装即可激活Keil右键桌面的keil软件图标,使用管理员权限打开。点击左上角的file->licensemanagement复制CID打开注册机软件选择c51和pro......
  • Sealed with a kiss
    Thoughwe'vegottosaygoodbye即使我们必须说再见Forthesummer在这个夏天Darling,Ipromiseyouthis亲爱的,我向你承诺I'llsendyouallmylove我会对你付出我所有的爱Everydayinaletter在每天的一封信里Sealedwithakiss以吻封缄Yes,it'sgonnabe......
  • FPGA开发——按键控制LED的实现
    一、概述在上一篇文章中我们学习了按键的相关消抖及其使用,在这篇文章当中我们就针对通过按键实现LED的控制。1、按键原理图2、基本框架通过我们前面编写的按键消抖的文件和LED文件将按键和LED两个模块进行交互,从而达到按键控制LED的目的。 二、代码编写1、首先是按键......