溫馨提示×

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

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

WLGK-51單片機(jī)接口技術(shù)基礎(chǔ)實(shí)驗(yàn) ——LED閃爍燈

發(fā)布時(shí)間:2020-07-23 09:11:33 來(lái)源:網(wǎng)絡(luò) 閱讀:1248 作者:wanligaoke 欄目:開(kāi)發(fā)技術(shù)

WLGK-51單片機(jī)接口技術(shù)基礎(chǔ)實(shí)驗(yàn)LED閃爍燈

當(dāng)我們開(kāi)始接觸單片機(jī),首先接觸的第一個(gè)實(shí)驗(yàn)就是LED燈的使用,類(lèi)似于我們學(xué)習(xí)軟件開(kāi)始接觸的第一個(gè)程序“HelloWorld”,這個(gè)實(shí)驗(yàn)是帶領(lǐng)我們走入“軟硬件綜合使用”的一個(gè)很好入門(mén)示例,51單片機(jī)是他的一個(gè)載體。下面小伙伴們,讓我們一起來(lái)揭開(kāi)LED的神秘面紗吧!

 

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

萬(wàn)立高科官方商城:http://www.wlgkbj.com

萬(wàn)立高科淘寶直銷(xiāo)店鋪:https://robot-ds.taobao.com

萬(wàn)立高科-單片機(jī)技術(shù)交流群:477250411

一、  實(shí)驗(yàn)?zāi)康?/span>

掌握以下方法:

1.掌握LED的電子特性;

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

3.掌握如何將編譯生成的可執(zhí)行文件LED.HEX文件下載到單片機(jī)并運(yùn)行起來(lái)看到試驗(yàn)效果

二、實(shí)驗(yàn)環(huán)境

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

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

3.串口下載線(xiàn)一根;

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

三、試驗(yàn)步驟

在做學(xué)習(xí)這個(gè)試驗(yàn)之前,我們首先冥想一下:LED閃爍燈是一個(gè)什么樣的效果?我相信即使從未接觸過(guò)單片機(jī)的小伙伴,也很容易想象到是這樣的一個(gè)效果:“亮----…,是這樣一個(gè)亮和滅交替的過(guò)程。建立這個(gè)概念非常重要,下面我們將沿著這個(gè)思路一步一步帶你實(shí)現(xiàn)這個(gè)過(guò)程和現(xiàn)象。具體的可以拆分成下面幾步:

  • 首先我們學(xué)習(xí)在系統(tǒng)上電后如何點(diǎn)亮LED燈;

  • 然后我們學(xué)習(xí)在LED燈點(diǎn)亮以后,如何將LED燈熄滅;

  • 最后我們學(xué)習(xí)如何控制LED燈一亮一滅;

 

這里最后一步,可能有人會(huì)問(wèn),阿甘老師,LED亮和滅都有了,一亮一滅不是很簡(jiǎn)單嗎?把這兩個(gè)步驟連接起來(lái)不就可以了嗎?嗯,小伙伴都的確很聰明,這里我先帶小伙伴跟我一起聯(lián)想一下,一亮一滅,好像是這樣,但是……如果亮和滅之間足夠快,好比“亮--亮”中間“滅”的時(shí)間足夠短,是不是就相當(dāng)于常亮(“亮-亮”),人眼并不能感覺(jué)到LED滅的這一個(gè)效果,這就是技術(shù)理論實(shí)現(xiàn)與做產(chǎn)品的一個(gè)區(qū)別,我們?cè)趯W(xué)習(xí)和工作中將會(huì)經(jīng)常遇到類(lèi)似的思考,這就是我們慢慢積累起來(lái)的獨(dú)特經(jīng)驗(yàn)。這樣一個(gè)性質(zhì)就是LED最基本的一個(gè)電子特性,他將深刻的印在我們的腦海里。這就是這個(gè)試驗(yàn),阿甘老師要給大家講的LED的電子特性,下面的試驗(yàn)我將帶大家去感覺(jué)一下這個(gè)效果。

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

WLGK-51單片機(jī)接口技術(shù)基礎(chǔ)實(shí)驗(yàn) ——LED閃爍燈

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

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

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

3.2 LED燈點(diǎn)亮

