前面一課通過流水燈實驗,學會了流水燈電路模型設計,掌握了循環移位和時間延遲算法的程序編寫。本次實驗完成數碼管顯示電路模型設計和編程,在實驗過程中,學習數碼管顯示電路設計、數碼管循環顯示數字的算法。
認識數碼管
數碼管是半導體發光器件,用于顯示數字、字母、簡單圖形符號等內容。數碼管基本單元是發光二極管,數碼管內部由多個發光二極管管構成,多個發光二極管在同一時間的不同狀態,組合為不同的數字、字母或圖形符號。
數碼管型號多樣,有單位數碼管、雙位數碼管、四位數碼管、八位數碼管等等,單位數碼管僅能顯示一個數字、字母或圖形符號,多位數碼管可以顯示多個數字、字母或圖形符號。實際上,多位數碼管都可以由單位數碼管構成,例如4個單位數碼管可以構成四位數碼管。
不管將幾位數碼管連在一起,數碼管的顯示原理都是一樣的,都是靠點亮內部的發光二極管來發光,下面我們來看看單位數碼管是如何顯示數字的。
單位數碼管一般由7個發光二極管組成,有共陰,共陽兩種,八個引腳,七個引腳接7個發光二極管,一個引腳是公共端,若共陰,該引腳接地,若共陽,該引腳接電源的正極。
單位數碼管內部基礎電路如上圖所示,顯示一個數字需要7個小段,每個小段需要一個發光二極管,因此數碼管的引腳至少為8個,其中7個引腳分別接二極管的正極或負極,另外1個引腳為公共端,若數碼管為共陰極,該引腳接地,若數碼管為共陽極,該引腳接電源。
對于共陽極數碼管來說,7個發光二極管的正極連接在一起形成公共端,該公共端接電源,負極分別接單片機的I/O端口,當我們給數碼管任一個陰極低電平時,對應的這個發光二極管就點亮了。例如:若需要數碼管顯示數字0,g引腳送低電平,其它引腳送高電平,這樣數碼管就顯示數字0了;若需要數碼管顯示數字8,將所有引腳(公共端除外)送入低電平,數碼管就顯示數字8了。因此,若需要數碼管顯示數字,只需要給發光二極管引腳送入低電平或高電平就可以了。
數碼管電路設計
本次實驗設計要求通過單片機P0口控制數碼管循環顯示數字0 ~ 9,實驗需要用到單位數碼管器件。在“Pick Devices”對話框搜索關鍵詞“7SEG”,選擇“7SEG-MPX1-CA”型號的數碼管,該數碼管是7段共陽極數碼管,可以顯示數字0~9和小數點,它有9個引腳,8個引腳用于連接P0口的8位端口,1個引腳為公共端,連接電源的正極。
數碼管內部發光二極管點亮時,大約需要幾個毫安以上的電流,而且電流不可過大,電流過大可能會燒毀發光二極管,因此需要在P0端口和數碼管引腳之間接入限流電阻,限流電阻值不能太大,也不能大小。限流電阻的阻值計算過程如下:一個發光二極管的額定電壓一般是1.5~2.5V,電阻不大于50歐姆,電流約為0.04A,單片機引入的電源電壓為5V,限流電阻的阻值約為R=U/I=5/0.04=125歐姆。計算值僅是個近似值,可以選擇100~500歐姆以內的阻值。
電路設計如下圖所示:
數碼管編程
讓數碼管循環顯示數字0 ~ 9,需要對數字0~9進行編碼,對應數字的編碼值用于控制P0各端口的電平輸出,從而控制數碼管內部各發光二極管的狀態,顯示出編碼對應的數字。
“7SEG-MPX1-CA”型號的數碼管數字0~9的編碼為:
unsigned char led[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
0xC0為數字0的編碼,其二進制數為11000000,該值送入單片機P0口,P0口的第7、6端口為高電平,5、4、3、2、1、0端口為低電平,與5、4、3、2、1、0端口連接的發光二極管被點亮,與7、6端口連接的發光二極管為熄滅狀態,其中端口7位小數點,端口6位g段,顯示數字0。
0xF9為數字1的編碼,其二進制數為11111001,該值送入單片機P0口,P0口的7、6、5、4、3、0端口為高電平,與其連接的發光二極管為熄滅狀態,P0口的2、1端口為低電平,與其連接的發光二極管被點亮,即b、c段點亮,顯示數字1。
同學們可以自行分析2~9數字的編碼。C程序代碼如下:
#include < reg51.h >
#include < stdio.h >
unsigned char led[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(unsigned int millisecond)
{
unsigned int i,j;
for(i=millisecond;i >0;i--)
for(j=120;j >0;j--);
}
void main(void)
{
unsigned int i;
while(1)
{
for(i=0;i< 10;i++)
{
P0 = led[i];
delay(500);
}
}
}
led[]為數字0~9編碼數組,delay()為時間延遲函數,在main()函數內部,使用while循環讓程序持續執行,在while循環內部,使用for循環遍歷led[]數組,獲取每個數字的編碼,并將編碼賦值給P0。
實驗小結
通過這次實驗,了解了數碼管顯示數字和字符的原理,學會了數碼管顯示電路設計,掌握了數碼管顯示控制編程技術。
-
單片機
+關注
關注
6037文章
44558瀏覽量
635302 -
電路設計
+關注
關注
6674文章
2453瀏覽量
204361 -
數碼管
+關注
關注
32文章
1882瀏覽量
91122 -
顯示電路
+關注
關注
6文章
97瀏覽量
33214 -
流水燈
+關注
關注
21文章
433瀏覽量
59712
發布評論請先 登錄
相關推薦
評論