这是一个 PWM 的仿真实例,在仿真时 对于LED灯的效果是看不出来的
也就是 可能 闪烁的速度 快慢而已,灯的亮度需要 用实际电路才可以,
如果在实际电路中 还是 闪烁,说明 PWM 的频率太低。
咱空比调节 首先确定你的控制周期比如1s,按照10级别可调,分为1-10 1级的意思是
亮100ms 暗900ms,(1s也就是1000ms),也就是占空比为10%,
2级,20%,亮200ms,暗800ms,
同理9级, 亮900ms,暗100ms;
10级,亮1000ms,暗0ms;
写出程序很简单,
点亮程序
while(1)
{
LED = ON;
_delay_ms( ON_ms);
LED = OFF;
_delay_ms(OFF_MS);
}
设置程序;
#define ADD 0
#define DEC 1
void tune_led( u08 add_or_dec )
{
if( add_or_dec == ADD )
{
ON_MS + = 100;//每加一次递进100ms,最高1000ms
if( ON_MS >=1000)
ON_MS =1000;
OFF_MS = 1000- ON_MS;
}
else
{
if( ON_MS >=100 )
{
ON_MS = ON_MS -100;
}
OFF_MS =1000-ON_MS;
}
,需要调节时,可以把此函数在按键处理或其他事件处理中调用
1000ms的周期只是一种举例,根据实际需要可以调节 根据显示的现实性,可以改到50-20ms左右,
防止产生闪烁,
如果改用单片机的硬件pwm 那就更加简单了
#include <reg52h>
#define uint unsigned int
#define uchar unsigned char
uchar count ,z;
sbit key_1 = P3^7;
sbit key_2 = P3^6;
sbit PWM = P2^0;
void key_control();
void init ();
void create_PWM(uchar);
void delay(uint);
void main ()
{
init ();
while(1);
{
key_control();
create_PWM(count);
}
}
void delay(uint z)
{
uint x,y;
for(x = z;x>0;x--)
for(y = 110;y>0;y--);
}
void init()
{
TMOD = 0x10;
TH1 = (65536-4608)/256;//50sm
TL1 = (65536-4608)%256;
TR1 = 1;
}
void create_PWM(uchar count)
{
static i;
if(TF1 == 1)
{
TF1 = 0;
TH1 = (65536-4608)/256;//50sm
TL1 = (65536-4608)%256;
i++;
if(i == 100) i=0;
if(i <= count) PWM = 1;
else PWM = 0;
}
}
void key_control()
{
if(key_1 ==0)
{
delay(10);
if(key_1 == 0)
{
count+= 5;
if(count >= 100)count = 0;
}
}
if(key_2 ==0)
{
delay(10);
if(key_2 ==0)
{
count-= 5;
if(count <= 0)count =100;
}
}
}
uchar pwm_dat1 = 0,pwm_dat2 = 128;
void PWM_change() interrupt 1
{
TH0 = 0xff;
TL0 = 0xa0;
pwm_dat1 = (pwm_dat1 + 1) % 255;
if(pwm_dat1 < pwm_dat2) PWM = 1;
else PWM = 0;
}
用几个变量表示按键的按下/松开状态,然后用定时器中断设置PWM的频率,例如要50hz的频率,那么定时器中断周期(PWM周期的一半)可以设置为10ms,在中断服务程序内根据按键的状态确定是否需要对PWM输出管脚进行翻转。改方法可以输出占空比为50%的PWM信号。
LED是英文 light emitting diode (发光二极管)的缩写,它的基本结构是一块电致发光的半导体材料芯片,用银胶或白胶固化到支架上,然后用银线或金线连接芯片和电路板,然后四周用环氧树脂密封,起到保护内部芯线的作用,最后安装外壳,所以 LED 灯的抗震性能好。运用领域涉及到手机、台灯、家电等日常家电和机械生产方面。
RGB-LED变化出64中不同的颜色,
----
每种颜色的LED,要有四种亮度。
三种颜色搭配,就有 64 种颜色了。
每种颜色的LED,要有四种亮度:不亮、1/3亮、2/3亮、全亮。
其实,并不难控制。
都用不上 PWM 控制器。
用一个定时器,每隔一毫秒中断一次,对三路输出,控制一下即可。
以上就是关于通过单片机计数脉冲产生pwm波来调节led灯亮度,为什么led灯一直在闪,电压大小一直在跳变,程序如下全部的内容,包括:通过单片机计数脉冲产生pwm波来调节led灯亮度,为什么led灯一直在闪,电压大小一直在跳变,程序如下、怎样用8051单片机实现LED灯光亮度的10级调节,每按一次,LED亮度增大一级。(PWM调光)请附上程序,谢谢、急求用51单片机(stc89c52)利用pwm控制led灯光亮度变化的c程序,电路图如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)