WLGK-51單片機(jī)接口技術(shù)基礎(chǔ)實(shí)驗(yàn) ——LED閃爍燈

假設(shè)我們現(xiàn)在來(lái)控制P00LED燈,那我們只需要P00端輸出低電平就可以控制LEDD2。程序上怎么來(lái)控制P00端輸出低電平了?答案如下:

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

dat = 0                                     //P00的標(biāo)號(hào)dat賦值為0,表示為低電平

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

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

*                                                                 

* WLGK-51ZC開(kāi)發(fā)板接口技術(shù)基礎(chǔ)實(shí)驗(yàn)-LED閃爍燈-演示程序                 

*                                                                

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

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

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

*                                                                

*                                                                

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

 

#include<reg52.h>

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

第一行是一個(gè)"文件包含"處理。

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

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

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

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

 

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

{

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

       {

              dat=0;                                    //  I/OP0.0輸出高電平,小燈點(diǎn)亮。

       }

}

     

實(shí)現(xiàn)現(xiàn)象:LED常亮。即已經(jīng)達(dá)到了我們的實(shí)現(xiàn)目的。

3.2 LED燈熄滅

接上述內(nèi)容,那么LED如何熄滅?答案很容易想到,如下:

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

dat = 1;                                     //P00的標(biāo)號(hào)dat賦值為1,表示為高電平

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

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

*                                                                 

* WLGK-51ZC開(kāi)發(fā)板接口技術(shù)基礎(chǔ)實(shí)驗(yàn)-LED閃爍燈-演示程序                 

*                                                                 

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

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

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

*                                                                 

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

 

#include<reg52.h>

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

第一行是一個(gè)"文件包含"處理。

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

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

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

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

 

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

{

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

       {

              dat=1;                                     //  I/OP0.0輸出高電平,小燈點(diǎn)亮。

         dat=0;                                    // I/OP0.0輸出高電平,小燈點(diǎn)亮。

       }

}

實(shí)現(xiàn)現(xiàn)象:LED長(zhǎng)亮。Why?回顧一下我們?cè)谝婚_(kāi)始講的LED電子特性。那么下面怎么來(lái)做了?嗯,有小伙伴說(shuō),阿甘老師,在亮和滅之間加一個(gè)延時(shí),讓亮常亮一會(huì)兒,滅長(zhǎng)滅一會(huì)兒,這樣不就可以了嗎?嗯,阿甘老師想說(shuō)的是:事實(shí)就是這樣的,我們只是程序的搬運(yùn)工,哈哈,開(kāi)個(gè)玩笑,完整程序如下:

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

*                                                                 

* WLGK-51ZC開(kāi)發(fā)板接口技術(shù)基礎(chǔ)實(shí)驗(yàn)-LED閃爍燈-演示程序                 

*                                                                 

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

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

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

*                                                                 

*                                                                 

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

 

#include<reg52.h>

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

第一行是一個(gè)"文件包含"處理。

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

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

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

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

 

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

{

       unsigned  char i,j,k;                   //定義3個(gè)無(wú)符號(hào)字符型數(shù)據(jù)。

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

{                         

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

        {

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

        }

     }

}

 

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

{

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

       {

              dat=1;                                    //  I/OP0.0輸出高電平,小燈點(diǎn)亮。

delay02s();                                 //延時(shí)經(jīng)過(guò)0.2秒。

         dat=0;                                    // I/OP0.0輸出高電平,小燈點(diǎn)亮。

         delay02s();                                 //延時(shí)經(jīng)過(guò)0.2秒。

       }

}

實(shí)現(xiàn)現(xiàn)象:實(shí)現(xiàn)了LED燈一閃一滅的閃爍效果。

3.2 LED燈閃爍

   有小伙伴會(huì)問(wèn):阿甘老師,你明明前兩步做的是LED點(diǎn)亮和熄滅的效果,為什么最后弄出來(lái)一個(gè)閃爍的效果,這和我想要的效果不符??抗議!??!

   好的,小伙伴稍安勿躁,阿甘老師來(lái)給大家說(shuō)明一下:

