雙鍵無極LED調(diào)光臺燈
功能要求:上電LED不亮,按著1鍵,LED從最暗達到最亮,并且附加狀態(tài)指示燈,達到最亮?xí)r候,指示燈點亮,說明主燈已經(jīng)達到最亮。按著2鍵,主燈LED將一直變暗到滅掉。
本文引用地址:http://m.butianyuan.cn/article/201611/323863.htm思路:設(shè)定變量PWM,通過按鍵來改變PWM的值,再構(gòu)造與PWM相關(guān)的模擬PWM函數(shù),通過PWM的值去調(diào)節(jié)脈寬,達到調(diào)光目的。
端口連接: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函數(shù)
{
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)//一直檢測減按鍵是否按下,有鍵按下則跳出循環(huán)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函數(shù)
scan1();//加鍵掃描
scan2();//減鍵掃描
}
}
}
涉及到按鍵無極調(diào)光的,一定要采取“按下有效”的方法去掃描按鍵,不需要松手檢測。
利用
while
(
If(表達式1)
Break;
)結(jié)構(gòu)設(shè)定各種循環(huán)檢測.
評論