新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)單按鍵控制led臺燈

        單片機(jī)單按鍵控制led臺燈

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

        功能要求:單獨(dú)一個按鍵控制LED臺燈的亮度,上電默認(rèn)關(guān)機(jī),分5個檔位。
        第一檔:100%亮度
        第二檔:65%亮度
        第三檔:35%亮度
        第四檔:20%亮度
        第五檔:10%亮度
        第六檔:關(guān)機(jī)

        本文引用地址:http://www.104case.com/article/201611/323845.htm

        思路:設(shè)定一個改變占空比的變量PWM,每按一次按鍵PWM值自加一次(自加值看需要定,比如PWM+=100),值越小產(chǎn)生的驅(qū)動脈沖頻率越高。PWM函數(shù)采用模擬方法產(chǎn)生,從成本上考慮,帶中斷,定時器等功能的單片機(jī)價格比較高。所以采用價格低廉的低檔單片機(jī)。鑒于仿真方便,本程序采用PIC16F505(當(dāng)然也可以用12F508等芯片)。

        端口連接:RC1—LED RC0----蜂鳴器 RC5----按鍵

        程序代碼:
        #include
        __CONFIG(0X034);
        #define uchar unsigned char
        #define uint unsigned int

        #define uchar unsigned char
        #define uint unsigned int
        uint PWM, H,L;


        void delay(uint x)//任意時間延時函數(shù)
        {
        uint c,d;
        for(c=x;c>0;c--)
        for(d=110;d>0;d--);

        }

        void KEY1()//按鍵掃描函數(shù),按壓有效(非松手有效),并且不影響LED點(diǎn)亮效果,都可以用此類掃描函數(shù)
        {
        static bit valid=0;
        static bit finish=0;

        if(valid==0)
        {
        if(RC5==0)
        {
        if(finish==0)
        {
        finish=1;

        RC0=1;
        delay(10);
        RC0=0;//蜂鳴器,每按一下響一聲
        RC1=0;//此語句非常重要,如果不加這句,到最低檔的時候,不能關(guān)機(jī)而直接進(jìn)入最高檔。

        PWM+=100; //按鍵有效,PWM增加100


        }
        }
        else
        {
        valid=0;
        finish=0;
        }
        }
        else
        {
        if(RC5==0)valid=1;
        }
        }


        void LED_ON()//模擬PWM函數(shù),算法簡單直觀,通過改變PWM值去改變LED點(diǎn)亮和熄滅的時間的間隔達(dá)到調(diào)光的目的。
        {


        H=PWM;
        L=500-H;

        RC1=0;
        while(H--);
        RC1=1;
        while(L--);

        }
        void main()
        {
        PORTC=0X00;
        TRISC=0X10;
        PWM=0;

        while(1)//用此語句達(dá)到上電關(guān)機(jī)(LED熄滅狀態(tài)),當(dāng)有按鍵按下的時候,break語句跳出while循環(huán)
        {
        RC1=0;
        if(RC5==0)break;
        }

        while(1)
        {
        KEY1();//按鍵掃描,此函數(shù)將改變PWM的值
        If(PWM<500)//只要PWM值小于500,每按下一次,都會執(zhí)行LED_ON()函數(shù),且每次的PWM值都以100的倍數(shù)增加,達(dá)到調(diào)光目的。
        {
        LED_ON();
        }
        If(PWM>500)//如果大于500則把PWM清零,且LED關(guān)機(jī)。
        {
        PWM=0;
        RC1=0;
        }
        }

        }



        評論


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

        關(guān)閉
        主站蜘蛛池模板: 淮阳县| 凤翔县| 吕梁市| 凤冈县| 同德县| 那坡县| 突泉县| 湘阴县| 西乡县| 中宁县| 临潭县| 盘锦市| 辽中县| 名山县| 罗定市| 浦北县| 宜章县| 衡阳县| 滁州市| 将乐县| 壶关县| 秀山| 商都县| 汉源县| 青州市| 五大连池市| 东方市| 辽宁省| 贵阳市| 平泉县| 东平县| 龙江县| 雷山县| 城市| 聊城市| 石阡县| 满洲里市| 宁阳县| 钟祥市| 嵩明县| 泾阳县|