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

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"
    }
}


 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值