【51單片機(jī)】七段數(shù)碼管顯示實(shí)驗(yàn)+詳細(xì)講解
【51單片機(jī)】七段數(shù)碼管顯示實(shí)驗(yàn)
前言
繼上次仿真實(shí)驗(yàn)——【51單片機(jī)】矩陣鍵盤線反轉(zhuǎn)法實(shí)驗(yàn)仿真之后,盡管也對點(diǎn)陣LED進(jìn)行了學(xué)習(xí),但是,點(diǎn)陣LED的顯示效果不佳(仿真時的色彩、明亮程度等),加上大多數(shù)時候我們在計(jì)算器上看到的是七段數(shù)碼管,所以在學(xué)習(xí)了學(xué)校課程之后,我也進(jìn)行了嘗試。這次主要是記錄七段數(shù)碼管的使用方法,在此之后,我考慮把鍵盤掃描(線反轉(zhuǎn)法)、七段數(shù)碼管、80C51結(jié)合起來,把整個計(jì)算器的功能完善,也算是完成一個小項(xiàng)目。
因?yàn)槲艺J(rèn)為光學(xué)理論只是很容易忘記,且容易磨滅興趣,所以在學(xué)習(xí)過程中以做一個計(jì)算器為目標(biāo),循序漸進(jìn)地學(xué)習(xí),缺什么知識就補(bǔ)充什么知識,就像前幾次所作的一樣:
【51單片機(jī)】矩陣鍵盤線反轉(zhuǎn)法實(shí)驗(yàn)仿真
【51單片機(jī)】點(diǎn)陣LED的顯示實(shí)驗(yàn)
【51單片機(jī)】矩陣鍵盤逐行掃描法仿真實(shí)驗(yàn)+超詳細(xì)Proteus仿真和Keil操作步驟
下面是這次七段數(shù)碼管的學(xué)習(xí)記錄。
一、兵馬未動,糧草先行——認(rèn)識七段數(shù)碼管
1、關(guān)于顯示器
我們常見的顯示器一般分為LED、LCD和CRT,當(dāng)然除此之外還有其他種類的顯示器。其中:
- LED是發(fā)光二極管,核心原理是半導(dǎo)體的電光轉(zhuǎn)化,在電光轉(zhuǎn)化過程中發(fā)熱很少,相對白熾燈更節(jié)能,目前常用作照明工具;
- LCD是液晶顯示器,核心原理是液晶(介于液體和晶體的一種物質(zhì))的各向異性使特定區(qū)域透光、部分區(qū)域不透光來呈現(xiàn)畫面;
- CRT是陰極射線管,常用在示波器和老式電視機(jī)上,核心原理是控制電子束的偏轉(zhuǎn)角來控制電子打在熒光屏上的不同位置,使之出現(xiàn)我們想要的圖案。
2、七段數(shù)碼管
今天要說的就是LED中的一員——七段數(shù)碼管。七段數(shù)碼管也叫七段LED顯示器,是由數(shù)個LED組成的陣列,并封裝在一個標(biāo)準(zhǔn)的外殼內(nèi)。

如圖,七段數(shù)碼管通常有七段,但現(xiàn)在為了表示小數(shù),加入了小數(shù)點(diǎn),所以其實(shí)變成了名字叫七段數(shù)碼管的八段數(shù)碼管。圖上a、b、c、d、e、f、g、dp則是每段的名字。cs管腳類似于片選信號。
我們只需要點(diǎn)亮特定的管腳就能形成一個數(shù)字或者字母。
3、七段數(shù)碼管的結(jié)構(gòu)

