PWM波产生的方法及原理
#include<reg52.h>
unsigned char cycle,pwm;
sbit led=P1^0;
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
bit flag;
TMOD=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
IE=0x82;
TR0=1;
cycle=10;
while(!flag)
{
delay(200000);
pwm++;
if(pwm==10)
flag=1;
}
while(flag)
{
delay(200000);
pwm--;
if(pwm==0)
flag=0;
}
}
void tim()interrupt 1
{
unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
count++;
if(count==pwm)////此处是什么意思呢?
{
led=1;
}
if(count==10)
{
count=0;
if(pwm!=0)///此处又是什么意思呢?
led=0;
}
}
感觉这个程序不是太好,因为烧到单片机观察到led虽然有亮度的变化,不过在由暗变的过程中有一个突然的跳跃,就是亮度一下子就上来了,请教高手指点迷津
thanks
上面两所提问的意思就是保持高低电平的时间,显然这个PWM代码写的不够精炼,增加调节的复杂度。在PWM这个周期保持不变的情况下,调节高低电平的时间(时间的增加稍微趋缓一点效果更明显),这样就能达到你的要求,就跟呼吸灯一样了!
建议小编先学习C语言。这个程序很基础啊。
是保持高低电平的时间,不过为什么要 用这样的语句呢?count与PWM之间有什么关系吗?如果没有的话如何实现二极管的明暗的渐变过程呢?
来 围观学习一下
我也不懂那个
很基础的呀
if(count==pwm)////此处是什么意思呢?这个循环中低电平时长从1累加到count(周期),下面一个也是。
突然的跳跃是因为时间调的不准,试试我改的吧。
#include<reg52.h>
unsigned char count,i;
sbit led=P1^0;
void delay(unsigned int i)
{
while(--i);
}
void main()
{
bit flag;
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
IE=0x82;
TR0=1;
count=100;
while(!flag)
{
delay(200000);
i++;
if(i==100)
flag=1;
}
while(flag)
{
delay(200000);
i--;
if(i==0)
flag=0;
}
}
void tim()interrupt 1
{
unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
count++;
if(count==i)////此处是什么意思呢?
{
led=1;
}
if(count==100)
{
count=0;
if(i!=0)///此处又是什么意思呢?
led=0;
}
}
鄙人认为你可以把CYCLE的值给DELAY(),PWM无非就是高电平和低电平的时间比例逐渐在变化,那么比如P1.0=1,DALAY(CYCLE),然后把CYCLE放到循环里面,每一次减一,初值6000,感觉效果不错的
学习了学习了学习了
写的太乱,没看懂
学习了,尽管不是很懂