<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> 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++) ;
            }
        }

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

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