提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
对于调整LED的亮度,我们通常会使用PWM来调整亮度,但是有时候我们所使用的单片机又没有PWM的功能,而我们又只是为了调整一个LED或者数码管的亮度,也没必要去用定时器实现PWM来调整LED的亮度。所以我们可以使用一些简单的算法来模拟出来PWM的效果。
一、程序代码
1.调整一个LED的灰度
代码如下(示例):
void LED_HD()
{
uint a; //a:灰度值
for(a=0;a<100;a++) //亮的时间为100
{
LED1 = 1; //点亮第一个LED
}
for(a=0;a<150;a++) //灭的时间为150
{
LED1 = 0; //熄灭第一个LED
}
}
这里声明一个变量a,用来代表LED的灰度值,最大值为255代表LED的亮度为最大,两个for循环里a的值相加不能超过255(如果想要调整的亮度更加精细可以改为65535),按照比例来调整这两个的值,就可以模拟出PWM的效果。
2.调整两个LED的灰度并使其交替闪烁
代码如下(示例):
void LED_HD()
{
uint a,j; //a:灰度值 j:两组字循环时长
for(j=0; j<3500; j++) //循环3500次
{
for(a=0;a<100;a++) //亮的时间为100
{
LED1 = 1; //点亮第一个LED
}
for(a=0;a<150;a++) //灭的时间为150
{
LED1 = 0; //熄灭第一个LED
}
}
for(j=0; j<3500; j++) //循环3500次
{
for(a=0;a<150;a++) //亮的时间为100
{
LED2 = 1; //点亮第二个LED
}
for(a=0;a<150;a++) //灭的时间为150
{
LED2 = 0; //熄灭第二个LED
}
}
}
这里在原有程序的基础上,在增加一个变量j,用来循环点亮LED,点亮时间为设定值,可以通过调整j的值来改变点亮时间,用这种方式就可以实现两个LED循环点亮并且能独立调整每个LED的亮度。
总结
这里只是提供了一个简易的思路,也有很多缺点,不能和使用PWM调整LED亮度的效果相比,但是这个在一些只需要比较简单的功能(比如只是调整一个LED的亮度),没有特别要求的场合使用起来比较简单。使用这种思路调整一下也可以控制数码管的亮度。