新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 雙鍵無極LED調(diào)光臺燈

雙鍵無極LED調(diào)光臺燈

作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
雙按鍵控制LED臺燈亮度C方案

功能要求:上電LED不亮,按著1鍵,LED從最暗達(dá)到最亮,并且附加狀態(tài)指示燈,達(dá)到最亮?xí)r候,指示燈點(diǎn)亮,說明主燈已經(jīng)達(dá)到最亮。按著2鍵,主燈LED將一直變暗到滅掉。

本文引用地址:http://m.butianyuan.cn/article/201611/323863.htm

思路:設(shè)定變量PWM,通過按鍵來改變PWM的值,再構(gòu)造與PWM相關(guān)的模擬PWM函數(shù),通過PWM的值去調(diào)節(jié)脈寬,達(dá)到調(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)//檢測開機(jī)鍵,也就是增加鍵是否按下,并且LED主燈,在沒有鍵下的情況下是不會亮的

{

RC0=0;

if(RC4==0)

break;

}

while(1)

{

LED_ON()//模擬PWM函數(shù)

scan1();//加鍵掃描

scan2();//減鍵掃描

}

}

}

涉及到按鍵無極調(diào)光的,一定要采取“按下有效”的方法去掃描按鍵,不需要松手檢測。

利用

while

If(表達(dá)式1)

Break;

)結(jié)構(gòu)設(shè)定各種循環(huán)檢測.



關(guān)鍵詞: 雙鍵無極LED調(diào)光臺

評論


技術(shù)專區(qū)

關(guān)閉