PWM波产生的方法及原理

2019-07-16 05:14发布

如休利用51单片机的来产生PWM波,用以控制led的亮度变化,在网上看过一些程序,有些地方不大明白,程序是这样的:
#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虽然有亮度的变化,不过在由暗变的过程中有一个突然的跳跃,就是亮度一下子就上来了,请教高手指点迷津


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
andrew0823
1楼-- · 2019-07-16 09:33
thanks
lovezjf234
2楼-- · 2019-07-16 11:13
上面两所提问的意思就是保持高低电平的时间,显然这个PWM代码写的不够精炼,增加调节的复杂度。在PWM这个周期保持不变的情况下,调节高低电平的时间(时间的增加稍微趋缓一点效果更明显),这样就能达到你的要求,就跟呼吸灯一样了!
oyl
3楼-- · 2019-07-16 13:48
 精彩回答 2  元偷偷看……
1051747376
4楼-- · 2019-07-16 17:11
lovezjf234 发表于 2012-7-14 13:07
上面两所提问的意思就是保持高低电平的时间,显然这个PWM代码写的不够精炼,增加调节的复杂度。在PWM这个周 ...

是保持高低电平的时间,不过为什么要 用这样的语句呢?count与PWM之间有什么关系吗?如果没有的话如何实现二极管的明暗的渐变过程呢?
wcjsxzjpcy888
5楼-- · 2019-07-16 19:20
mydepc3721
6楼-- · 2019-07-17 00:20
来 围观学习一下

一周热门 更多>