【藍橋杯單片機03】數碼管的靜態顯示
廣東職業技術學院 歐浩源
不管是省賽還是國賽,數碼管顯示是藍橋杯“單片機設計與開發”賽項必考的內容之一。要掌握數碼管顯示這個內容需要分為兩個步驟:首先弄清楚數碼管的靜態顯示,然后再去掌握數碼管的動態顯示。至於什么是靜態顯示,什么是動態顯示,不清楚的可以百度一下。
1、關於數碼管的基礎知識
要把內容正確的顯示在數碼管上,首先要明確數碼管的類型與段碼結構。在CT107D單片機綜合實訓平台上使用的數碼管是F3461BH。為什么要看這個型號呢?因為它能告訴你數碼管的類型。倒數第2個字母是“B”,說明這個數碼管是共陽類型的,如果該字母為“A”則為共陰類型。不同類型的數據管,其段碼數組是截然不同的。
在明確數碼管類型之后,就可以確定段碼數組了,也就是顯示內容所對應的值,例如,要在F3461BH上顯示數值“7”,那么就要輸出的數值為“0xf8”。怎么樣才能得到這個段碼數組呢?你可以從網上或其他參考資料上獲取,也可以自己對於電路圖或者測試段碼得到。
2、數碼管的電路連接
F3461BH是一個4位8段的數碼管,其中a、b、c、d、e、f、g、dp引腳分別對應8個段碼,該8個引腳通過74HC573鎖存器與單片機的P0端口相連。另外有com1~com4四個公共控制腳,該應用為高電平則使能對應位的數碼管。兩個F3461BH一共有8個com控制引腳,也是通過74HC573鎖存器與單片機的P0端口相連的。因此,在操控數碼管顯示的過程中也離不開74HC138譯碼器和74HC573鎖存器,關於這部分的內容可以參考“【藍橋杯單片機02】LED的基本控制”。
3、單元實訓題目
4、實現源碼參考
#include "reg52.h" sbit HC138_A = P2^5; sbit HC138_B = P2^6; sbit HC138_C = P2^7; //數碼管的段碼數組 unsigned char code SMG_Duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e, 0xbf,0x7f}; void Delay(unsigned int time) { while(time--); while(time--); } void Init74HC138(unsigned char n) { switch(n) { case 4: HC138_A = 0; HC138_B = 0; HC138_C = 1; break; case 5: HC138_A = 1; HC138_B = 0; HC138_C = 1; break; case 6: HC138_A = 0; HC138_B = 1; HC138_C = 1; break; case 7: HC138_A = 1; HC138_B = 1; HC138_C = 1; break; case 8: HC138_A = 0; HC138_B = 0; HC138_C = 0; break; } } void DispaySMG_Bit(unsigned char value, unsigned char pos) { char i; Init74HC138(6); P0 = (0x01 << pos); Init74HC138(7); P0 = value; } void DispaySMG_Static() { char i,j; for(i = 0; i < 8; i++) { for(j = 0; j < 10; j++) { DispaySMG_Bit(SMG_Duanma[j],i); Delay(60000); } } Init74HC138(6); P0 = 0xff; for(i = 0; i < 16; i++) { Init74HC138(7); P0 = SMG_Duanma[i]; Delay(60000); } } main() { while(1) { DispaySMG_Static(); } }