LED數(shù)碼管:數(shù)碼管是一種簡(jiǎn)單、廉價(jià)的顯示器,是由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件
單個(gè)引腳:
數(shù)碼管分為共陽(yáng)極連接和共陰極連接兩種:
1,共陰極連接就是說(shuō)3,8這一頭連得是負(fù)極,所以在下面的那頭給上高電平(即置1)就可以使二極管發(fā)光
2,共陽(yáng)極連接就是說(shuō)3,8這一頭連得是正極,所以在下面的那頭給上低電平(即置0)就可以使二極管發(fā)光
注意:在實(shí)際編寫代碼的時(shí)候這一點(diǎn)一定要搞清楚,或者進(jìn)行實(shí)驗(yàn)后發(fā)現(xiàn)亮光的二極管的位置和預(yù)想的不對(duì),那么對(duì)賦值的I/O口使用取反符號(hào)~也行
多個(gè)引腳管:
把相同類型的一系列數(shù)據(jù)統(tǒng)一編制到某一個(gè)組別中,可以通過(guò)數(shù)組名+索引號(hào)簡(jiǎn)單快捷的操作大量數(shù)據(jù)
int x[3]; //定義一組變量(3個(gè))
int x[]={1,2,3}; //定義一組變量并初始化
x[0] //引用數(shù)組的第0個(gè)變量
x[1] //引用數(shù)組的第1個(gè)變量
x[2] //引用數(shù)組的第2個(gè)變量
2.2 子函數(shù)將完成某一種功能的程序代碼單獨(dú)抽取出來(lái)形成一個(gè)模塊,在其它函數(shù)中可隨時(shí)調(diào)用此模塊,以達(dá)到代碼的復(fù)用和優(yōu)化程序結(jié)構(gòu)的目的
void Function(unsigned char x, y)
{}
返回值 函數(shù)名(形參)
{函數(shù)體
}
三、數(shù)碼管顯示
3.1 單個(gè)數(shù)碼管顯示第三個(gè)數(shù)碼管顯示6:
結(jié)合原理圖可以看到要使得第三位顯示為6
LED6對(duì)應(yīng)Y5,Y5對(duì)應(yīng)的二進(jìn)制為101,要讓低電平Y(jié)5通電
對(duì)應(yīng)由高位到低位得
#includevoid main()
{P2_4=1;
P2_3=0;
P2_2=1;
P0=0x7D;
while(1)
{}
}
3.2 通過(guò)定位函數(shù)實(shí)現(xiàn)數(shù)碼管顯示#includeunsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{switch(Location)
{case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
}
void main()
{Nixie(2,3);
while(1)
{}
}
四、動(dòng)態(tài)數(shù)碼管顯示學(xué)會(huì)設(shè)計(jì)靜態(tài)數(shù)碼管的顯示后,我們可以在各個(gè)靜態(tài)數(shù)碼管顯示之間加入延時(shí)函數(shù),這樣就能實(shí)現(xiàn)動(dòng)態(tài)數(shù)碼管的顯示。根據(jù)以前的內(nèi)容,我們先寫一個(gè)簡(jiǎn)單的代碼,來(lái)看看效果。
#includeunsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{switch(Location)
{case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
}
void delay(int i)
{while(i--);
}
void main()
{ void delay(int i);
while(1)
{Nixie(1,2);
delay(10000);
Nixie(2,0);
delay(10000);
Nixie(3,2);
delay(10000);
Nixie(4,2);
delay(10000);
Nixie(5,1);
delay(10000);
Nixie(6,2);
delay(10000);
Nixie(7,2);
delay(10000);
Nixie(8,3);
delay(10000);
}
}
通過(guò)以上代碼,我們雖然看到了數(shù)碼管動(dòng)態(tài)顯示,但是大家也可以看到數(shù)碼管有殘影現(xiàn)象
我們先來(lái)解釋一下殘影出現(xiàn)的原因。
多個(gè)數(shù)碼管顯示時(shí)中間如果沒有延時(shí),那么單片機(jī)執(zhí)行的操作應(yīng)該是 位選->段選->位選->段選->位選…… 而單片機(jī)執(zhí)行速度非常快,上一次的段選還沒有結(jié)束,位選的數(shù)據(jù)已經(jīng)傳了進(jìn)去,這樣下一個(gè)數(shù)碼管就有可能顯示出上一個(gè)數(shù)碼管的數(shù)字。
這些內(nèi)容在數(shù)電中被稱為“競(jìng)爭(zhēng)與冒險(xiǎn)”
解決這樣的問(wèn)題,我們需要在段選結(jié)束之后對(duì)數(shù)碼管清零,在Nixie函數(shù)后加上延時(shí)和清零的語(yǔ)句即可。清零就是防止段選還沒結(jié)束,位選的數(shù)據(jù)就傳到了下一個(gè)數(shù)碼管。延時(shí)是防止數(shù)碼管還沒顯示完就被清零,導(dǎo)致顯示的非常暗。
void Nixie(unsigned char Location,Number)
{switch(Location)
{case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
delay(1);
P0=0x00;
}
燒錄進(jìn)去 你會(huì)發(fā)現(xiàn)殘影就沒了
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