×
单片机 > 单片机程序设计 > 详情

LED PWM调光C程序

发布时间:2020-06-04 发布时间:
|

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

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; 
    }
  } 
}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会