LED PWM调光C程序

模拟技术

2295人已加入

描述

  LED光源的单纯控制需要设计的初始阶段就要非常小心。光源越复杂,就越要用PWM调光。这就需要系统设计者谨慎思考LED驱动拓扑。Buck调节器为PWM调光提供了很多优势。如果调光频率必须很高或者信号转换率必须很快,或者二者都需要,那么Buck调节器就是最好的选择。

  LED的调光控制 传统上,LED的调光是利用一个DC信号或滤液PWM对LED中的正向电流进行调节来完成的。减小LED电流将起到调节LED光输出强度的作用,然而,正向电流的变化也会改变LED的彩色,因为LED的色度会随着电流的变化而变化。

  许多应用(例如汽车和LCD TV背光照明)都不能允许LED发生任何的色彩漂移。在这些应用中,由于周围环境中存在不同的光线变化,而且人眼对于光强的微小变化都很敏感,因此宽范围调光是必需的。通过施加一个PWM信号来控制LED亮度的做法允许不改变彩色的情况下完成LED的调光。

  LED PWM调光C程序

  #include《reg52.h》 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  sbit LED1 = P2^0;

  sbit LED = P2^1; //定义LED灯,通过LED显示调光效果

  sbit LED2 = P2^2;

  unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms

  unsigned char PWM_ON ;//定义高电平时间

  /******************************************************************/

  /* 延时函数 &nbs/******************************************************************/

  void delay(unsigned int cnt)

  {

  while(--cnt);

  }

  /******************************************************************/

  /* 主函数 */

  /******************************************************************/

  void main()

  {

  bit Flag;

  TMOD |=0x01; //定时器设置 0.1ms in 12M crystal

  TH0=(65536-100)/256;

  TL0=(65536-100)%256; //定时0.1mS

  IE= 0x82; //打开中断

  TR0=1;

  CYCLE = 50; // 时间可以调整 这个是10调整 8位PWM就是256步

  while(!Flag)

  {

  delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果

  PWM_ON++; //这个使用较长延时,以便能看清楚变化过程

  if(PWM_ON == CYCLE)

  { //这个里可以添加其他程序 如到最亮时候控制设备

  Flag=1;

  }

  }

  while(Flag) //亮度递减 同上,是个相反的过程

  {

  delay(20000); //延迟时间为20000*0.4=8000us

  PWM_ON--;

  if(PWM_ON == 0)

  {

  Flag=0;

  }

  }

  }

  /******************************************************************/

  /* 定时器中断函数 */

  /******************************************************************/

  void tim(void) interrupt 1 using 1

  {

  static unsigned char count;

  TH0=(65536-100)/256;

  TL0=(65536-100)%256; //定时0.1mS

  if (count==PWM_ON)

  {

  LED1 = 1;

  LED = 1; //灯灭

  LED2 = 1;

  }

  count++;

  if(count == CYCLE)

  {

  count=0;

  if(PWM_ON!=0) //如果开启时间是0 保持原来状态

  {

  LED1 = 0;

  LED = 0; //灯亮

  LED2 = 0;

  }

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分