找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1646|回复: 0
打印 上一主题 下一主题
收起左侧

TM1637.h单片机头文件程序

[复制链接]
跳转到指定楼层
楼主
ID:917238 发表于 2021-8-12 21:20 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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();
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表