双按键控制LED台灯亮度C方案
功能要求:上电LED不亮,按着1键,LED从最暗达到最亮,并且附加状态指示灯,达到最亮时候,指示灯点亮,说明主灯已经达到最亮。按着2键,主灯LED将一直变暗到灭掉。
思路:设定变量PWM,通过按键来改变PWM的值,再构造与PWM相关的模拟PWM函数,通过PWM的值去调节脉宽,达到调光目的。
端口连接:RC0—LED RC4----按键1 RC5----按键2 RC3为最大亮度指示灯
程序代码:
#include<pic.h>
__CONFIG(0X034);
#define uchar unsigned char
#define uint unsigned int
unsigned int PWM,H,L;
void delay(unsigned int b)
{
unsigned char i;
while(b--)
{
for(i=0; i<2; i++);
}
}
void LED_ON()//模拟PWM函数
{
} void scan1()//加键扫描 { if(RC4==0) { delay(50); if(RC4==0) { PWM++; if(PWM>499) { PWM=499; while(1)// { RC0=1; RC3=1; if(RC5==0)// 一直检测减按键是否按下,有键按下则跳出循环while语句 break; } } } } } void scan2()//减键扫描 { RC3=0; if(RC5==0) { delay(50); if(RC5==0) { PWM--; if(PWM<1) { PWM=1; RC0=0; while(1)//一直检测其加键是否按下,有按下则跳出while语句 { if(RC4==0) break; } } } } } void main()//主程序 { RC0=0; RC3=0; TRISC=0b00110000; while(1) { while(1)//检测开机键,也就是增加键是否按下,并且LED主灯,在没有键下的情况下是不会亮的 { RC0=0; if(RC4==0) break; } while(1) { LED_ON()//模拟PWM函数 scan1();//加键扫描 scan2();//减键扫描 } } } 涉及到按键无极调光的,一定要采取“按下有效”的方法去扫描按键,不需要松手检测。 利用 while ( If(表达式1) Break; )结构设定各种循环检测.
H=PWM;
L=500-H;
RC0=1;
while(H--);
RC0=0;
while(L--);