【藍橋杯單片機03】數碼管的靜態顯示


【藍橋杯單片機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();
        }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM