<nobr id="trllz"><thead id="trllz"></thead></nobr>

      <span id="trllz"></span>
        <progress id="trllz"></progress>

          <strike id="trllz"></strike>

              <em id="trllz"></em>

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

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

                作者:佚名   來源:本站原創   點擊數:  更新時間:2012年04月27日   【字體:

                一、硬件介紹:

                 (采用5050LED 2W) RGB三色LED控制引腳分別為單片機P1.2 、 P1.1  、 P1.0。LED正極接主電源(24V)正極,負極接驅動3顆三極管的集電極,單片機控制腳分別接3顆NPN三極管,三極管發射極接地,而單片機的供電是來自三端穩壓器7805,祥細原理如下:


                 

                二、實物圖片:



                 

                三、軟件部分:

                1、/*原理:
                 
                先亮紅燈(保持一會兒)----紅綠過度(綠加1、紅減1循環240次)------
                綠燈亮起(保持一會兒)----綠蘭過度(蘭加1、綠減1循環240次)
                -----蘭燈亮起(保持)-----蘭白過度(綠加1、紅加1循環240次、蘭不變)
                ---白紅過度,技術支持網站
                :http://www.qdxzsl.com/ 
                全部程序源代碼:點此下載*/

                2、具體程序如下:
                #include<reg52.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;x<5;x++)//延時外循環
                 for(y=0;y<z;y++);//延時內循環
                }
                /**********************************************/
                /**********PWM控制紅綠蘭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)&&(ji<100))//如果亮度等級控制變量ji小于100,紅燈亮起時間變量為240
                  {
                   Rout=240;//紅燈亮起變量為240
                   Gout=0;//綠燈亮起變量為0
                   Bout=0;//蘭燈亮起變量為0
                  }
                  if((ji>100)&&(ji<340))/*如果亮度等級控制變量ji大于100小于340(剛好240個等級),
                  紅燈亮起時間變量由原來的240,慢慢減小到0,同時綠燈由原來的0慢慢增到240,形成
                  紅燈到綠燈的漸變過程*/
                  {
                   Rout-=dengji;//將紅燈變量減1。因為dengji為亮度變化等級(本程序變化等級為1),
                   Gout+=dengji;//將綠燈變量加1
                   Bout=0;//蘭燈不變
                  }
                  if((ji>340)&&(ji<440))/*亮度等級控制變量ji大于340小于440時,讓綠燈變量停一段時間
                  這樣就形成了當紅燈過度到綠燈時,綠燈會停一會兒的效果。*/
                  {
                   Rout=0;//紅燈滅
                   Gout=240;//綠燈亮
                   Bout=0;//蘭燈滅
                  }
                  if((ji>440)&&(ji<680))//同理:亮度等級控制變量ji大于440小于680時,由綠燈到蘭燈過度
                  {
                   Rout=0;//紅燈變量不變
                   Gout-=dengji;//將綠燈變量減1
                   Bout+=dengji;//將蘭燈變量加1
                  }
                  if((ji>680)&&(ji<780))//亮度等級控制變量ji大于680小于780時,讓蘭燈變量停一段時間
                  {
                   Rout=0;//紅燈滅
                   Gout=0;//綠燈滅
                   Bout=240;//蘭燈亮一會兒
                  }
                  if((ji>780)&&(ji<1020))//亮度等級控制變量ji大于780小于1020時,由蘭燈到白燈過度
                  {
                   Rout+=dengji;//將紅燈變量加1
                   Gout+=dengji;//綠燈變量加1
                   Bout=240;//蘭燈不變
                  }
                  if((ji>1020)&&(ji<1025))//亮度等級控制變量ji大于1020小于1025時,由蘭燈到白燈過度
                  {
                   Rout=240;//將紅燈變量加1
                   Gout=240;//綠燈變量加1
                   Bout=240;//蘭燈不變
                  }
                  if((ji>1025)&&(ji<1265))//亮度等級控制變量ji大于1025小于1265時,由白光到紅光過度
                  {
                   Rout=240;//紅燈變量不變
                   Gout-=dengji;//綠燈變量自動減1
                   Bout-=dengji;//蘭燈變量自動減1
                  }
                  if(ji>1265)//當亮度等級控制變量ji大于1210時,就將它清0
                  ji=0;//將亮度控制等級清0
                 }
                }

                關閉窗口

                相關文章

                中文一午夜乱理片无码

                    <nobr id="trllz"><thead id="trllz"></thead></nobr>

                    <span id="trllz"></span>
                      <progress id="trllz"></progress>

                        <strike id="trllz"></strike>

                            <em id="trllz"></em>