溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WLGK-51單片機接口技術(shù)基礎(chǔ)實驗 ——LED流水燈

發(fā)布時間:2020-07-21 03:09:57 來源:網(wǎng)絡(luò) 閱讀:710 作者:wanligaoke 欄目:開發(fā)技術(shù)

WLGK-51單片機接口技術(shù)基礎(chǔ)實驗

——LED流水燈

當(dāng)我們已經(jīng)明白了LED燈的基本特性,我們就會對街頭上五光十色的LED燈的技術(shù)原理了然于胸。有小伙伴說,LED的使用感覺還是不太過癮,那么今天阿甘老師將帶領(lǐng)大家來實現(xiàn)一個LED的小應(yīng)用—LED流水燈。

快來感受一下吧,技術(shù)的世界里,其樂無窮!

 

萬立高科官網(wǎng):www.wanligaoke.com

萬立高科官方商城:http://www.wlgkbj.com

萬立高科淘寶直銷店鋪:https://robot-ds.taobao.com

萬立高科-單片機技術(shù)交流群:477250411

一、  實驗?zāi)康?/span>

掌握以下方法:

1.掌握在實際使用環(huán)境下,如何配合硬件原理圖實現(xiàn)LED流水燈程序的編寫;

2.掌握如何將編譯生成的可執(zhí)行文件LED.HEX文件下載到單片機并運行起來看到試驗效果

二、實驗環(huán)境

1.個人微機一臺:Windows操作系統(tǒng)(Win xp或者win7均可以);

2Keil 4集成開發(fā)環(huán)境;

3.串口下載線一根;

4WLGK-51ZC開發(fā)板。

三、試驗步驟

在做學(xué)習(xí)這個試驗之前,我首先給大家講一下什么叫LED流水燈??它是一個什么樣的效果:顧名思義,多個LED燈點亮的效果好像流水一樣在流。再具體一點:比如現(xiàn)在有8LED燈并排,如果每次只點亮1LED燈,那么效果就應(yīng)該是:每次正好點亮相鄰的一個LED燈,而其他燈熄滅。

 

下面我們將沿著這個思路一步一步帶你實現(xiàn)這個過程和現(xiàn)象。具體的可以拆分成下面幾步:

  • 首先我們學(xué)習(xí)在系統(tǒng)上電后如何點亮1LED燈,而其他LED燈熄滅;

  • 然后我們學(xué)習(xí)將8LED燈都按照這個效果依次實現(xiàn),并循環(huán)起來;

 

3.1 LED燈硬件電路原理圖分析

WLGK-51單片機接口技術(shù)基礎(chǔ)實驗 ——LED流水燈

這里我們可以看到“WLGK-51ZC開發(fā)板中共有8LED燈。這8路是并列的,也就是說我們學(xué)會控制一路LED燈,就可以學(xué)會控制8LED燈。

LED點亮的條件:當(dāng)陽極與陰極之間電壓的壓降到達一定參考值時,LED就會發(fā)光點亮,下面是一個壓降的參考值。這里我們可以看到上圖VCCJP4端子用短線帽接上后,電壓為5V,然后每一路LED串聯(lián)了一個電阻(排阻),這個LED兩端的壓降(LED陽極電壓-LED陰極電壓)只要滿足下面的值,就可以點亮。

所以我們當(dāng)我們給P000V的電壓的時候,經(jīng)過二極管的電流就可以點亮LED。

3.2 單步控制LED

WLGK-51單片機接口技術(shù)基礎(chǔ)實驗 ——LED流水燈

我們先來實驗一下控制P00LED燈(D2)亮,其他路燈(D3-D9)熄滅。

OK,下面看一下完整的程序:

/******************************************************************

*                                                                 

* WLGK-51ZC開發(fā)板接口技術(shù)基礎(chǔ)實驗-LED流水燈-演示程序                 

*                                                                 

* 版本: V1.0 (2015/9/27)                                          

* 作者:  阿甘 (單片機技術(shù)交流群:477250411 )                                 

* 網(wǎng)站:  www.wanligaoke.com(萬立高科)                            

*                                                                 

*                                                                 

******************************************************************/

 

#include<reg52.h>

/*****************************************************************

第一行是一個"文件包含"處理。

所謂"文件包含"是指一個文件將另外一個文件的內(nèi)容全部包含進來

這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行

*******************************************************************/

sbit dat0=P0^0;                                         //定義IO口,P00對應(yīng)的IO控制口

sbit dat1=P0^1;                                         //定義IO口,P01對應(yīng)的IO控制口

sbit dat2=P0^2;                                         //定義IO口,P02對應(yīng)的IO控制口

