亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

WLGK-51單片機接口技術基礎實驗 ——LED流水燈

發布時間:2020-07-21 03:09:57 來源:網絡 閱讀:714 作者:wanligaoke 欄目:開發技術

WLGK-51單片機接口技術基礎實驗

——LED流水燈

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

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

 

萬立高科官網:www.wanligaoke.com

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

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

萬立高科-單片機技術交流群:477250411

一、  實驗目的

掌握以下方法:

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

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

二、實驗環境

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

2Keil 4集成開發環境;

3.串口下載線一根;

4WLGK-51ZC開發板。

三、試驗步驟

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

 

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

  • 首先我們學習在系統上電后如何點亮1LED燈,而其他LED燈熄滅;

  • 然后我們學習將8LED燈都按照這個效果依次實現,并循環起來;

 

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

WLGK-51單片機接口技術基礎實驗 ——LED流水燈

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

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

所以我們當我們給P000V的電壓的時候,經過二極管的電流就可以點亮LED

3.2 單步控制LED

WLGK-51單片機接口技術基礎實驗 ——LED流水燈

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

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

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

*                                                                 

* WLGK-51ZC開發板接口技術基礎實驗-LED流水燈-演示程序                 

*                                                                 

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

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

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

*                                                                 

*                                                                 

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

 

#include<reg52.h>

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

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

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

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

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

sbit dat0=P0^0;                                         //定義IO口,P00對應的IO控制口

sbit dat1=P0^1;                                         //定義IO口,P01對應的IO控制口

sbit dat2=P0^2;                                         //定義IO口,P02對應的IO控制口

sbit dat3=P0^3;                                         //定義IO口,P03對應的IO控制口

sbit dat4=P0^4;                                         //定義IO口,P04對應的IO控制口

sbit dat5=P0^5;                                         //定義IO口,P05對應的IO控制口

sbit dat6=P0^6;                                         //定義IO口,P06對應的IO控制口

sbit dat7=P0^7;                                         //定義IO口,P07對應的IO控制口

 

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

{

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

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

{                         

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

        {

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

        }

     }

}

 

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

{

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

       {

              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();                                 //延時經過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);                    //程序停止在這里,不再往下循環

       }

}

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

3.2 多步控制LED

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

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

*                                                                 

* WLGK-51ZC開發板接口技術基礎實驗-LED流水燈-演示程序                 

*                                                                 

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

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

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

*                                                                 

*                                                                 

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

 

#include<reg52.h>

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

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

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

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

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

sbit dat0=P0^0;                                         //定義IO口,P00對應的IO控制口

sbit dat1=P0^1;                                         //定義IO口,P01對應的IO控制口

sbit dat2=P0^2;                                         //定義IO口,P02對應的IO控制口

sbit dat3=P0^3;                                         //定義IO口,P03對應的IO控制口

sbit dat4=P0^4;                                         //定義IO口,P04對應的IO控制口

sbit dat5=P0^5;                                         //定義IO口,P05對應的IO控制口

sbit dat6=P0^6;                                         //定義IO口,P06對應的IO控制口

sbit dat7=P0^7;                                         //定義IO口,P07對應的IO控制口

 

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

{

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

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

{                         

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

        {

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

        }

     }

}

 

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

{

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

       {

              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();                                 //延時經過0.2秒。    

 

              dat0=1;                                  

         dat1=0;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                        

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

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=0;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                  

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

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=0;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                  

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

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=0;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=1;                                  

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

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=0;                                  

         dat6=1;                                  

         dat7=1;                                  

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

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=0;                                  

         dat7=1;                                  

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

 

              dat0=1;                                  

         dat1=1;                                  

         dat2=1;                                  

         dat3=1;                                  

         dat4=1;                                  

         dat5=1;                                  

         dat6=1;                                  

         dat7=0;                                  

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

 

//這里注釋掉停頓,單片機就會循環執行程序指令

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

       }

}

3.3 多步控制LED

   通過上面的兩個例子我們發現單片機程序寫起來并不是我們想象的那么困難,如果調試不出結果怎么辦?加1while(1);語句就可以調試,這是很簡單實用的辦法,當然更高級的就是單步調試和仿真器,大家可以自行研究下,我們只要掌握了它的本質,萬變不離其宗。

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

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

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

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

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

*                                                                 

* WLGK-51ZC開發板接口技術基礎實驗-LED流水燈-演示程序                 

*                                                                 

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

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

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

*                                                                 

*                                                                 

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

 

#include<reg52.h>

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

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

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

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

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

 

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

{

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

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

{                         

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

        {

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

        }

     }

}

 

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

{

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

       {

P0 = 0xfe;                     //即十六進制的0xfe對應二進制11111110

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

 

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

P0 = 0xff;                     //即十六進制的0xfe對應二進制11111111

 

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

       }

}

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

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

四、試驗總結與引申

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

任務:如何實現2路或多路LED的流水效果??

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

 

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

萬立高科官網:www.wanligaoke.com

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

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

萬立高科單片機技術交流群:477250411

 

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陵水| 板桥市| 慈溪市| 永福县| 南昌县| 襄汾县| 湘阴县| 理塘县| 武功县| 东乡县| 张家口市| 关岭| 留坝县| 宁化县| 承德县| 区。| 凯里市| 都匀市| 内乡县| 淳安县| 疏勒县| 陆川县| 松溪县| 东莞市| 科尔| 天祝| 孟州市| 饶平县| 建瓯市| 上思县| 梅州市| 丹巴县| 沙洋县| 赤壁市| 竹山县| 涟水县| 乌拉特前旗| 阜南县| 榆林市| 宜阳县| 莱西市|