想必大家都看過站長(zhǎng)推薦的能配合51hei-5開發(fā)板電路的那個(gè)視頻教程吧。我后來發(fā)現(xiàn)了視頻里有一個(gè)小小的失誤在消隱方面,如果完全按照視頻教程里的來就會(huì)出現(xiàn)數(shù)碼管暗亮影響美觀,于是我在找到原因之后做了一些修改,代碼在下面。
下面是本站板子數(shù)碼管部分的電路圖,
a63.jpg (43.12 KB, 下載次數(shù): 234)
下載附件
2011-3-16 23:59 上傳
//*===============================
//接線要求:P0口分時(shí)復(fù)用輸出,P2.6,P2.7做74ls573片選
//入口參數(shù):0000--9999范圍內(nèi)的二進(jìn)制或十進(jìn)制數(shù)
//出口參數(shù):無
//函數(shù)功能:數(shù)碼管實(shí)現(xiàn)小于9999數(shù)的十進(jìn)制顯
//by Oliver 21/03,21:59
//==================================
#include <AT89X52.H>
#define uchar unsigned char
sbit WEI=P2^7;
sbit DUAN=P2^6;
sbit LED=P1^4;
uchar wei[]={0xfe,0xfd,0xfb,0xf7};
uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(void) //誤差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=222;b>0;b--)
for(a=12;a>0;a--);
}
//--------------6ms延時(shí)
void undo(void)
{
WEI=1;
P0=0xff;
WEI=0;
}//使位選失效
void wei_cs(uchar a)
{
P0=wei[a];//=====關(guān)鍵之處---------------------------------------------------消隱------
WEI=1;
WEI=0;
}
//-------------------位選---------
void duan_cs(uchar a)
{
P0=duan[a];
DUAN=1;
DUAN=0;
}
//-------------------段選---------
void show(int DATA)
{
uchar qian,bai,shi,ge;
uchar duan_flag=0;
if(DATA>9999)
{
LED=0;
P0=0xfe;
}//判斷是否超出顯示范圍
else
{
qian=DATA/1000;
bai=DATA%1000/100;
shi=DATA%100/10;
ge=DATA%10;
//-------------各位分離
if(qian!=0)
{
duan_cs(qian);
wei_cs(duan_flag++);
}
delay();
if((bai|qian)!=0)
{
duan_cs(bai);
wei_cs(duan_flag++);
}
delay();
if((shi|bai|qian)!=0)
{
duan_cs(shi);
wei_cs(duan_flag++);
}
delay();
if(1)
{
duan_cs(ge);
wei_cs(duan_flag);
}
}
}
void main(void)
{
while(1)
show(1545);
} 消隱的研究:隱紅的出現(xiàn):1 ,段碼改變時(shí),位碼未變,在位碼變化之前,會(huì)在前一個(gè)位碼處產(chǎn)生殘影; 2 ,位碼改變時(shí),如先使P2^7有效,則段碼在位碼寫入之前會(huì)在新的位碼處產(chǎn)生殘影。 消除方法:1, 段碼改變之前將位碼全部置成無效,此時(shí)間間隔仍能滿足視覺暫留的要求; 2, 位碼改變時(shí),先將下一個(gè)位碼寫入P0口,再使P2^7有效,則可消除此種殘 影。 另外,如P0口時(shí)序要求更為嚴(yán)格,為保證數(shù)據(jù)安全性,可將連接圖中的OC端統(tǒng)一接一控制引腳,使兩片573同時(shí)輸出使能,即可更好消除殘影。 視頻教程中的代碼是:
WEI=1; //開通 P0=wei[a]; WEI=0; //鎖存 我修改為下面的代碼后,殘影消失,感覺非常完美呵呵. P0=wei[a]; WEI=1; WEI=0;
[此貼子已經(jīng)被作者于2011-3-17 0:21:47編輯過]
|