單片機(jī)控制數(shù)碼管閃爍
數(shù)碼管閃爍,利用一個(gè)布爾變量控制各數(shù)碼管的顯示值,為真(True)是賦對(duì)應(yīng)的數(shù)值,為假(False)時(shí)熄滅,還是利用一定的時(shí)間間隔,在人眼的視覺暫留時(shí)間段內(nèi),快速的切換熄滅和點(diǎn)亮,可用下面的代碼測(cè)試。
#include
sbit LATCH1=P2^2;//段鎖存
sbit LATCH2=P2^3;//位鎖存
unsigned char code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567
unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼
void Delay(unsigned int t); //函數(shù)聲明
main()
{
unsigned char i=0,j;
unsigned char Flag;
while(1)
{
P1=WeiMa[i]; //取位碼
LATCH2=1; //位鎖存
LATCH2=0;
if(Flag) //判斷是否是閃爍標(biāo)志?
P1=DuanMa[i]; //取顯示數(shù)據(jù),段碼正常顯示
else
P1=0; //不顯示
LATCH1=1; //段鎖存
LATCH1=0;
Delay(200); //掃描間隙延時(shí),時(shí)間太長會(huì)閃爍,太短會(huì)造成重影
i++;
if(8==i) //檢測(cè)8位掃描完全結(jié)束?如掃描完成則從第一個(gè)開始再次掃描8位
i=0;
j++;
if(200==j) //延時(shí)閃爍時(shí)間
{
j=0;
Flag=!Flag;
}
}
}
void Delay(unsigned int t)
{
while(--t);
}