单片机 基于IIC通讯 驱动TM1640点亮LED灯

单片机 基于IIC通讯 驱动TM1640点亮LED灯,第1张

IIC驱动程序

iic.c        //管脚需要自行定义

void start(void)        //产生IIC起始信号
{
    IIC_SCL =1;
    delay_us(2);        
    IIC_SDA =1;
    delay_us(2);        
    IIC_SDA =0;
}

void stop(void)            //停止信号
{
  IIC_SCL =0;
  delay_us(2);
  IIC_SDA =0;
  delay_us(2);
  IIC_SCL =1;
  delay_us(2);
  IIC_SDA =1;

}

void Write_Byte(u8 dat)    //写字节
{
    u16 i = 0;            
  for(i = 0; i<8;i++)
  {
         IIC_SCL = 0;
         delay_us(2);
         if(dat&0x01)        //先传低位再传高位
         {
             IIC_SDA=1;
             delay_us(3);
         }
         else
         {
             IIC_SDA=0;
             delay_us(3);
         }     
         dat>>=1;
         IIC_SCL = 1;
         delay_us(3);
  }


}

TM1640驱动点亮LED灯

TM1640.c

u8 DisBuf[16] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

void Init_Display()    //显示初始化
{
    u8 i;
    
    start();
    Write_Byte(0x40);    //0x40 工作状态 地址自动增加
    stop();
    
    start();
    Write_Byte(0xC0);                        //地址模式
    for(i=0;i<16;i++)
    {
        Write_Byte(DisBuf[i]);
    }
    stop();

    start();
    Write_Byte(0x8d);                        //亮度指令
    stop();
}

main函数

main.c

void main(void)
{
    IO_Init();
    Init_Display();
//    Updata_Display();
    while(1)
    {
        ;
    }

}

其他管脚需要根据自己的硬件自行定义

其他函数

void delay_us(u16 us)
{
    while(us--)
    {
        _nop_();        //需要头文件 #include "intrins.h"
    }
}


 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/735457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存