帝國(guó)做的電影網(wǎng)站創(chuàng)建屬于自己的網(wǎng)站
文章目錄
- 引言
- 數(shù)碼管的結(jié)構(gòu)
- 數(shù)碼管的工作原理
- 靜態(tài)數(shù)碼管
- 電路圖
- 開(kāi)發(fā)板IO連接圖
- 代碼演示
- 動(dòng)態(tài)數(shù)碼管
- 實(shí)現(xiàn)步驟
- 數(shù)碼管驅(qū)動(dòng)方式
- 電路圖
- 開(kāi)發(fā)板IO連接圖
- 真值表
- 代碼演示1
- 代碼演示2
- 代碼演示3
引言
數(shù)碼管(Seven-Segment Display)是一種常見(jiàn)的顯示設(shè)備,廣泛應(yīng)用于電子時(shí)鐘、計(jì)算器、家電和其他數(shù)字設(shè)備中。數(shù)碼管由七個(gè)獨(dú)立的LED段組成,排列成一個(gè)類似數(shù)字“8”的形狀。通過(guò)控制這些LED段的開(kāi)關(guān)狀態(tài),可以顯示0到9的數(shù)字及一些字母和符號(hào)。同時(shí)也稱為L(zhǎng)ED數(shù)碼管。
數(shù)碼管的結(jié)構(gòu)
一個(gè)標(biāo)準(zhǔn)的七段數(shù)碼管包括七個(gè)LED段,每個(gè)段用一個(gè)字母表示,從A到G。另外,有些數(shù)碼管還包括一個(gè)小數(shù)點(diǎn)(DP),被稱為八段數(shù)碼管,用于顯示小數(shù)或分隔不同的數(shù)字。
--A-- --A--| | | |F B F B| | | |--G-- --G--| | | |E C E C| | | |--D-- --D-- ? DP
數(shù)碼管的工作原理
數(shù)碼管的每個(gè)段實(shí)際上是一個(gè)獨(dú)立的LED,通過(guò)控制各個(gè)LED的通斷狀態(tài),可以組合成不同的字符。數(shù)碼管通常有兩種連接方式:共陽(yáng)極和共陰極
。
- 共陽(yáng)極數(shù)碼管:所有的LED陽(yáng)極(正極)連接在一起,通常接到電源正極。點(diǎn)亮某個(gè)段時(shí),需將相應(yīng)的段的陰極(負(fù)極)接地 GND。
- 共陰極數(shù)碼管:所有的LED陰極(負(fù)極)連接在一起,通常接地。點(diǎn)亮某個(gè)段時(shí),需將相應(yīng)的段的陽(yáng)極(正極)接電源正極。
靜態(tài)數(shù)碼管
靜態(tài)顯示的特點(diǎn)是每個(gè)數(shù)碼管的段選必須接一個(gè)8位數(shù)據(jù)線來(lái)保持顯示的字形碼。當(dāng)送入一次字形碼后,顯示字形可一直保持直到送入新字形碼為止。
電路圖
從資料中提供的電路圖可知,此開(kāi)發(fā)板靜態(tài)數(shù)碼管使用的是共陽(yáng)極數(shù)碼管,如果使用共陰數(shù)碼管,為了不影響其他IO口的電流,要增加IO口的驅(qū)動(dòng)電路,單片機(jī)主要是用來(lái)控制的,如果要驅(qū)動(dòng)一些外部的設(shè)備,通常會(huì)使用專門(mén)的驅(qū)動(dòng)電路,比如74HC245芯片,74HC573芯片。
開(kāi)發(fā)板IO連接圖
代碼演示
控制靜態(tài)數(shù)碼管顯示數(shù)字0,即讓P0口端口輸出數(shù)字0的段碼0x3F(共陰,共陽(yáng)極取反即可),其他數(shù)字可根據(jù)連接方式自行計(jì)算。
#include <REGX52.H>#define SMG_STATIC P0void main()
{SMG_STATIC = ~0x3f;while(1){}
}
動(dòng)態(tài)數(shù)碼管
動(dòng)態(tài)數(shù)碼管顯示,也稱為動(dòng)態(tài)掃描顯示,是通過(guò)快速輪流點(diǎn)亮各個(gè)位數(shù)碼管來(lái)實(shí)現(xiàn)的。利用人眼的視覺(jué)暫留效應(yīng),使人感覺(jué)所有數(shù)碼管同時(shí)顯示不同的數(shù)字。
實(shí)現(xiàn)步驟
- 段選和位選:將所有位數(shù)碼管的段選線并聯(lián)在一起,通過(guò)位選控制哪一位數(shù)碼管有效。
- 輪流顯示:輪流向各個(gè)位數(shù)碼管送出字型碼和相應(yīng)的位選信號(hào)。由于切換速度很快,人眼無(wú)法分辨出切換過(guò)程,從而感覺(jué)所有數(shù)碼管同時(shí)顯示。
- 消影處理:在切換位選信號(hào)之前,先將段選信號(hào)清零,防止殘影現(xiàn)象。
數(shù)碼管驅(qū)動(dòng)方式
- 單片機(jī)直接掃描:硬件設(shè)備簡(jiǎn)單,但會(huì)消耗大量的單片機(jī)CPU時(shí)間。
- 專用驅(qū)動(dòng)芯片:內(nèi)部自帶顯存、掃描電路,單片機(jī)只需告訴它顯示什么即可。如:TM1640芯片、74HC595
電路圖
由電路圖可知,該開(kāi)發(fā)板的動(dòng)態(tài)數(shù)碼管是由兩個(gè)4位一體數(shù)碼管組成的,一共八個(gè)數(shù)碼管,它們的公共端單獨(dú)引出來(lái),位選段全部并聯(lián)在一起,動(dòng)態(tài)進(jìn)行顯示,采用的是共陰極。
八個(gè)公共端同一個(gè)時(shí)刻,只有一個(gè)數(shù)碼管可以點(diǎn)亮,因?yàn)槲贿x段是并聯(lián)在一起的,所以即使有多個(gè)公共端同一個(gè)時(shí)刻被點(diǎn)亮,數(shù)碼管顯示的數(shù)據(jù)也是相同的??梢岳萌搜垡曈X(jué)暫留和余暉效應(yīng)進(jìn)行延時(shí)操作即可!
動(dòng)態(tài)數(shù)碼管要搭配74H138模塊
和74H245
-
74H138:一種常用的 3 線到 8 線譯碼器芯片,主要用于地址解碼、數(shù)據(jù)路由和邏輯控制。它可以將輸入的三位二進(jìn)制代碼轉(zhuǎn)換成八位的輸出,常用于單片機(jī)系統(tǒng)中進(jìn)行 I/O 擴(kuò)展。即三個(gè)輸入端操作8個(gè)輸出端,具體操作方法可查看真值表。
- 輸入端:A0、A1、A2 為三位二進(jìn)制加權(quán)地址輸入端口。
- 輸出端:Y0 至 Y7 為八個(gè)輸出端口。
- 使能端:E1 和 E2 為低有效,E3 為高有效。只有當(dāng) E1 和 E2 置低且 E3 置高時(shí)(默認(rèn)),芯片才會(huì)工作
-
74H245:一種常用的雙向總線緩沖器芯片,防止信號(hào)干擾??梢詫⒏唠娖叫盘?hào)轉(zhuǎn)換為低電平信號(hào),或?qū)⒌碗娖叫盘?hào)轉(zhuǎn)換為高電平信號(hào),確保不同電平邏輯設(shè)備之間的兼容性。它能夠隔離不同總線之間的電平差異和噪聲干擾,確保數(shù)據(jù)的可靠傳輸。
開(kāi)發(fā)板IO連接圖
74H138的A0(A)與P22相連;A1(B)與P23相連;A2(C)與P24相連(真值表)
真值表
L表示0(低電平),H表示1(高電平)
代碼演示1
根據(jù)真值表操作第五個(gè)LED數(shù)碼管,顯示數(shù)字6,Init_Port()
函數(shù)用于操作操作真值表,為了方便對(duì)比,這里保留了靜態(tài)數(shù)碼管的代碼。
#include <REGX52.H>#define SMG_STATIC P0void Init_Port()
{P2_2 = 0;P2_3 = 0;P2_4 = 1;
}void main()
{Init_Port();//顯示LED數(shù)碼管5SMG_STATIC = ~0x7d;P1 = 0x7d;while(1){}
}
代碼演示2
動(dòng)態(tài)數(shù)碼管延時(shí)循環(huán)顯示數(shù)字6,如果需要循環(huán)顯示數(shù)字1到數(shù)字8,定義數(shù)組即可。
#include <REGX52.H>#define SMG_STATIC P0void DelayXms(unsigned int xms) //@12.000MHz
{unsigned char data i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{switch(Location){case 1:P2_2 = 0;P2_3 = 0;P2_4 = 0;break;case 2:P2_2 = 1;P2_3 = 0;P2_4 = 0;break;case 3:P2_2 = 0;P2_3 = 1;P2_4 = 0;break;case 4:P2_2 = 1;P2_3 = 1;P2_4 = 0;break;case 5:P2_2 = 0;P2_3 = 0;P2_4 = 1;break;case 6:P2_2 = 1;P2_3 = 0;P2_4 = 1;break;case 7:P2_2 = 0;P2_3 = 1;P2_4 = 1;break;case 8:P2_2 = 1;P2_3 = 1;P2_4 = 1;break;}
}void main()
{unsigned char i;SMG_STATIC = ~0x7d;while(1){for(i = 1; i <= 8;i++){Init_Port(i);P1 = 0x7d;DelayXms(1000);}}
}
代碼演示3
利用余暉效應(yīng),動(dòng)態(tài)持續(xù)的顯示數(shù)字1到8,P1 = 0x00; 這一行用于消影。消影的作用是防止數(shù)碼管顯示的殘影現(xiàn)象。具體來(lái)說(shuō),當(dāng)你在多位數(shù)碼管上顯示不同的數(shù)字時(shí),如果不及時(shí)清除前一個(gè)數(shù)字的顯示,可能會(huì)出現(xiàn)殘影,即前一個(gè)數(shù)字的部分段碼仍然亮著,影響當(dāng)前數(shù)字的顯示效果。通過(guò)在每次顯示完一個(gè)數(shù)字后,將 P1 置為 0x00,可以確保所有段碼都熄滅,從而避免殘影現(xiàn)象,確保每次顯示的數(shù)字都是清晰且正確的。
#include <REGX52.H>#define SMG_STATIC P0//共陰極數(shù)碼管顯示 0~F 的段碼數(shù)據(jù)
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void DelayXms(unsigned int xms) //@12.000MHz
{unsigned char data i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{switch(Location){case 1:P2_2 = 0;P2_3 = 0;P2_4 = 0;break;case 2:P2_2 = 1;P2_3 = 0;P2_4 = 0;break;case 3:P2_2 = 0;P2_3 = 1;P2_4 = 0;break;case 4:P2_2 = 1;P2_3 = 1;P2_4 = 0;break;case 5:P2_2 = 0;P2_3 = 0;P2_4 = 1;break;case 6:P2_2 = 1;P2_3 = 0;P2_4 = 1;break;case 7:P2_2 = 0;P2_3 = 1;P2_4 = 1;break;case 8:P2_2 = 1;P2_3 = 1;P2_4 = 1;break;}
}void main()
{unsigned char i;SMG_STATIC = ~0x7d;while(1){for(i = 1; i <= 8;i++){Init_Port(i);P1 = gsmg_code[i];DelayXms(1);P1 = 0x00;//消影}}
}