C51單片機(jī)發(fā)光二極管實例程序集
1、
程序?qū)崿F(xiàn)功能:讓8個排列的LED來回流動著亮1—》...——》8 1《——...《——8 箭頭代表LED流動方向,先從1-8然后從8到1依次循環(huán)。程序已經(jīng)測試過,運(yùn)行正常//大家如果用此代碼測試的話注意你的LED接在單片機(jī)的那個端口,本代碼用的是P2口
#include
#define uint unsigned int
#define uchar unsigned char
uchar a,b;
uchar code led_array[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
}; //led顯示編碼數(shù)組,從0xfe——0x7f為從第一個led管到第8個led管一次亮一個格式為0fff fffff0ff ffffff0f ffff...ffff fff0 led從1開始亮,到第8個LED時開始反向以次流動著亮ffff fff0ffff ff0fffff f0ff...0fff ffff(注:0代表亮;1代表不亮)不知道大家看懂我寫的意思了沒....
void delay(uint x)
{
uint z,y;
for(z=x;z>0;z--)
for(y=110;y>0;y--);
}//延時函數(shù)
void sumup_ini()
{
P2=0xfe;//
}//總初始化函數(shù),本人喜歡模塊化寫程序,不過這個模塊一太小了..咳咳咳?。?!
void main()
{
sumup_ini();//調(diào)用總初始化函數(shù)
while(1)這個不用說了吧!
{
for(a=0;a<8;a++)
{
P2=led_array[a];
if(P2!=led_array[7]) //這里用if判斷LED是否亮到了最后一個,如果已經(jīng)是最后一個,則不執(zhí)行延時函數(shù),否則LED每移動一位都要執(zhí)行以下延時
/*(這里解釋以下為什么判斷LED是否亮到最后一個,因為如果LED已經(jīng)是最后一個亮了還執(zhí)行延時的話,就會與反向流動函數(shù)的初始值相同led_array[7]是LED反向流動亮的第一位是LED反向流動的最后一位,所以如果不用if判斷的話就相當(dāng)于在led_array[7]是延時了2倍的其它LED亮的時間...為了讓每個LED亮的時間長短相等所以我就用if判斷了以下)*/
delay(500);
} //LED正向流動亮
for(b=7;b>0;b--)
{
P2=led_array[b];
delay(500);
} //LED方向流動亮
}
}





