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