通过单片机计数脉冲产生pwm波来调节led灯亮度,为什么led灯一直在闪,电压大小一直在跳变,程序如下

通过单片机计数脉冲产生pwm波来调节led灯亮度,为什么led灯一直在闪,电压大小一直在跳变,程序如下,第1张

这是一个 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程序,电路图如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9418554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存