新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机检测交流电掉电程序应用(RGB控制)

单片机检测交流电掉电程序应用(RGB控制)

作者: 时间:2016-12-02 来源:网络 收藏

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口的变化。


上一页 1 2 下一页

评论


技术专区

关闭