sbit dat3=P0^3;                                         //定義IO口,P03對應(yīng)的IO控制口

sbit dat4=P0^4;                                         //定義IO口,P04對應(yīng)的IO控制口

sbit dat5=P0^5;                                         //定義IO口,P05對應(yīng)的IO控制口

sbit dat6=P0^6;                                         //定義IO口,P06對應(yīng)的IO控制口

sbit dat7=P0^7;                                         //定義IO口,P07對應(yīng)的IO控制口

 

void delay02s(void)                            //約延時0.2秒子程序

{

       unsigned  char i,j,k;                   //定義3個無符號字符型數(shù)據(jù)。

       for(i=20;i>0;i--)//作循環(huán)延時

{                         

          for(j=20;j>0;j--)

        {

              for(k=240;k>0;k--);

        }

     }

}

 

void main(void)                                        //每一個C語言程序有且只有一個主函數(shù),

{

       while(1)                                         //循環(huán)條件永遠為真,以下程序一直執(zhí)行下去。

       {

              dat0=0;                                   //  I/OP0.0輸出高電平,小燈點亮。

         dat1=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat2=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat3=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat4=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat5=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat6=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat7=1;                                   // I/OP0.0輸出高電平,小燈點滅。

 

delay02s();                                 //延時經(jīng)過0.2秒。    

 

//這里加上全部熄滅的控制,主要是為了效果觀察更明顯

              dat0=1;                                   //  I/OP0.0輸出高電平,小燈點亮。

         dat1=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat2=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat3=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat4=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat5=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat6=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat7=1;                                   // I/OP0.0輸出高電平,小燈點滅。

 

         while(1);                    //程序停止在這里,不再往下循環(huán)

       }

}

    實現(xiàn)現(xiàn)象:LEDD2常亮,其他LED燈(D3-D9)熄滅。即已經(jīng)達到了我們的實現(xiàn)目的。

3.2 多步控制LED

   多步控制LED燈,怎么控制了?小伙伴很容易就容易聯(lián)想到將上面的代碼復(fù)制一下稍作修改就可以完成了:

/******************************************************************

*                                                                 

* WLGK-51ZC開發(fā)板接口技術(shù)基礎(chǔ)實驗-LED流水燈-演示程序                 

*                                                                 

* 版本: V1.0 (2015/9/27)                                          

* 作者:  阿甘 (單片機技術(shù)交流群:477250411 )                                 

* 網(wǎng)站:  www.wanligaoke.com(萬立高科)                            

*                                                                 

*                                                                 

******************************************************************/

 

#include<reg52.h>

/*****************************************************************

第一行是一個"文件包含"處理。

所謂"文件包含"是指一個文件將另外一個文件的內(nèi)容全部包含進來

這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行

*******************************************************************/

sbit dat0=P0^0;                                         //定義IO口,P00對應(yīng)的IO控制口

sbit dat1=P0^1;                                         //定義IO口,P01對應(yīng)的IO控制口

sbit dat2=P0^2;                                         //定義IO口,P02對應(yīng)的IO控制口

sbit dat3=P0^3;                                         //定義IO口,P03對應(yīng)的IO控制口

sbit dat4=P0^4;                                         //定義IO口,P04對應(yīng)的IO控制口

sbit dat5=P0^5;                                         //定義IO口,P05對應(yīng)的IO控制口

sbit dat6=P0^6;                                         //定義IO口,P06對應(yīng)的IO控制口

sbit dat7=P0^7;                                         //定義IO口,P07對應(yīng)的IO控制口

 

void delay02s(void)                            //約延時0.2秒子程序

{

       unsigned  char i,j,k;                   //定義3個無符號字符型數(shù)據(jù)。

       for(i=20;i>0;i--)//作循環(huán)延時

{                         

          for(j=20;j>0;j--)

        {

              for(k=240;k>0;k--);

        }

     }

}

 

void main(void)                                        //每一個C語言程序有且只有一個主函數(shù),

{

       while(1)                                         //循環(huán)條件永遠為真,以下程序一直執(zhí)行下去。

       {

              dat0=0;                                   //  I/OP0.0輸出高電平,小燈點亮。

         dat1=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat2=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat3=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat4=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat5=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat6=1;                                   // I/OP0.0輸出高電平,小燈點滅。

         dat7=1;                                   // I/OP0.0輸出高電平,小燈點滅。

delay02s();                                 //延時經(jīng)過0.2秒。    

 

              dat0=1;                                  

         dat1=0;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                        

delay02s();                                 //延時經(jīng)過0.2秒。

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=0;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                  

delay02s();                                 //延時經(jīng)過0.2秒。

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=0;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                  

delay02s();                                 //延時經(jīng)過0.2秒。

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=0;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                  

delay02s();                                 //延時經(jīng)過0.2秒。

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=0;                                  

         dat6=1;                                  

         dat7=1;                                  

delay02s();                                 //延時經(jīng)過0.2秒。

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=0;                                  

         dat7=1;                                  

delay02s();                                 //延時經(jīng)過0.2秒。

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=0;                                  

delay02s();                                 //延時經(jīng)過0.2秒。

 

//這里注釋掉停頓,單片機就會循環(huán)執(zhí)行程序指令

         //while(1);                    //程序停止在這里,不再往下循環(huán)

       }

}

