久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

單片機檢測交流電掉電程序應用(RGB控制)

作者:流浪魚   來源:本站原創   點擊數:  更新時間:2014年03月17日   【字體:

     RBG軟燈帶是,等燈飾配件中常見的負載。一般作為背景燈裝飾,以及護欄管。程序實現功能,利用墻壁開關,控制RGB燈帶,分成4檔,第一檔:RGB之間實現漸變效果。第二檔:R亮,第三檔,B亮,第四檔:G亮。當然還有其他很多花樣。本程序難點,構造簡單實用的RGB漸變函數,第二,如何在漸變中檢測交流電掉電。實驗器材:PIC12F509一片,RGB燈帶一條,RGB控制線路板一塊。

 
程序如下: 

#include<pic.h>

__CONFIG(0X01A);

#define uchar unsigned char

#define uint unsigned int

#define TIME_MAX 1000

 

uint key2_time_cnt;//按鍵去抖計數器

uchar num;

uchar key_flag;

uint PWM;

 

uint  a,c;

uchar i,p,num,f,k;

uint r,g,b;

 

void delay(uint x)

{

uint c,d;

 for(c=x;c>0;c--)

   for(d=110;d>0;d--);

 

}

 

void timer1(uint t)

{

uint n;

for(n=0;n<t;n++)

{

 

if(GP5==0)//

{

       key2_time_cnt++;

       if(key2_time_cnt==TIME_MAX)

       {

        

         key_flag=1;

       }

}

 

else

{

       key2_time_cnt=0;

       if(key_flag==1)

       {

       key_flag=0;

       num=1;

       }

 

}

}

}

 

void timer2(uint t)

{

uint n;

for(n=0;n<t;n++)

{

 

if(GP5==0)//

{

       key2_time_cnt++;

       if(key2_time_cnt==TIME_MAX)

       {

        

         key_flag=1;

       }

}

 

else

{

       key2_time_cnt=0;

       if(key_flag==1)

       {

       key_flag=0;

       num=3;

       }

 

}

}

}

 

void led1_on()                

{

  GP0=1;

  if(g!=0&&b==5)

       {

              g--;

              r++;

       }

   if(r!=0&&g==5)

         {

              r--;

              b++;

         }

  if(b!=0&&r==5)

       {

       b--;

       g++;

       }

   if(g+r+b!=50)

       {

       g=40;

       r=5;

       b=5;

       }

   for(a=0;a<30;a++)

 {

        if(g!=0) //綠色漸變

        { 

       

               GP1=0;

               timer1(g);

     

               GP1=1;

        }

 

         if(r!=0) //紅色漸變

         {

                GP2=0;

                timer1(r);

                GP2=1;

         }

        if(b!=0) //藍色漸變

        {

              GP4=0;

              timer1(b);

              GP4=1;

        }

 

  }

 

}

 

void key_scan()

{

if(GP5==0)//按鍵按下

{

       key2_time_cnt++;

       if(key2_time_cnt==TIME_MAX)

       {

        

         key_flag=1;

       }

}

 

else

{

       key2_time_cnt=0;

       if(key_flag==1)

       {

       key_flag=0;

       num++;

       if(num>3)num=0;

       }

 

}

 

}

void main()

{

TRIS=0b00110000;

GP0=1;

GP1=0;

GP2=0;

g=40;

r=5;

b=5;

while(1)

{

key_scan();

if(num==0)

{

  led1_on();

}

 

else if(num==1)

{

GP0=1;//綠色亮

GP1=0;
GP4=0;

}

else if(num==2)

{

GP0=0;

GP1=1;//紅色亮
GP4=0;

}

else if(num==3)

{

GP0=0;

GP1=0;
GP4=1;//藍色亮

}

 

 

}

 

}

RGB函數構造比較巧妙,不知道原創者是誰?不想多費唇舌。交流掉電檢測才是要說的重點,
if()
{}
else
{}
格式,開始時,如果GP5口上有低電平出現,對變量key2_time_cnt進行自加,當數值大于1000,(大概是12MS)左右,認為是交流電掉電了,讓斷電標志key_flag置1 ,當GP5口變為高電平的時候,把key2_time_cnt清零,同時判斷斷電標志是否有效,如果有效,讓分檔變量num加1,如果有4種功能那么從0加到3就要歸零。此交流檢測函數簡單實用,可以放在主程序循環中,檢測掉電不會漏檔。如何在漸變中響應交流檢測,就是利用檢測函數作為延時的循環主體。這樣既可以延時,又可以檢測IO口的變化。

關閉窗口

相關文章

主站蜘蛛池模板: 一区二区三区视频在线免费观看 | 久久99这里只有精品 | 国产成人一区在线 | 一区二区三区四区在线 | 69亚洲精品 | 99热这里| 久久综合激情 | 精品国产一区二区三区久久狼黑人 | 69热视频在线观看 | 99av成人精品国语自产拍 | 欧美a视频 | 99精品国产一区二区三区 | 国产高清精品在线 | 亚洲国产精品一区二区三区 | 亚洲天堂av一区 | 亚洲精品乱码久久久久久9色 | 欧美日韩福利 | 国产一级片 | 久久逼逼| 国产精品福利网站 | 国产成人在线视频免费观看 | 亚洲一区| 国产精品日产欧美久久久久 | 91免费版在线 | 91不卡在线| 91色网站| www.成人在线视频 | 黄网站涩免费蜜桃网站 | 国产成人免费视频 | 国产精品视频网站 | 亚洲精品区 | 天天色天天色 | 久久激情视频 | 亚洲va在线va天堂va狼色在线 | 成人午夜精品 | 91文字幕巨乱亚洲香蕉 | 亚洲欧美国产一区二区三区 | 中文字幕一区二区三区四区 | 一级黄色片毛片 | 中文字幕在线视频免费观看 | www亚洲精品 |