新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用PWM控制漸變七彩燈C51程序

        用PWM控制漸變七彩燈C51程序

        作者: 時間:2012-08-02 來源:網絡 收藏

        2、具體程序如下:
        #includereg52.h>//MCU頭文件
        #define uchar unsigned char//字浮型宏定義
        #define uint unsigned int//整型宏定義
        #define shudu 30//LED漸變速度調整
        #define dengji 1//LED變化等級調整
        sbit B1=P1^0;//紅色燈控制IO口
        sbit G1=P1^1;//綠色燈控制IO口
        sbit R1=P1^2;//蘭色燈控制IO口
        uchar Rout,Bout,Gout;//紅綠蘭3個變量
        /***************************************************/
        /**********************延時子程序*******************/
        /***************************************************/
        void delay(uint z)
        {
        uint x,y;//局部變量定義
        for(x=0;x5;x++)//延時外循環
        for(y=0;yz;y++);//延時內循環
        }
        /**********************************************/
        /**********紅綠蘭3種燈亮滅時間**********/
        /**********************************************/
        void RGBpwm(uchar Rou,uchar Gou,uchar Bou)//3個局部變量,些部分為帶參數函數
        {
        if(Rou!=0)//如果紅燈變量不等于0就亮紅燈
        {
        R1=1;//紅燈亮
        delay(Rou);//紅燈亮起時間
        R1=0;//紅燈滅
        }
        if(Gou!=0)//如果紅燈變量不等于0就亮紅燈
        {
        G1=1;//綠燈亮
        delay(Gou);//綠燈亮起的時間 
        G1=0;//綠燈滅
        }
        if(Bou!=0)//如果紅燈變量不等于0就亮紅燈
        {
        B1=1;//蘭燈亮
        delay(Bou);//蘭燈亮起的時間
        B1=0;//蘭燈滅
        }
        }

        /***********************************************/
        /********************主程序*********************/
        /***********************************************/
        void main()
        {
        TMOD=0x01;//選擇定時器在方式1下工作
        EA=1;//打開總中斷
        ET0=1;//打開定時器中斷
        TR0=1;//打開定時器
        R1=0;//開機將紅燈關閉
        G1=0;//開機將綠燈關閉
        B1=0;//開機將蘭燈關閉
        TH0=(65536-256)/256;//給定時器高8位賦值
        TL0=(65536-256)%256;//給定時器低8位賦值
        while(1)//程序主循環
        {
        RGBpwm(Rout,Gout,Bout);//調用RGBpwm子程序
        }
        }
        /*************************************************/
        /*中斷服務子程序(控制LED紅綠蘭亮滅時間占空比例)*/
        /*************************************************/
        void zhong() interrupt 1//中斷向量位為1
        {
        uint num;//定時器計數變量
        uint ji;//亮度等級控制變量
        TH0=(65536-256)/256;//給定時器高8位賦值
        TL0=(65536-256)%256;//給定時器低8位賦值
        num++;//將定時計數變自動增加1
        if(num==shudu)//如果速度變量等于定時計數器變量就執行下面大括號語句
        {
        num=0;//將計數器清0
        ji++;//將亮度等級控制變量加1
        if((ji>0)(ji100))//如果亮度等級控制變量ji小于100,紅燈亮起時間變量為240
        {
        Rout=240;//紅燈亮起變量為240
        Gout=0;//綠燈亮起變量為0
        Bout=0;//蘭燈亮起變量為0
        }
        if((ji>100)(ji340))/*如果亮度等級控制變量ji大于100小于340(剛好240個等級),
        紅燈亮起時間變量由原來的240,慢慢減小到0,同時綠燈由原來的0慢慢增到240,形成
        紅燈到綠燈的漸變過程*/
        {
        Rout-=dengji;//將紅燈變量減1。因為dengji為亮度變化等級(本程序變化等級為1),
        Gout+=dengji;//將綠燈變量加1
        Bout=0;//蘭燈不變
        }
        if((ji>340)(ji440))/*亮度等級控制變量ji大于340小于440時,讓綠燈變量停一段時間
        這樣就形成了當紅燈過度到綠燈時,綠燈會停一會兒的效果。*/
        {
        Rout=0;//紅燈滅
        Gout=240;//綠燈亮
        Bout=0;//蘭燈滅
        }
        if((ji>440)(ji680))//同理:亮度等級控制變量ji大于440小于680時,由綠燈到蘭燈過度
        {
        Rout=0;//紅燈變量不變
        Gout-=dengji;//將綠燈變量減1
        Bout+=dengji;//將蘭燈變量加1
        }
        if((ji>680)(ji780))//亮度等級控制變量ji大于680小于780時,讓蘭燈變量停一段時間
        {
        Rout=0;//紅燈滅
        Gout=0;//綠燈滅
        Bout=240;//蘭燈亮一會兒
        }
        if((ji>780)(ji1020))//亮度等級控制變量ji大于780小于1020時,由蘭燈到白燈過度
        {
        Rout+=dengji;//將紅燈變量加1
        Gout+=dengji;//綠燈變量加1
        Bout=240;//蘭燈不變
        }
        if((ji>1020)(ji1025))//亮度等級控制變量ji大于1020小于1025時,由蘭燈到白燈過度
        {
        Rout=240;//將紅燈變量加1
        Gout=240;//綠燈變量加1
        Bout=240;//蘭燈不變
        }
        if((ji>1025)(ji1265))//亮度等級控制變量ji大于1025小于1265時,由白光到紅光過度
        {
        Rout=240;//紅燈變量不變
        Gout-=dengji;//綠燈變量自動減1
        Bout-=dengji;//蘭燈變量自動減1
        }
        if(ji>1265)//當亮度等級控制變量ji大于1210時,就將它清0
        ji=0;//將亮度控制等級清0
        }
        }

        pwm相關文章:pwm原理



        上一頁 1 2 下一頁

        關鍵詞: PWM控制 漸變七彩燈 C51程序

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东兰县| 宁德市| 钟山县| 建平县| 灵川县| 富平县| 皋兰县| 高雄市| 仪陇县| 南平市| 湘西| 四川省| 洪泽县| 罗甸县| 德安县| 宜兰县| 闽清县| 富宁县| 朝阳区| 淮安市| 新津县| 六枝特区| 宝应县| 麻城市| 轮台县| 呼和浩特市| 新竹县| 梅河口市| 肥城市| 青铜峡市| 延庆县| 时尚| 嘉兴市| 萍乡市| 陵川县| 临西县| 错那县| 江陵县| 宜章县| 梅河口市| 孟村|