程序如下:
#include
__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 { 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 { 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; } } } } [page] 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; } else if(num==2) { GP0=0; GP1=1;//红色亮 } else if(num==3) { GP0=0; GP1=0; } } } RGB函数构造比较巧妙,不知道原创者是谁?不想多费唇舌。交流掉电检测才是要说的重点,
GP4=0;
GP4=0;
GP4=1;//蓝色亮
if()
{}
else
{}
格式,开始时,如果GP5口上有低电平出现,对变量key2_time_cnt进行自加,当数值大于1000,(大概是12MS)左右,认为是交流电掉电了,让断电标志key_flag置1 ,当GP5口变为高电平的时候,把key2_time_cnt清零,同时判断断电标志是否有效,如果有效,让分档变量num加1,如果有4种功能那么从0加到3就要归零。此交流检测函数简单实用,可以放在主程序循环中,检测掉电不会漏档。如何在渐变中响应交流检测,就是利用检测函数作为延时的循环主体。这样既可以延时,又可以检测IO口的变化。
上一篇:PIC16F 8位单片机汇编指令集
下一篇:学习PIC单片机有感
推荐阅读最新更新时间:2024-03-16 14:00
设计资源 培训 开发板 精华推荐
- 看泰克视频讲座,了解先进医疗电子测试方案,填问卷,赢好礼!
- 身临其境不足以窥全貌,《TI嵌入式产品研讨会》比现场更有料的小小书
- 参赛冲击【万元大奖】啦|2023 DigiKey“智造万物,快乐不停”创意大赛
- 最后一周:免费获取Pasternack《RF产品选型指南》2018 印刷版!
- 免费申请|ATmega4809 Curiosity Nano
- 5G来袭 TE Connectivity 助你抢占消费电子市场先机
- 大学必备设计课表出炉,先睹为快!
- 用 TI 汽车电子方案充充电吧,看你止步不前还是勇往直前!
- TI 工业月,灵感不设限!21天习惯养成记!打卡赢好礼啦!
- 看泰克视频讲座,了解先进医疗电子测试方案,填问卷,赢好礼!