新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機產生占空比可調方波(PWM)

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

        作者: 時間:2016-12-02 來源:網絡 收藏
        /****************************************************************

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

        本文引用地址:http://www.104case.com/article/201612/324604.htm

        #include
        #include
        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++) ;
        }
        }

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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 老河口市| 汪清县| 福鼎市| 江安县| 洛浦县| 开平市| 岚皋县| 桐庐县| 东乡县| 孟津县| 黑水县| 东乌| 莎车县| 霍山县| 高邮市| 黎城县| 句容市| 阳原县| 突泉县| 元氏县| 鲜城| 基隆市| 盐源县| 五指山市| 凤凰县| 霍邱县| 吕梁市| 水富县| 晴隆县| 双辽市| 疏附县| 平陆县| 固始县| 锡林浩特市| 临沭县| 阳高县| 万年县| 龙岩市| 赫章县| 双柏县| 札达县|