双按键操控LED台灯亮度C计划
功用要求:上电LED不亮,按着1键,LED从最暗到达最亮,而且附加状况指示灯,到达最亮时分,指示灯点亮,说明主灯现已到达最亮。按着2键,主灯LED将一向变暗到灭掉。
思路:设定变量PWM,经过按键来改动PWM的值,再结构与PWM相关的模仿PWM函数,经过PWM的值去调节脉宽,到达调光意图。
端口衔接:RC0—LED RC4—-按键1RC5—-按键2RC3为最大亮度指示灯
程序代码:
#include
__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函数
{
H=PWM;
L=500-H;
RC0=1;
while(H–);
RC0=0;
while(L–);
}
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;
)结构设定各种循环检测.