就如你學(xué)習(xí)編程語言你寫下的“Hello world”,LED流水燈也是這樣的一個例子。通過這個實驗,我們可以快速了解到51單片機I/O口的基本用法,以及LED燈的基本原理。
LED(發(fā)光二極管),是一種能夠?qū)㈦娔苻D(zhuǎn)化為光能的固態(tài)半導(dǎo)體器件。LED有兩個端口一端接正極一端接負(fù)極,當(dāng)LED正向偏壓(正極接電源正極)時,LED將發(fā)光。LED的發(fā)光電流一般為5-15ma。由于單片機I/O口的輸出電流太小,所以我們無法用I/O口直接驅(qū)動LED的。
想要LED能通過單片機I/O口對LED進(jìn)行控制,首先我們需要將LED一端接一電阻,電阻這里選擇470歐姆,電阻的一端接5V電源,LED的另一端單片機I/O口。在本次實驗中我將P2口全部用上,連8個LED,8LED分別連470歐姆電阻,8個470歐姆電阻串聯(lián)起來,連接到5V電源。
如何控制LED燈的亮滅?我們知道,我LED正向偏壓的時候,LED會亮。也就是說當(dāng)你往LED對應(yīng)的I/O口清零或者置一LED等就會亮或者滅(清零亮還是置一亮取決于LED正極還是負(fù)極與電源相連)。
下面是具體代碼:
#include
#define LED_PROT P2//宏定義P2口
void delay_1ms(unsigned short );//不精準(zhǔn)延時函數(shù)
//P2有八個管腳,0xfe對應(yīng)的二進(jìn)制數(shù)為0b11111110,也就是讓p2.7-p2.1輸出高電平,p2.0輸出點電平,此時p2.0口對應(yīng)的LED亮
unsigned int LED[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{
while(1){
unsigned char i;
for(i=0;i<8;i++){
LED_PROT=LED[i];
delay_1ms(100);//循環(huán)每次取數(shù)組一個數(shù),讓對應(yīng)的p2.x口亮,并且延時。
}
}
}
void delay_1ms(unsigned short t_ms)
{
int i,j;
while(t_ms--){
for(i=0;i<100;i++)
for(j=0;j<10;j++);
}
}