您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

PWM控制LED灯渐亮渐灭源程序

[日期:2008-06-06 ] [来源:NET 作者:佚名] [字体: (投递新闻)
 
PWM控制LED灯渐亮渐灭源程序
[ 2007-12-6 12:57:00 | By: xiangzi ]
 

// PWM 控制 LED 灯渐亮渐灭程序[转摘自伟纳电子]
// 适用 ME300B 开发系统
// 晶振为11.0592M
// 利用定时器控制产生占空比可变的 PWM 波
// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

#i nclude < reg51.h >
#i nclude < intrins.h >

sbit  K1 =P1^4 ;                    //增加键
sbit  K2 =P1^5 ;                    //减少键
sbit  BEEP =P3^7 ;                //蜂鸣器
unsigned char PWM=0x7f ;   //赋初值

void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);


void main()
{  

     P1=0xff; 
    TMOD=0x21 ;
    TH0=0xfc ;             //1ms延时常数
    TL0=0x66 ;            //频率调节

    TH1=PWM ;            //脉宽调节
    TL1=0 ;

     EA=1;
     ET0=1;
     ET1=1;
   
     TR0=1 ;

   while(1)
   {
     do{
            if(PWM!=0xff)
           {PWM++ ;delayms(10);}
           else Beep() ; 
         }
     while(K1==0);

     do{
           if(PWM!=0x02)
          {PWM-- ;delayms(10);}
           else Beep() ;
          }
     while(K2==0);
   }
}

/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1

    TR1=0 ;
    TH0=0xfc ;
    TL0=0x66 ;
    TH1=PWM ;
    TR1=1 ;
    P0=0x00 ;      //启动输出
}

/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3
{
    TR1=0 ;
    P0=0xff ;     //结束输出
}

/*********************************************************/
//蜂鸣器子程序
/*********************************************************/

void Beep()    
  {
      unsigned char i  ;
      for (i=0  ;i<100  ;i++)
        {
          delay(100)  ;
          BEEP=!BEEP  ;                //Beep取反
        }
     BEEP=1  ;                            //关闭蜂鸣器
     delayms(100);
  }

/*********************************************************/
// 延时子程序
/*********************************************************/ 
void delay(unsigned char t)
 {
    while(t--)   ;
 }

/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)

{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120 ; i++) ;
     }
}

阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