天天看點

數位管顯示驅動方法(74HC138譯碼器的使用)

部落客福利:100G+電子設計學習資源包!

​​http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect​​ --------------------------------------------------------------------------------------------------------------------------

記得當時剛學器件的時候,叫同學給我講原理,他當時說你去看datasheet就懂了。

當時看到一大篇英文的說明書時,馬上就退縮了。

其實剛開始學的時候,幾頁的英語說明書,隻需要找到自己需要的就行了。

把真值表對着電路圖一看,晶片的作用就了解的一清二楚,也不會有誤解,因為真值表裡的輸入輸出都是互相對應的。

數位管的顯示用的是74HC138譯碼器 ,這是一種三通道輸入,八通道輸出譯碼器。

采用動态掃描顯示即輪流向各位數位管送出執行碼和相應的位選,利用發光管的餘輝和人眼視覺暫留作用,

使人的感覺好像各位數位管同時都在顯示。

數位管顯示驅動方法(74HC138譯碼器的使用)
#include "reg52.h"             //此檔案中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;      //對資料類型進行聲明定義
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值

void delay(u16 i)
{
    while(i--);    
}


void DigDisplay()
{
    u8 i;
    for(i=0;i<8;i++)
    {
        switch(i)     //位選,選擇點亮的數位管,
        {
            case(0):
                LSA=0;LSB=0;LSC=0; break;//顯示第0位
            case(1):
                LSA=1;LSB=0;LSC=0; break;//顯示第1位
            case(2):
                LSA=0;LSB=1;LSC=0; break;//顯示第2位
            case(3):
                LSA=1;LSB=1;LSC=0; break;//顯示第3位
            case(4):
                LSA=0;LSB=0;LSC=1; break;//顯示第4位
            case(5):
                LSA=1;LSB=0;LSC=1; break;//顯示第5位
            case(6):
                LSA=0;LSB=1;LSC=1; break;//顯示第6位
            case(7):
                LSA=1;LSB=1;LSC=1; break;//顯示第7位    
        }
        P0=smgduan[i];//發送段碼
        delay(100); //間隔一段時間掃描    
        P0=0x00;//消隐
    }
}

void main()
{    
    while(1)
    {    
        DigDisplay();  //數位管顯示函數    
    }        
}