不論學習什么單片機,最簡單的外設(shè)莫過于IO口的高低電平控制。而對于一個IO口的高低電平控制入門階段將是從點亮一個LED開始的。
本章將介紹在如何創(chuàng)建號的工程模板上,通過控制51單片機的GPIO口,點亮一個LED燈。
發(fā)光二極管
發(fā)光二極管(Light Emitting Diode)簡稱LED,是一種會發(fā)光的半導(dǎo)體組件且具備二極管的電子特性,具有正向?qū)ǖ奶匦?/p>
發(fā)光二極管的參數(shù)
正向?qū)妷海?/p>
發(fā)光二極管通常的正向?qū)妷菏?.8V到2.2V之間
工作電流:
工作電流一般在1mA~20mA之間
其中,當電流在1mA ~ 5mA之間變化時,隨之通過LED的電流越來 越大,肉眼可以感覺到這個小燈越來越亮,而當電流從5mA~20mA之間變化時,肉眼看到發(fā)光二極管的亮度變化不是很明顯。當電流超過20mA時,LED就會有燒壞的危險。通常在led管腳上串聯(lián)一個電阻,目的是為了限制通過LED的電流不要太大,起到了限流的作用。
如何識別原理圖
拿到一塊開發(fā)板的同時,我們還需要查閱它的原理圖,讀懂它的電路連接方式。
如下圖:

從上圖可以看出,圖中的P5.5表示兩處是連接在一起的。表示連接在單片機的第19引腳,對應(yīng)為STC15W的5.5串口。
在例如圖中的LED流水燈,LED控制管腳連接在單片機的IO口上。LED采用共陽接法,及所有的LED陽極(既正極,陰極為負極)管腳接在電源VCC,同時LED還串聯(lián)著一個電阻接到單片機的P2口上。根據(jù)電路常識,要LED發(fā)光,既對應(yīng)的單片機IO口需要的電平為低電平。反之,高電平則熄滅。
其他也是在原理圖上的都可以以此類推。
軟件設(shè)計
對單片機原理圖有所理解之后,接下來就是對單片機進行程序的編寫以及燒錄。
問題一:如何點亮LED。

第一次要實現(xiàn)的功能就是點亮D1位置的LED,如圖所示,D1位置的發(fā)光二極管連接在單片機的P2.0 IO口,即讓P2.0輸出低電平


#include < reg51.h >//引入包51單片機的一個頭文件
sbit LED_D1=P2^0;// 將單片機的P2.0IO口定義為LED_D1
int main()
{
while(1)
{
LED_D1=0; // “0”即為低電平,“1”即為高電平,
}
}
當編譯器編譯成功沒有報錯的時候,在軟件界面下方會顯示以上的編譯結(jié)果信息,表示沒有任何問題。
當代碼編寫沒有任何問題的時候,接下里就需要對單片機進行燒錄。
首先,在狀態(tài)欄點擊魔術(shù)棒-->Output-->打勾“Create HEX File”-->生成目標文件 ”.hex“ 文件。
在程序目錄下可以查看目標文件——“.hex”文件。

也可以通過點擊下圖所示位置,更改文件位置或者查看文件目錄。

打開燒錄軟件
第一步:選擇對應(yīng)的單片機芯片
第二部:查看COM口(也就是單片機連接電腦,所查的USB口)
第三步:打開程序文件,也就是剛剛上一步所生成的目標文件——.hex文件。
第四步:在下圖“4”位置會顯示經(jīng)過解碼的程序文件。
第五步:點擊“下載/編程”按鈕
第六步:在下圖,位置“6”會顯示操作成功的文字。既燒錄成功。
注意:在每一次燒錄時,應(yīng)該對單片機進行一次斷電上電,該步驟稱為單片機的冷啟動,才能繼續(xù)燒錄程序。

此時單片機上的LED燈為發(fā)光。

問題二:如果要點亮所有的LED,需要怎么做呢?

源碼復(fù)制
#include < reg51.h >//引入包51單片機的一個頭文件
sbit LED_D1=P2^0;// 將單片機的P2.0IO口定義為LED_D1
sbit LED_D2=P2^1;// 將單片機的P2.0IO口定義為LED_D2
sbit LED_D3=P2^2;// 將單片機的P2.0IO口定義為LED_D3
sbit LED_D4=P2^3;// 將單片機的P2.0IO口定義為LED_D4
sbit LED_D5=P2^4;// 將單片機的P2.0IO口定義為LED_D5
sbit LED_D6=P2^5;// 將單片機的P2.0IO口定義為LED_D6
sbit LED_D7=P2^6;// 將單片機的P2.0IO口定義為LED_D7
sbit LED_D8=P2^7;// 將單片機的P2.0IO口定義為LED_D8、
int main()
{
while(1)
{
LED_D1=0; // “0”即為低電平,“1”即為高電平,
LED_D2=0;
LED_D3=0;
LED_D4=0;
LED_D5=0;
LED_D6=0;
LED_D7=0;
LED_D8=0;
}
}
進行同樣的燒錄下載后,效果如下

經(jīng)手機調(diào)整曝光度后的效果。
問題三:如何簡化程序。
顯然這種寫法會顯得很累贅,假如有100個LED燈,那么不就是需要寫100次的“sbit LED_D1=P2^0”,顯然是不可能的。這種叫位操作。在某一些方面這一寫法很方便,但是在如上面的情況就顯得很麻煩。

源碼復(fù)制
#include < reg51.h >int main(){ while (1) { P2=0;//或者P2=0X00 }}
其中“P2”就等同于

而“P2=0;”則等同于

或者可以將程序中的“P2=0;”寫成“P2=0x00;”,“0x”表示的是16進制,轉(zhuǎn)成二進制則為“0000 0000”,現(xiàn)在的手機計算機都可以實現(xiàn)進制的轉(zhuǎn)換。
那如果用以上的寫法,單獨的控制某一個LED的亮滅需要怎么做呢?則需要我們需要點亮(熄滅)的LED,在對位的位置置“0”(“1”)。
例如:我們要D4LED熄滅,采用以上寫法,則值需要在D4 LED置“1”即可,轉(zhuǎn)換成十六進制則為“0x10”。

注意:進制的轉(zhuǎn)換,應(yīng)從最低位開始算起。
程序編寫以及燒錄結(jié)果

源碼復(fù)制
#include < reg51.h >
int main()
{
while (1)
{
P2=0x08;
}
}

其他的以此類推。
問題四:如何讓LED閃爍起來。
程序編寫以及燒錄結(jié)果。

源碼復(fù)制
#include < reg51.h >//引入包51單片機的一個頭文件
sbit LED_D1=P2^0;
int main()
{
int i;
while(1)
{
i=10000;
LED_D1=0;
while(i--);
LED_D1=1;
while(i--);
}
}
LED_D1=0;
while(i--);
//兩句代碼的含義為 LED_D1保持低電平一段時間,該時間為 while(i--);
-
單片機
+關(guān)注
關(guān)注
6076文章
45495瀏覽量
670443 -
led燈
+關(guān)注
關(guān)注
22文章
1606瀏覽量
111871 -
發(fā)光二極管
+關(guān)注
關(guān)注
14文章
1243瀏覽量
69137 -
51單片機
+關(guān)注
關(guān)注
278文章
5714瀏覽量
134366 -
GPIO
+關(guān)注
關(guān)注
16文章
1328瀏覽量
56231
發(fā)布評論請先 登錄
51單片機如何跳出wile循環(huán)_51單片機閃爍LED燈
基于51單片機點亮一個LED燈(一)
評論