TM1602使用簡(jiǎn)介(C8051)

1 簡(jiǎn)介

TM1602作為數(shù)碼管顯示的專(zhuān)用電路,可以簡(jiǎn)化電路設(shè)計(jì)以及節(jié)約MCU的引腳資源。通過(guò)串行將數(shù)據(jù)寫(xiě)入芯片,由芯片完成動(dòng)態(tài)掃描顯示。TM1602兩種工作模式,六位八段和七位八段(上電默認(rèn)),下面例子中設(shè)置為六位八段,地址自增模式。這里詳細(xì)不再介紹,具體可以參閱數(shù)據(jù)手冊(cè)。

2 詳細(xì)驅(qū)動(dòng)代碼

代碼是基于C8051單片機(jī),以下代碼可以直接使用,只需要添加引腳的定義即可。

#define TM1620_Mode_6_8         0x02//設(shè)置顯示模式,6位8段--上電默認(rèn)是7段8段  
#define TM1620_AddrAutoAdd      0x40//寫(xiě)顯示,自動(dòng)累加地址    
#define TM1620_AddrFixed        0x44//寫(xiě)顯示,固定地址    
  
#define TM1620_00H             0xC0//地址00H  
#define TM1620_01H             0xC1//地址01H  
#define TM1620_02H             0xC2//地址02H  
#define TM1620_03H             0xC3//地址03H  
#define TM1620_04H             0xC4//地址04H  
#define TM1620_05H             0xC5//地址05H  
#define TM1620_06H             0xC6//地址06H  
#define TM1620_07H             0xC7//地址07H  
#define TM1620_08H             0xC8//地址08H  
#define TM1620_09H             0xC9//地址09H  
#define TM1620_0AH             0xCA//地址0AH  
#define TM1620_0BH             0xCB//地址0BH 

#define TM1620_OpenDis          0x88//開(kāi)顯示  
#define TM1620_CloseDis         0x80//關(guān)顯示  
  
#define TM1620_Pulse_1          0X00//設(shè)置脈沖寬度為 1/16   
#define TM1620_Pulse_2          0X01//設(shè)置脈沖寬度為 2/16   
#define TM1620_Pulse_4          0X02//設(shè)置脈沖寬度為 4/16   
#define TM1620_Pulse_10         0X03//設(shè)置脈沖寬度為 10/16   
#define TM1620_Pulse_11         0X04//設(shè)置脈沖寬度為 11/16   
#define TM1620_Pulse_12         0X05//設(shè)置脈沖寬度為 12/16   
#define TM1620_Pulse_13         0X06//設(shè)置脈沖寬度為 13/16   
#define TM1620_Pulse_14         0X07//設(shè)置脈沖寬度為 14/16

//串行輸入要顯示的字符
void TM1620_WriteData(uchar dat)
{
    uchar i ;
    TM1620_STB_0;
    delay_us(5);
    for(i = 0; i < 8; i++)
    {
        TM1620_CLK_0;
        if(dat & 0x01)
        {
            TM1620_DIN_1;
        }
        else
        {
            TM1620_DIN_0;
        }
        dat >>= 1;
        TM1620_CLK_1;   
        TM1620_CLK_0;
    }
}
//初始化
void TM1620_Init(void)
{
    TM1620_STB_1;
    TM1620_CLK_1;
    TM1620_DIN_1;
    TM1620_WriteData(TM1620_Mode_6_8);//設(shè)置1620為六位八段顯示模式
    TM1620_STB_1;
    TM1620_WriteData(TM1620_AddrAutoAdd);//設(shè)置地址自動(dòng)+1
    TM1620_STB_1;
    TM1620_WriteData(TM1620_00H);//設(shè)置地址
}

//輸入?yún)?shù)為脈沖寬度,用來(lái)控制顯示亮度
void TM1620_OpenDisplay(uchar pulseWidth)
{
    TM1620_STB_1;
    TM1620_WriteData(TM1620_OpenDis | pulseWidth);
    delay_us(5);
    TM1620_CLK_0;
}

void TM1620_CloseDisplay(void)
{
    TM1620_STB_1;
    TM1620_WriteData(TM1620_CloseDis);
    delay_us(5);
    TM1620_CLK_0;
}
//輸入顯示數(shù)據(jù),和數(shù)據(jù)長(zhǎng)度
void Display(uchar *datas, uchar len)
{
    uchar i;
    uchar temp = len;

    while(temp > 0)
    {
        TM1620_Init();
        //顯示數(shù)據(jù)正好為6
        if(temp == 6)
        {
            for(i = 0; i < 6; i++)
            {   
                TM1620_WriteData(datas[6-i-1]);
                TM1620_WriteData(0x00);
            }
            break;
        }
        //顯示數(shù)據(jù)小于6位
        else if(temp < 6)
        {
            for(i = 0; i < 6; i++)
            {   
                if(i < 6- temp)
                {
                    TM1620_WriteData(0x00);
                    TM1620_WriteData(0x00);
                    continue;
                }
                TM1620_WriteData(datas[6-i-1]);
                TM1620_WriteData(0x00);
            }
            break; 
        }
        //顯示數(shù)據(jù)長(zhǎng)度大于6位,先顯示前六位,1秒后顯示剩下部分。依次類(lèi)推。
        else
        {
            for(i = 0; i < 6; i++)
            {   
                TM1620_WriteData(datas[6-i-1]);
                TM1620_WriteData(0x00);
            }
            datas += LEN_Seg;
            temp -= LEN_Seg;
        }
        TM1620_OpenDisplay(TM1620_Pulse_10);
        delay_s(1);
    }
    TM1620_OpenDisplay(TM1620_Pulse_10);
}

如果對(duì)您有所幫助請(qǐng)給在下點(diǎn)個(gè)贊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容