|
對(duì)一個(gè)單片機(jī)新手,遇到的第一個(gè)問題往往是如何使用單片機(jī)點(diǎn)亮LED,這就好比學(xué)習(xí)編程語言第一個(gè)程序的HelloWorld。
這里默認(rèn)大家已經(jīng)裝好了KEIL的開發(fā)環(huán)境及燒寫器,有自己的單片機(jī)開發(fā)板,假設(shè)單片機(jī)的P0口接了八個(gè)LED,電路圖入下圖:
其中JPP0接的是高電平5V,而L0.0到L0.7接的分別是P0.7到P0.0這樣的話如果
P0.7到P0.0上電平是高電平,那么這個(gè)led的壓降就是0,led不亮,如果P0.7到P0.0上電平是低電平,那么led上就會(huì)產(chǎn)生壓降,led就會(huì)亮。
那么點(diǎn)亮其中一個(gè)的程序如下:
#include<reg51.h> //包含單片機(jī)寄存器的頭文件
void main(void)
{
while(1)
{
P0=0xfe; //第一個(gè)燈亮
P0=0xff; //第一個(gè)燈滅
}
}
對(duì),就是這么簡(jiǎn)單,P0=0xfe,相當(dāng)于P0=11111110,這時(shí)候P0.0=0,燈L0.7亮,然后P0=0xff,相當(dāng)于P0=11111111,這時(shí)候P0.0=1,燈L0.7滅,然后由于這兩句是放在while(1)中的由于其中1是while{}中的語句執(zhí)行的條件,由于1始終為真,所以這兩句循環(huán)執(zhí)行。燈L0.7就在不斷閃爍,亮滅,但由于閃爍的速度很快,由于視覺暫留,你看到的是燈一直亮著。
接下來來個(gè)流水燈,大家嘗試自己分析程序的原理:
#include<reg51.h> //包含單片機(jī)寄存器的頭文件
/****************************************
函數(shù)功能:延時(shí)一段時(shí)間
*****************************************/
void delay(void)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/*******************************************************
函數(shù)功能:主函數(shù)
********************************************************/
void main(void)
{
while(1)
{
P0=0xfe; //第一個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0xfd; //第二個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0xfb; //第三個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0xf7; //第四個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0xef; //第五個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0xdf; //第六個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0xbf; //第七個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
P0=0x7f; //第八個(gè)燈亮
delay(); //調(diào)用延時(shí)函數(shù)
}
}
這時(shí)候這八個(gè)燈就愉快的流動(dòng)閃爍了。
|
|