一、LED灯了解
1.LED灯简介
LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
发光原理:LED内有一定电流通过时可以将电能转化成为光能。
2.LED的分类
(1)分类原理
LED的最小单元是发光二极管。发光二极管是区分正负极的,正向导通,反向截止。共阴极就是发光二极管的负极连接在一起,共阳极就是发光二极管的正极连接在一起。
(2)区别
耗能不一样。共阳极二极管的公共端接在高电平,需要高电平时时刻刻处在工作状态;而共阴极二极管公共端接低(GND),只需指定二极管工作时给某个二极管高电平即可,有效降低了功耗,对长时间工作LED来言有效降低了屏热。
线路复杂程度不同。一般在实际工程中共阴极二极管比共阳极二极管的线路复杂,共阳极不需要那么多的高电平线路驱动。
二、使用单片机控制LED闪烁(详细代码展示)
1.点亮一个LED灯
//点亮一个LED灯
void LED1()
{
//定义一个循环变量unsigned char j;
//设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
HC138_C=1;
HC138_B=0;
HC138_A=0;
//点亮第一个灯
for(j=0;j<3;j++)
{
//使P0端口输出低电平P0=0xFE;
//延时函数
delay(600000);
}
}
2.八个LED灯同时闪烁
//八个LED灯同时闪烁
void LED2()
{
//定义一个循环变量unsigned char j;
//设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
HC138_C=1;
HC138_B=0;
HC138_A=0;//使用for循环,实现同时闪烁三次
for(j=0;j<3;j++)
{
//同时点亮P0=0x00;
delay(60000);
delay(60000);//同时熄灭
P0=0xff;
delay(60000);
delay(60000);
}}
3.跑马灯
//跑马灯
void LED3()
{
unsigned char j=1;
//设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
HC138_C=1;
HC138_B=0;
HC138_A=0;//从左边向右逐渐点亮
for(j=1;j<=8;j++)
{
P0=0xff << j;
delay(60000);
delay(60000);
}//从左边向右逐渐熄灭
for(j=1;j<=8;j++)
{
P0=~(0xff << j);
delay(60000);
delay(60000);
}
}
4.流水灯
//流水灯
void LED4()
{
unsigned char j,i;//设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
HC138_C=1;
HC138_B=0;
HC138_A=0;
i=0xfe;
delay(60000);
delay(60000);//从左边向右依次点亮后熄灭
for(j=1;j<=8;j++)
{
P0=0xff << j;
P0=P0|i;
i=i<<1;
i=i+1;
delay(60000);
delay(60000);//灯传递到最右边后退出循环
if(P0==0xff)
{
break;
}
}
}
5.呼吸灯
//呼吸灯专属的延时函数
void LEDdelay(unsigned int t)
{
while(t--);
}//呼吸灯
void LED5()
{
unsigned char j;
//设置HC138译码器,使得Y4端输出低电平,4用二进制表示为:100
HC138_C=1;
HC138_B=0;
HC138_A=0;
// 呼吸灯逐渐变亮
for(j=0;j<600;j++)
{
P0=0x00;
LEDdelay(j);
P0=0xff;
LEDdelay(600-j);
}
// 呼吸灯逐渐变暗
for(j=600;j>0;j--)
{
P0=0x00;
LEDdelay(j);
P0=0xff;
LEDdelay(600-j);
}
}
6.主函数
//头文件的引用
#include "reg52.h"
//定义HC138译码器对应连接的端口
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;//解决蜂鸣器乱响的问题(目前不需要明白具体原理,之后会学到)
void InitSystem()
{
HC138_C=1;
HC138_B=0;
HC138_A=1;
P0=0x00;
}//设置一个延时程序
void delay(unsigned int t)
{
while(t--);
while(t--);
}//主函数
void main()
{
InitSystem();
while(1)
{
LED1();//可选择}
}