淘先锋技术网

首页 1 2 3 4 5 6 7

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

对于调整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的亮度),没有特别要求的场合使用起来比较简单。使用这种思路调整一下也可以控制数码管的亮度。