欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機產生占空比可調方波(PWM)

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月17日   【字體:

/****************************************************************                                                       
            程序名稱:   發光二極管D1進行亮度控制
            版本:      VER1.0
            適用板本:  51hei學習板     
利用定時器控制產生占空比可變的PWM波對發光二極管D1進行亮度控制
按S2,PWM值增加,則占空比減小,D1燈變亮。
按S3,PWM值減小,則占空比增加,D1燈變暗。
當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警。
*****************************************************************/

#include<reg51.h>
#include<intrins.h>
sbit  S2 =P3^4 ;        //PWM值減少鍵
sbit  S3 =P3^5 ;       //PWM值增加鍵
sbit  BEEP =P2^3 ;         //蜂鳴器
unsigned char PWM=0x03 ;   //賦初值

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

/*********************************************************/
void main()
{  
    P1=0xff;
    TMOD=0x00 ;
  TH0=0x00 ;           //延時常數
    TL0=0x00 ;           //頻率調節
    TH1=PWM ;            //脈寬調節
    TL1=0xff ;
EA=1;
ET0=1;
ET1=1;
    TR0=1 ;


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

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

/*********************************************************/
// 定時器0中斷服務程序  (頻率)
/*********************************************************/
void timer0() interrupt 1

    TR1=0 ;
    TH0=0x00;
    TL0=0x00 ;
    TH1=PWM ;
    TR1=1 ;
    P1=0xfe ;      //啟動輸出
}

/*********************************************************/
// 定時器1中斷服務程序 (脈寬)
/*********************************************************/
void timer1() interrupt 3
{
    TR1=0 ;
    P1=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++) ;
    }
}

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

關閉窗口

相關文章