中文名:发光二极管
外文名:Light Emitting Diode
简称:LED
用途:照明、广告灯、指引灯、屏幕
1. 点亮LED灯
LED模块的引脚连接在MCU上的P20~p27引脚上,CPU通过控制寄存器来控制硬件电路,当我们想点亮一个LED灯时,只需要把对应的寄存器置低电平就好。
#include <REGX52.H>
void main()
{
P2 = 0xFE;//1111 1110
}
单片机由于晶振在工作时不会停止运行程序的,当所有程序执行完后会从头执行该程序,相当于一直在开关该LED灯,但这显然这不是我们想要的,所以需要让他停下来,所以可以加个循环
#include <REGX52.H>
void main()
{
while(1)
{
P2 = 0xFE;//1111 1110
}
}
2.LED灯闪烁
#include <REGX52.H>
void main()
{
while(1)
{
P2 = 0xFE;
P2 = 0xFF;
}
}
上面,完成了LED的点亮,现在我们需要使LED进行闪烁,理论上我们只需要将LED等打开在关闭就好了,可是发现LED还是常亮,原因在与单片机的运行速度使MHZ,每秒运行100万次,所以肉眼上观察不到LED灯明显的变化,所以此时需要加上延时函数来使得我们能明显观察到LED等的变化。
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2 = 0xEF;
Delay500ms();
P2 = 0xFF;
Delay500ms();
}
}
3.LED流水灯
#include <REGX52.H>
#include <INTRINS.H>
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
P2 = 0xFF;
while(1)
{
if(P2 == 0)
{
P2 = 0xFF;
}
P2 = P2<<1;
Delay100ms();
}
}