3.3 多步控制LED

   通過上面的兩個例子我們發(fā)現(xiàn)單片機程序?qū)懫饋聿⒉皇俏覀兿胂蟮哪敲蠢щy,如果調(diào)試不出結(jié)果怎么辦?加1while(1);語句就可以調(diào)試,這是很簡單實用的辦法,當(dāng)然更高級的就是單步調(diào)試和仿真器,大家可以自行研究下,我們只要掌握了它的本質(zhì),萬變不離其宗。

   但是我們感覺上面的程序雖然邏輯上十分簡單明了,寫起來還挺費勁的嗯,的確是這樣,有兩種方式:

第一種方式:我們將LED燈的編號控制寫成一個函數(shù),即一個模塊,這個是一種思路,這個隨著大家軟件編程能力的提高,自然而然的會掌握;我不在這里單獨給大家講。

第二種方式:是LED燈的另外一種控制方式,準(zhǔn)備的說是單片機的IO還可以有另外一種控制方式:除了我們在LED閃爍燈實驗里降到的位控制(sbit),還有字節(jié)控制方式,一次就可以控制8IO口,也就是說可以一次控制8LED燈。

   阿甘老師給出參考程序如下,大家仔細(xì)體會一下:

/******************************************************************

*                                                                 

* WLGK-51ZC開發(fā)板接口技術(shù)基礎(chǔ)實驗-LED流水燈-演示程序                 

*                                                                 

* 版本: V1.0 (2015/9/27)                                          

* 作者:  阿甘 (單片機技術(shù)交流群:477250411 )                                 

* 網(wǎng)站:  www.wanligaoke.com(萬立高科)                            

*                                                                 

*                                                                 

******************************************************************/

 

#include<reg52.h>

/*****************************************************************

第一行是一個"文件包含"處理。

所謂"文件包含"是指一個文件將另外一個文件的內(nèi)容全部包含進來

這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行

*******************************************************************/

 

void delay02s(void)                            //約延時0.2秒子程序

{

       unsigned  char i,j,k;                   //定義3個無符號字符型數(shù)據(jù)。

       for(i=20;i>0;i--)//作循環(huán)延時

{                         

          for(j=20;j>0;j--)

        {

              for(k=240;k>0;k--);

        }

     }

}

 

void main(void)                                        //每一個C語言程序有且只有一個主函數(shù),

{

       while(1)                                         //循環(huán)條件永遠為真,以下程序一直執(zhí)行下去。

       {

P0 = 0xfe;                     //即十六進制的0xfe對應(yīng)二進制11111110

delay02s();                                 //延時經(jīng)過0.2秒。    

 

//這里加上全部熄滅的控制,主要是為了效果觀察更明顯

P0 = 0xff;                     //即十六進制的0xfe對應(yīng)二進制11111111

 

         while(1);                    //程序停止在這里,不再往下循環(huán)

       }

}

  很簡單吧:這里阿甘老師要提醒大家的是P0P一定要大寫,這個是在頭文件里面標(biāo)注的一個單片機寄存器標(biāo)號。

  好的,下面大家自己將這個程序改成流水燈的效果,程序的編寫邏輯是一致的。

四、試驗總結(jié)與引申

好了,到這里了,相信小伙伴對LED的使用十分熟練了,留給大家一個任務(wù):

任務(wù):如何實現(xiàn)2路或多路LED的流水效果??

這應(yīng)該是一個很簡單的任務(wù),但是大家一定要動手去做看到效果,做IT行業(yè)什么作重要,嗯,邏輯能力的確很重要,但要想爬上高山,努力和實踐最為重要,我們應(yīng)該從一開始就養(yǎng)成一個實干的態(tài)度,不要紙上談兵。

 

萬立高科-阿甘老師 感謝您的參與,精彩一路相隨?。?!

萬立高科官網(wǎng):www.wanligaoke.com

萬立高科官方商城:http://www.wlgkbj.com

萬立高科淘寶直銷店鋪:https://robot-ds.taobao.com

萬立高科單片機技術(shù)交流群:477250411

 

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI