STM32模拟I2C控制TM1650数码管显示电压电流

模拟I2C控制TM1650数码管显示电压电流

数码管的逻辑

通过数码管来表示字符。
在这里插入图片描述
数码管的abcdefg和dp分别对应这发送过去的8位数据位比如0x3F -> 0011 1111 表示0字符。
如果要加上小数点则在最高位加一,变成了 1011 1111。
在这里插入图片描述

TM1650 原理

SCL:串行通信时钟线

SDA:串行通信数据线

做数码管驱动使用时

DIGx:数码管的位选引脚,灌电流驱动,最大可吸收150mA电流
A~DP:数码管的段驱动引脚,拉电流驱动,最大可输出25mA电流
在这里插入图片描述
这个指令用于设置数码管显示的相关参数。例如亮度,7段或者8段显示,显示的开关。模式命令固定为0x48,而显示命令则满足以下格式:
在这里插入图片描述

TM1650内部有4字节的显存,地址分别为0x68,0x6A,0x6C,0x6E,分别用于存放显示在DIG1,DIG2,DIG3,DIG4的段码数据。例如想要让DIG1对应的数码管位显示数字2,则要往0x68单元写入数字2的共阴段码0x5b。
在这里插入图片描述

模拟I2C的实现

这边主要参考了Leung_ManWah老哥

static void SDA_OUT_MODE(void);
static void SDA_IN_MODE(void);

void IIC2_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStructure;
    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStructure.Pin    = IIC_SCL_PIN;
    GPIO_InitStructure.Speed  = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode   = GPIO_MODE_OUTPUT_OD;
    GPIO_InitStructure.Pull   = GPIO_PULLDOWN;
    HAL_GPIO_Init(IIC_SCL_PORT, &GPIO_InitStructure);

    GPIO_InitStructure.Pin = IIC_SDA_PIN;
    HAL_GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);

    IIC_Stop();
}

void IIC_Start(void)
{
   
    SDA_OUT_MODE();

    IIC_SDA_1();
    IIC_SCL_1();
    HAL_Delay(1);
    IIC_SDA_0();
    HAL_Delay(1);
    IIC_SCL_0();
}

void IIC_Stop(void)
{
   
    SDA_OUT_MODE();

    IIC_SCL_0();
    IIC_SDA_0();
    IIC_SCL_1();
    HAL_Delay(1);
    IIC_SDA_1();
    HAL_Delay(1);
}

void IIC_SendByte(uint8_t ucByte)
{
   
    uint8_t i;

    SDA_OUT_MODE();

    IIC_SCL_0();

    for (i = 0; i < 8; i++)
    {
   
        if (ucByte & 0x80)
        {
   
            IIC_SDA_1();
        }
        else
        {
   
            IIC_SDA_0();
        }
        ucByte <<= 1;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值