PWM控制LED亮度

pwm占空比来控制LED灯的明亮程度。

 

 

 

#include <reg52.h>

typedef unsigned char uint8;
typedef unsigned int  uint16;

sbit down = P3^0;
sbit up = P3^1;

uint8 t = 0;
uint8 PWM_T = 0;   //占空比控制变

void delay_1ms(uint16 t)
{
    uint16 x,y;
    for(x=t;x>0;x--)
        for(y=120;y>0;y--);
}
void main(void)      
{

    TMOD = 0x02;   //定时器0,工作模式2,8位定时模式
    TH0=210;     //写入预置初值(取值1-255,数越大PWM频率越高)
    TL0=210;     //写入预置值 (取值1-255,数越大PWM频率越高)
    TR0=1;       //启动定时器
    ET0=1;       //允许定时器0中断
    EA=1;        //允许总中断
    P1=0xff;      //初始化P1,输出端口
    PWM_T=30;
     while(1)      
    
     {   
           if(!up)
             {
                if(PWM_T<250)
                    {
                      PWM_T++;
                    }
                
                delay_1ms(10);
            }
         if(!down)
             {
                if(PWM_T>0)
                    {
                      PWM_T--;
                    }
                
                delay_1ms(10);
            }

    
     }      
}
timer0() interrupt 1  
{ 
     t++;    //每次定时器溢出加1
     
     if(t==250)   //PWM周期 100个单位
         {
              t=0;  //使t=0,开始新的PWM周期
              P1=0x00;  //输出端口
         }
     
     if(PWM_T==t)  //按照当前占空比切换输出为高电平
         {  
             P1=0xff;        //  
         }
}

 

上一篇:大小端模式


下一篇:Objective C - 与Android交互时高低位转换: