PWM --用按键控制 LED 的亮度

以前写过一篇关于 PWM 的博文,已经有一年了,链接如下:


http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74


文中使用了示波器来显示不同占空比的波形。


其实,利用 LED 也能通过亮度来表现出 PWM 参数的变化,用实物进行测试,效果很好,但是用 PROTEUS 进行仿真试验,却只是看到闪烁的厉害,基本上看不出亮度的变化。


近来发现,加上一个大电容,就可以减弱 LED 的闪烁,亮度就能够稳定一些,这样一来,就可以用 PROTEUS 软件直接观察亮度的变化了。


电路见下图。图中的大电容(C6)的容量是 4700uF,这个是可以随便调整的,实际的电路就不需要它了。

图中的占空比参数是 10,LED(D1) 的显示为“半亮”状态。


PWM --用按键控制 LED 的亮度_第1张图片



C 语言的程序,在去年就发表出来了,可见上面的链接,现在略加改动如下:


#include

unsigned char a, b;

sbit K1 = P3^2;     //定义两个调整占空比的按键

sbit K2 = P3^3;

//------------------------------------------

void  delay(unsigned int i)

{

    unsigned char j;

    while(i--)  for(j = 0; j < 60; j++); 

}

//------------------------------------------

void main()

{

    TMOD = 0x01;               //T0定时方式1

    TH0 = (65536 - 500) / 256; //500us@12MHz

    TL0 = (65536 - 500) % 256;

    TR0 = 1;

    ET0 = 1;

    EA = 1;


    a = 0;

    b = 10;

    while(1)  {

      if(!K1) {delay(20); if(!K1) {b++; if(b > 19) b = 19; while(!K1);}}

      if(!K2) {delay(20); if(!K2) {b--; if(b < 1)  b = 1;  while(!K2);}}

      //以上两行是检查按键、延时消抖、修改占空比、等待按键释放,b = 1~19


      P0 = ((b / 10) << 4) + b % 10; //显示占空比等级

    }

}

//------------------------------------------

void time0() interrupt 1

{

    TL0 = (65536 - 493) % 256; //补偿中断进入时间

    TH0 = (65536 - 493) / 256; //500us@12MHz

    a--;                       //a = 1~20

    if(a == 0)  {a = 20; P2 = 0;} //周期=20*500us

    if(a <= b)  P2 = 255;      //输出到示波器

    P1 = ~P2;   //输出到LED,低电平发光

}

//------------------------------------------


这个程序,PWM 的周期比去年的短了一些;去年是应网友的要求,设计成 1s,有些偏长,不太实用。

这次也不用外部中断来输入按键了,改用查询按键的方法。


当使用按键进行占空比调整的时候,LED 可以显示出来不同的亮度。几幅截屏的画面如下:


PWM --用按键控制 LED 的亮度_第2张图片


PWM --用按键控制 LED 的亮度_第3张图片


当 PWM 参数稍小时,亮度有些不足,这可以适当减小一些限流电阻的阻值进行弥补。


用来显示 PWM 的 LED,其中的电流是间断的,所以,它的限流电阻可以比平常时小一些,100欧左右,是经验数据。


制作实物电路的时候,大电容就不需要了,不用花钱去买了,呵呵


你可能感兴趣的:(非同一般)