(1)   首先,單片機(jī)的程序運(yùn)行有一個(gè)什么特性??單片機(jī)的程序運(yùn)行是一個(gè)單流程的環(huán)境,也就是說(shuō)會(huì)一步一步的執(zhí)行,即每一刻單片機(jī)MCU運(yùn)行的時(shí)候會(huì)順序執(zhí)行程序。所以寫(xiě)單片機(jī)程序?qū)嶋H看起來(lái)就好比在時(shí)間的這樣一個(gè)維度上去完成搭積木的一個(gè)過(guò)程,十分有趣,這是阿甘老師要給大家說(shuō)明的第一點(diǎn);

(2)   然后,上述的Main函數(shù)中的while(1)是做什么用的?防止單片機(jī)程序跑飛,不能按照我想要的閃爍效果來(lái)講??為什么程序會(huì)跑飛了??這是因?yàn)橥獠凯h(huán)境可能會(huì)干擾單片機(jī)的電氣引腳的電平,比如手指帶靜電碰一下,這個(gè)小伙伴很容易理解。但一般這種現(xiàn)象在學(xué)習(xí)過(guò)程中頻率出現(xiàn)較低。但在日后的工作項(xiàng)目中,我們是需要去考慮這樣的一種情況,我們常常需要去設(shè)計(jì)工業(yè)級(jí)甚至軍工級(jí)的產(chǎn)品,每一種設(shè)計(jì)細(xì)節(jié)我們都需要考慮,這個(gè)問(wèn)題隨著小伙伴經(jīng)驗(yàn)的慢慢積累,就會(huì)慢慢明了解決。我們通常采取的是一種看門(mén)狗定時(shí)喂狗的方式,這個(gè)我會(huì)在后面給大家單獨(dú)講解。

這里的while(1){}是單片機(jī)程序的一個(gè)標(biāo)準(zhǔn)寫(xiě)法,程序如下:

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

{

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

       {

       ……

       }

}

3)如果我們想要程序?qū)崿F(xiàn)亮和滅的效果怎么實(shí)現(xiàn)了?而不是閃爍的效果,也很簡(jiǎn)單,程序如下,小伙伴憋說(shuō)話(huà),用心感受一下:

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

*                                                                 

* WLGK-51ZC開(kāi)發(fā)板接口技術(shù)基礎(chǔ)實(shí)驗(yàn)-LED閃爍燈-演示程序                 

*                                                                 

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

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

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

*                                                                 

*                                                                 

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

 

#include<reg52.h>

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

第一行是一個(gè)"文件包含"處理。

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

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

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

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

 

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

{

       unsigned  char i,j,k;                   //定義3個(gè)無(wú)符號(hào)字符型數(shù)據(jù)。

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

{                         

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

        {

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

        }

     }

}

 

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

{

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

       {

              dat=1;                                    //  I/OP0.0輸出高電平,小燈點(diǎn)亮。

delay02s();                                 //延時(shí)經(jīng)過(guò)0.2秒。

         dat=0;                                    // I/OP0.0輸出高電平,小燈點(diǎn)亮。

         delay02s();                                 //延時(shí)經(jīng)過(guò)0.2秒。

         

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

       }

}

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

好了,到這里了,相信小伙伴對(duì)LED的使用并不陌生了,留給大家一個(gè)任務(wù):

任務(wù):如何實(shí)現(xiàn)8LED的同時(shí)閃爍??

給大家一個(gè)提示:寫(xiě)單片機(jī)程序?qū)嶋H看起來(lái)就好比在時(shí)間的這樣一個(gè)維度上去完成搭積木的一個(gè)過(guò)程,所以8LED燈好比就是11路的去控制。當(dāng)然也可以一次性控制?這個(gè)大家自己查詢(xún)資料一下看看,不外乎兩種方式,要求大家兩種方式都需要掌握:

第一種:11路的去控制每一路LED燈同時(shí)“亮”和同時(shí)“滅”;

第二種:一次控制8LED燈“亮”和同時(shí)“滅”。

 

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

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

萬(wàn)立高科官方商城:http://www.wlgkbj.com

萬(wàn)立高科淘寶直銷(xiāo)店鋪:https://robot-ds.taobao.com

萬(wàn)立高科單片機(jī)技術(shù)交流群:477250411

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

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

AI