新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > proteus與keil Cx51的單片機仿真(定時器應用2)

        proteus與keil Cx51的單片機仿真(定時器應用2)

        作者: 時間:2016-11-24 來源:網絡 收藏
        使用定時器產生PWM波調節P0和P2口VD的亮度,當按下K01時,VD亮度減小,當按下K02時,VD亮度增加,設P0和P2口低高電平燈亮,反之燈滅。

        電路圖:

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



        C程序:

        #include
        #include
        sbit K01=P1^4; //增加鍵
        sbit K02=P1^5; //減少鍵
        sbit BEEP=P3^7;//蜂鳴器
        unsigned char PWM=0x7f;//賦初值
        void Beep();
        void delayms(unsigned char ms);
        void delay(unsigned t);
        void main()
        {
        P0=0xff;
        P1=0xff;
        P2=0xff;
        P3=0xff;
        TMOD=0x21;
        TH0=0xfc;//1ms延時常數12M
        TL0=0x18;//頻率調節
        TH1=PWM;//脈寬調節
        TL1=0;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        while(1)
        {
        do{if(PWM!=0xff){PWM++;delayms(10);}
        else Beep();}while(K01==0);//K01按下,亮度變暗
        do{if(PWM!=0x01){PWM--;delayms(10);}
        else Beep();}while(K02==0);//K02按下,亮度變亮
        } }
        void timer0() interrupt 1 //定時器0中斷服務程序
        {
        TR1=0;
        TH0=0xfc;
        TL0=0x66;
        TH1=PWM;
        TR1=1;
        P0=0x00;
        P2=0x00; //啟動輸出
        }
        void timer1() interrupt 3//定時器1中斷服務程序
        {TR1=0;P0=0xff;P2=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--);}//延時子程序1
        void delayms(unsigned char ms)//延時子程序2
        {unsigned char i; while(ms--){for(i=0;i<120;i++);}}




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 澎湖县| 夏津县| 旬阳县| 沂南县| 鲁甸县| 什邡市| 太湖县| 栾城县| 阳西县| 宽甸| 应用必备| 南雄市| 仪陇县| 香港 | 肥西县| 岳阳市| 陵水| 隆德县| 波密县| 凤山县| 雷州市| 樟树市| 肇东市| 阿坝| 茂名市| 明溪县| 哈尔滨市| 门源| 宜章县| 佛教| 玉山县| 鹿泉市| 吴川市| 浑源县| 新余市| 库尔勒市| 宁乡县| 沙雅县| 桦甸市| 东乡县| 平果县|