|
|
話不多說(shuō),直接上單片機(jī)代碼
void digdisplay(){
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case(0):LSA=0;LSB=0;LSC=0;break;
case(1):LSA=1;LSB=0;LSC=0;break;
case(2):LSA=0;LSB=1;LSC=0;break;
case(3):LSA=1;LSB=1;LSC=0;break;
case(4):LSA=0;LSB=0;LSC=1;break;
case(5):LSA=1;LSB=0;LSC=1;break;
case(6):LSA=0;LSB=1;LSC=1;break;
case(7):LSA=1;LSB=1;LSC=1;break;
}
P0=smgduan[i];
delay(200);
P0=0x00;
}
}
這是用了138譯碼器寫(xiě)的動(dòng)態(tài)數(shù)碼管顯示7-0這8個(gè)數(shù)字的一個(gè)函數(shù),其余部分都沒(méi)有什么問(wèn)題,程序可以正常運(yùn)行,數(shù)碼管也是按照希望的從右到左順序循環(huán)顯示,但是我想讓它從右到左顯示,就把程序改成了下列形式void digdisplay()
{
u8 i;
for(i=7;i>=0;i--)
{
switch(i)
{
case(0):LSA=0;LSB=0;LSC=0;break;
case(1):LSA=1;LSB=0;LSC=0;break;
case(2):LSA=0;LSB=1;LSC=0;break;
case(3):LSA=1;LSB=1;LSC=0;break;
case(4):LSA=0;LSB=0;LSC=1;break;
case(5):LSA=1;LSB=0;LSC=1;break;
case(6):LSA=0;LSB=1;LSC=1;break;
case(7):LSA=1;LSB=1;LSC=1;break;
}
P0=smgduan[i];
delay(200);
P0=0x00;
}
}
按道理來(lái)說(shuō)是沒(méi)有問(wèn)題的啊,但是正真的情況是它會(huì)從右到左顯示7-0之后,最后一位數(shù)碼管就變成了8,然后卡死在這里,很長(zhǎng)時(shí)間(大概40s)之后重復(fù)顯示7-0.這就不太明白啦。然后我就把程序修改成如下形式
void digdisplay()
{
u8 i;
for(i=8;i>0;i--)
{
switch(i)
{
case(1):LSA=0;LSB=0;LSC=0;break;
case(2):LSA=1;LSB=0;LSC=0;break;
case(3):LSA=0;LSB=1;LSC=0;break;
case(4):LSA=1;LSB=1;LSC=0;break;
case(5):LSA=0;LSB=0;LSC=1;break;
case(6):LSA=1;LSB=0;LSC=1;break;
case(7):LSA=0;LSB=1;LSC=1;break;
case(8):LSA=1;LSB=1;LSC=1;break;
}
P0=smgduan[i-1];
delay(200);
P0=0x00;
}
}
這就可以滿足從右到左循環(huán)顯示7-0,而且期間沒(méi)有停留,是一直循環(huán),但是我感覺(jué)這兩個(gè)程序表達(dá)的應(yīng)該是一個(gè)意思啊,不知道為什么第一個(gè)不能實(shí)現(xiàn)希望的效果。求大神解答,初學(xué)51單片機(jī),請(qǐng)多指教!
|
|