專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

雙鍵無(wú)極LED調(diào)光臺(tái)燈

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年10月20日   【字體:

雙按鍵控制LED臺(tái)燈亮度C方案

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

 

思路:設(shè)定變量PWM,通過(guò)按鍵來(lái)改變PWM的值,再構(gòu)造與PWM相關(guān)的模擬PWM函數(shù),通過(guò)PWM的值去調(diào)節(jié)脈寬,達(dá)到調(diào)光目的。

端口連接: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函數(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)// 一直檢測(cè)減按鍵是否按下,有鍵按下則跳出循環(huán)while語(yǔ)句

                 break; 

              }  

}

 

}

}

}

 

void scan2()//減鍵掃描

{

RC3=0;

if(RC5==0)

 {

delay(50);

if(RC5==0)

{

PWM--;

if(PWM<1)

{

PWM=1;

RC0=0;

while(1)//一直檢測(cè)其加鍵是否按下,有按下則跳出while語(yǔ)句

        {   

                     if(RC4==0)

                     break;

        }

}

 

}

}

}

void main()//主程序

{

RC0=0;

RC3=0;

TRISC=0b00110000;

 

while(1)

{

while(1)//檢測(cè)開(kāi)機(jī)鍵,也就是增加鍵是否按下,并且LED主燈,在沒(méi)有鍵下的情況下是不會(huì)亮的

       {        

           RC0=0;

              if(RC4==0)

              break;

       }

 

    while(1)

     {       

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

            scan1();//加鍵掃描

            scan2();//減鍵掃描

     }

   }

}

 

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

利用

while

If(表達(dá)式1

Break;

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

關(guān)閉窗口

相關(guān)文章