您好,登錄后才能下訂單哦!
WLGK-51單片機接口技術基礎實驗—LED閃爍燈
當我們開始接觸單片機,首先接觸的第一個實驗就是LED燈的使用,類似于我們學習軟件開始接觸的第一個程序“HelloWorld”,這個實驗是帶領我們走入“軟硬件綜合使用”的一個很好入門示例,51單片機是他的一個載體。下面小伙伴們,讓我們一起來揭開LED的神秘面紗吧!
萬立高科官網:www.wanligaoke.com
萬立高科官方商城:http://www.wlgkbj.com
萬立高科淘寶直銷店鋪:https://robot-ds.taobao.com
萬立高科-單片機技術交流群:477250411
掌握以下方法:
1.掌握LED的電子特性;
2.掌握在實際使用環境下,如何配合硬件原理圖實現LED閃爍燈程序的編寫;
3.掌握如何將編譯生成的可執行文件LED.HEX文件下載到單片機并運行起來看到試驗效果
1.個人微機一臺:Windows操作系統(Win xp或者win7均可以);
2.Keil 4集成開發環境;
3.串口下載線一根;
4.WLGK-51ZC開發板。
在做學習這個試驗之前,我們首先冥想一下:LED閃爍燈是一個什么樣的效果?我相信即使從未接觸過單片機的小伙伴,也很容易想象到是這樣的一個效果:“亮-滅-亮-滅-…”,是這樣一個亮和滅交替的過程。建立這個概念非常重要,下面我們將沿著這個思路一步一步帶你實現這個過程和現象。具體的可以拆分成下面幾步:
首先我們學習在系統上電后如何點亮LED燈;
然后我們學習在LED燈點亮以后,如何將LED燈熄滅;
最后我們學習如何控制LED燈一亮一滅;
這里最后一步,可能有人會問,阿甘老師,LED亮和滅都有了,一亮一滅不是很簡單嗎?把這兩個步驟連接起來不就可以了嗎?嗯,小伙伴都的確很聰明,這里我先帶小伙伴跟我一起聯想一下,一亮一滅,好像是這樣,但是……如果亮和滅之間足夠快,好比“亮-滅-亮”中間“滅”的時間足夠短,是不是就相當于常亮(“亮-亮”),人眼并不能感覺到LED滅的這一個效果,這就是技術理論實現與做產品的一個區別,我們在學習和工作中將會經常遇到類似的思考,這就是我們慢慢積累起來的獨特經驗。這樣一個性質就是LED最基本的一個電子特性,他將深刻的印在我們的腦海里。這就是這個試驗,阿甘老師要給大家講的LED的電子特性,下面的試驗我將帶大家去感覺一下這個效果。
這里我們可以看到“WLGK-51ZC開發板”中共有8路LED燈。這8路是并列的,也就是說我們學會控制一路LED燈,就可以學會控制8路LED燈。
LED點亮的條件:當陽極與陰極之間電壓的壓降到達一定參考值時,LED就會發光點亮,下面是一個壓降的參考值。這里我們可以看到上圖VCC在JP4端子用短線帽接上后,電壓為5V,然后每一路LED串聯了一個電阻(排阻),這個LED兩端的壓降(LED陽極電壓-LED陰極電壓)只要滿足下面的值,就可以點亮。
所以我們當我們給P00端0V的電壓的時候,經過二極管的電流就可以點亮LED。
假設我們現在來控制P00路LED燈,那我們只需要P00端輸出低電平就可以控制LED燈D2。程序上怎么來控制P00端輸出低電平了?答案如下:
sbit dat=P0^0; //定義IO口,P00對應的IO控制口 dat = 0; //P00的標號dat賦值為0,表示為低電平 |
OK,下面看一下完整的程序:
/****************************************************************** * * WLGK-51ZC開發板接口技術基礎實驗-LED閃爍燈-演示程序 * * 版本: V1.0 (2015/9/26) * 作者: 阿甘 (單片機技術交流群:477250411 ) * 網站: www.wanligaoke.com(萬立高科) * * ******************************************************************/
#include<reg52.h> /***************************************************************** 第一行是一個"文件包含"處理。 所謂"文件包含"是指一個文件將另外一個文件的內容全部包含進來 這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行 *******************************************************************/ sbit dat=P0^0; //定義IO口,P00對應的IO控制口
void main(void) //每一個C語言程序有且只有一個主函數, { while(1) //循環條件永遠為真,以下程序一直執行下去。 { dat=0; // I/O口P0.0輸出高電平,小燈點亮。 } } |
實現現象:LED常亮。即已經達到了我們的實現目的。
接上述內容,那么LED如何熄滅?答案很容易想到,如下:
sbit dat=P0^0; //定義IO口,P00對應的IO控制口 dat = 1; //P00的標號dat賦值為1,表示為高電平 |
OK,下面看一下完整的程序:
/****************************************************************** * * WLGK-51ZC開發板接口技術基礎實驗-LED閃爍燈-演示程序 * * 版本: V1.0 (2015/9/26) * 作者: 阿甘 (單片機技術交流群:477250411 ) * 網站: www.wanligaoke.com(萬立高科) * ******************************************************************/
#include<reg52.h> /***************************************************************** 第一行是一個"文件包含"處理。 所謂"文件包含"是指一個文件將另外一個文件的內容全部包含進來 這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行 *******************************************************************/ sbit dat=P0^0; //定義IO口,P00對應的IO控制口
void main(void) //每一個C語言程序有且只有一個主函數, { while(1) //循環條件永遠為真,以下程序一直執行下去。 { dat=1; // I/O口P0.0輸出高電平,小燈點亮。 dat=0; // I/O口P0.0輸出高電平,小燈點亮。 } } |
實現現象:LED長亮。Why?回顧一下我們在一開始講的LED電子特性。那么下面怎么來做了?嗯,有小伙伴說,阿甘老師,在亮和滅之間加一個延時,讓亮常亮一會兒,滅長滅一會兒,這樣不就可以了嗎?嗯,阿甘老師想說的是:事實就是這樣的,我們只是程序的搬運工,哈哈,開個玩笑,完整程序如下:
/****************************************************************** * * WLGK-51ZC開發板接口技術基礎實驗-LED閃爍燈-演示程序 * * 版本: V1.0 (2015/9/26) * 作者: 阿甘 (單片機技術交流群:477250411 ) * 網站: www.wanligaoke.com(萬立高科) * * ******************************************************************/
#include<reg52.h> /***************************************************************** 第一行是一個"文件包含"處理。 所謂"文件包含"是指一個文件將另外一個文件的內容全部包含進來 這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行 *******************************************************************/ sbit dat=P0^0; //定義IO口,P00對應的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) //循環條件永遠為真,以下程序一直執行下去。 { dat=1; // I/O口P0.0輸出高電平,小燈點亮。 delay02s(); //延時經過0.2秒。 dat=0; // I/O口P0.0輸出高電平,小燈點亮。 delay02s(); //延時經過0.2秒。 } } |
實現現象:實現了LED燈一閃一滅的閃爍效果。
有小伙伴會問:阿甘老師,你明明前兩步做的是LED點亮和熄滅的效果,為什么最后弄出來一個閃爍的效果,這和我想要的效果不符??抗議!!!
好的,小伙伴稍安勿躁,阿甘老師來給大家說明一下:
(1) 首先,單片機的程序運行有一個什么特性??單片機的程序運行是一個單流程的環境,也就是說會一步一步的執行,即每一刻單片機MCU運行的時候會順序執行程序。所以寫單片機程序實際看起來就好比在時間的這樣一個維度上去完成搭積木的一個過程,十分有趣,這是阿甘老師要給大家說明的第一點;
(2) 然后,上述的Main函數中的while(1)是做什么用的?防止單片機程序跑飛,不能按照我想要的閃爍效果來講??為什么程序會跑飛了??這是因為外部環境可能會干擾單片機的電氣引腳的電平,比如手指帶靜電碰一下,這個小伙伴很容易理解。但一般這種現象在學習過程中頻率出現較低。但在日后的工作項目中,我們是需要去考慮這樣的一種情況,我們常常需要去設計工業級甚至軍工級的產品,每一種設計細節我們都需要考慮,這個問題隨著小伙伴經驗的慢慢積累,就會慢慢明了解決。我們通常采取的是一種看門狗定時喂狗的方式,這個我會在后面給大家單獨講解。
這里的while(1){}是單片機程序的一個標準寫法,程序如下:
void main(void) //每一個C語言程序有且只有一個主函數, { while(1) //循環條件永遠為真,以下程序一直執行下去。 { …… } } |
(3)如果我們想要程序實現亮和滅的效果怎么實現了?而不是閃爍的效果,也很簡單,程序如下,小伙伴憋說話,用心感受一下:
/****************************************************************** * * WLGK-51ZC開發板接口技術基礎實驗-LED閃爍燈-演示程序 * * 版本: V1.0 (2015/9/26) * 作者: 阿甘 (單片機技術交流群:477250411 ) * 網站: www.wanligaoke.com(萬立高科) * * ******************************************************************/
#include<reg52.h> /***************************************************************** 第一行是一個"文件包含"處理。 所謂"文件包含"是指一個文件將另外一個文件的內容全部包含進來 這里的程序雖然只有短短幾行,但C編譯器在處理的時候卻要處理幾十或幾百行 *******************************************************************/ sbit dat=P0^0; //定義IO口,P00對應的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) //循環條件永遠為真,以下程序一直執行下去。 { dat=1; // I/O口P0.0輸出高電平,小燈點亮。 delay02s(); //延時經過0.2秒。 dat=0; // I/O口P0.0輸出高電平,小燈點亮。 delay02s(); //延時經過0.2秒。
while(1); //程序停止在這里,不再往下循環 } } |
好了,到這里了,相信小伙伴對LED的使用并不陌生了,留給大家一個任務:
任務:如何實現8路LED的同時閃爍?? 給大家一個提示:寫單片機程序實際看起來就好比在時間的這樣一個維度上去完成搭積木的一個過程,所以8路LED燈好比就是1路1路的去控制。當然也可以一次性控制?這個大家自己查詢資料一下看看,不外乎兩種方式,要求大家兩種方式都需要掌握: 第一種:1路1路的去控制每一路LED燈同時“亮”和同時“滅”; 第二種:一次控制8路LED燈“亮”和同時“滅”。 |
萬立高科-阿甘老師 感謝您的參與,精彩一路相隨!!!
萬立高科官網:www.wanligaoke.com
萬立高科官方商城:http://www.wlgkbj.com
萬立高科淘寶直銷店鋪:https://robot-ds.taobao.com
萬立高科單片機技術交流群:477250411
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。