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