×
单片机 > 单片机程序设计 > 详情

TM1637四位数码管模块驱动(TM1637.h头文件)51单片机C语言

发布时间:2020-12-22 发布时间:
|

TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级灰度可调)。


控制接口:共4个引脚(GND、VCC、DIO、CLK),GND为地,VCC为供电电源,DIO为数据输入输出脚,CLK为时钟信号脚。
 

TM1637.h单片机源程序如下:

sbit CLK= P3^4;   //定义模拟IIC总线的时钟线

sbit DIO = P3^5;   //定义模拟IIC总线的数据线

  

code unsigned char tab[] = 

{

        0x3F,/*0*/

        0x06,/*1*/

        0x5B,/*2*/

        0x4F,/*3*/

        0x66,/*4*/

        0x6D,/*5*/

        0x7D,/*6*/

        0x07,/*7*/

        0x7F,/*8*/

        0x6F,/*9*/

        0x77,/*10 A*/

        0x7C,/*11 b*/

        0x58,/*12 c*/

        0x5E,/*13 d*/

        0x79,/*14 E*/

        0x71,/*15 F*/

        0x76,/*16 H*/

        0x38,/*17 L*/

        0x54,/*18 n*/

        0x73,/*19 P*/

        0x3E,/*20 U*/

        0x00,/*21 黑屏*/

}; 


void Delay_us(unsigned  int i)

{

        for(;i>0;i--)

                _nop_();;

}


//IIC开始

void TM1637_start(void)

{

         CLK=1;

         DIO=1;

         Delay_us(2);

         DIO=0;

}



//IIC应答

void TM1637_ack(void)

{

        uchar i;

        CLK=0;

        Delay_us(5);

         //DIO=1;    

        while(DIO==1&&(i<250))i++;

        CLK=1;

        Delay_us(2);

        CLK=0;

}


//IIC停止

void TM1637_stop(void)

{

         CLK=0;

         Delay_us(2);

         DIO=0;

         Delay_us(2);

         CLK=1;

         Delay_us(2);

         DIO=1;

         Delay_us(2);

}


//写数据函数

void TM1637_Write(unsigned char DATA)   

{

        unsigned char i;   

        for(i=0;i<8;i++)        

        {

                CLK=0;     

                if(DATA & 0x01)

                        DIO=1;

                else DIO=0;

                 Delay_us(3);

                DATA=DATA>>1;      

                CLK=1;

                 Delay_us(3);

        }  

        //TM1637_ack();

}




//按顺序显示

void TM1637_display(uchar a,uchar b,uchar c,uchar d,uchar h)

{


        TM1637_start();

        TM1637_Write(0x40);//写数据+自动地址加1+普通模式

        TM1637_ack();

        TM1637_stop(); 

        TM1637_start();

        TM1637_Write(0xc0);//设置显示首地址即第一个LED

        TM1637_ack();


        TM1637_Write(tab[a]);

        TM1637_ack();

        TM1637_Write(tab[b]|h<<7);//h为1时显示时钟中间的两点

        TM1637_ack();

        TM1637_Write(tab[c]);

        TM1637_ack();

        TM1637_Write(tab[d]);

        TM1637_ack();


        TM1637_stop(); 

        TM1637_start();

        TM1637_Write(0x89);//开显示,2/16亮度

        TM1637_ack();

        TM1637_stop();

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多