如圖是七段數(shù)碼管的內(nèi)部結(jié)構(gòu),將圖中的二極管按特定陣列排布就得到了常見的數(shù)碼管。
- 共陰極:顧名思義,這是將二極管的陰極連接到同一條導(dǎo)線上,只要某路地陽極變?yōu)楦唠娖剑撀稬ED就會被點(diǎn)亮。
- 共陽極:二極管地陽極連接到一條到線上并連接電源。當(dāng)某路陰極變?yōu)榈碗娖剑撀返豅ED就會亮起。
4、數(shù)碼管顯示方法
七段數(shù)碼管顯示也有兩種方式,分別是靜態(tài)顯示和動態(tài)顯示。
- 靜態(tài)顯示:在靜態(tài)顯示系統(tǒng)中,每一位顯示器都應(yīng)該有各自地鎖存器、譯碼器和驅(qū)動器鎖存器,如果軟件譯碼,譯碼器也可以省略。鎖存器用來所存待顯示數(shù)字的BCD碼,所以每次顯示輸出后都能保持不變。但是占用的位數(shù)很多,每一位需要8根數(shù)據(jù)線。
- 動態(tài)顯示:在動態(tài)顯示系統(tǒng)中,微處理器要定時地向各個顯示器進(jìn)行掃描,只要掃描速率足夠快,由于視覺暫留現(xiàn)象就會給人以恒定顯示的表現(xiàn)。動態(tài)顯示可以減少硬件的使用,但是需要微處理器一直為它工作。
二、數(shù)碼管顯示程序
1、靜態(tài)顯示
靜態(tài)顯示用到的元件有:74LS273(鎖存器)×4、80C51、7SEG-MPX1-CA(七段數(shù)碼管)×4、RESPACK-8(電阻)、GROUND、POWER和BUTTON。
連接線路如圖:

靜態(tài)顯示的代碼如下:
#include <reg51.h>
unsigned int d[4]={0xA4,0xC0,0xA4,0xf9};//共陽極的數(shù)碼管顯示的數(shù)字,一次是2、0、2、1
unsigned int cs[4]={0x0E,0x0D,0x0B,0x07};//片選,低電平時,鎖存器打開,可以寫入數(shù)據(jù)。高電平時鎖存
void main(void)
{
int i;
EA=1;//開中斷
EX0=1;//開外部中斷0
INT0=1;//下降沿觸發(fā)INT0中斷
for(i=0;i<4;i++){
P2=cs[i];//打開一個鎖存器
P0=d[i];//向該鎖存器寫入數(shù)據(jù)
}
P2=0xff;//所有鎖存器鎖存CLK置高電平
}
void int0() interrupt 0{//終端服務(wù)程序
P2=cs[0];
P0=0x8E;
}
效果

2.動態(tài)顯示
動態(tài)顯示用到的元件有:8051、7SEG-MPX4-CA(4位七段數(shù)碼管)、RESPACK-8(電阻)、GROUND、POWER和BUTTON。
接線如圖:

動態(tài)顯示的代碼如下:
#include <reg51.h>
unsigned int d[4]={0x5B,0x3f,0x5B,0x06};//共陰極的數(shù)碼管,輸出為靜態(tài)時的反碼,由與所用的七段數(shù)碼管內(nèi)部不同所致。
unsigned int cs[4]={0x0E,0x0D,0x0B,0x07};//與靜態(tài)不同,4位7段數(shù)碼管的片選信號不由鎖存器決定,自帶的片選管腳功能為高電平選中
void delay(int n){//延時程序
int i;
int j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}
void main(void)
{
int i;
EA=1;
EX0=1;
INT0=1;
while(1){//因?yàn)槭莿討B(tài)掃描,所以必須不停地掃描
for(i=0;i<4;i++){
P2=cs[i];
P0=d[i];
delay(10);
}
}
}
void int0() interrupt 0{
P2=cs[0];
P0=0x71;
}
效果

總結(jié)
以上就是兩種類型的七段數(shù)碼管(共陰極和共陽極)的兩種不同的顯示方式(靜態(tài)和動態(tài))。這里對七段數(shù)碼管的學(xué)習(xí),我會用到計(jì)算器的制作中,加以鞏固。也希望和小伙伴們一起學(xué)習(xí),有時間我也會多多分享學(xué)習(xí)的知識,記錄學(xué)習(xí)過程。
浙公網(wǎng)安備 33010602011771號