×
嵌入式 > 技术百科 > 详情

双键无极LED调光台灯

发布时间:2020-10-21 发布时间:
|
双按键控制LED台灯亮度C方案

功能要求:上电LED不亮,按着1键,LED从最暗达到最亮,并且附加状态指示灯,达到最亮时候,指示灯点亮,说明主灯已经达到最亮。按着2键,主灯LED将一直变暗到灭掉。

 

思路:设定变量PWM,通过按键来改变PWM的值,再构造与PWM相关的模拟PWM函数,通过PWM的值去调节脉宽,达到调光目的。

端口连接:RC0—LED RC4----按键1  RC5----按键2  RC3为最大亮度指示灯

程序代码:

 

#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;

)结构设定各种循环检测.

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
家庭网络:从带宽共享走向内容共享