找回密码
 立即注册
查看: 72|回复: 2

单片机驱动TM1680这个电路图怎么驱动

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-08-13 18:26:11
已绑定手机

3

主题

1

回帖

27

积分

新手上路

积分
27
发表于 2025-8-13 18:26:11 | 显示全部楼层 |阅读模式
TM1680.png 电路图  


我写的程序

void TM1680_WriteData(unsigned char addr, unsigned char dat)       
{
    TM1680start();
          TM1680SendByte(TM1680ID);
          Ack();
    TM1680SendByte(addr);        // 地址
          Ack();
    TM1680SendByte(dat);         // 数据
          Ack();
    I2C_Stop();
}

void Display_SEG(unsigned char *seg_data)
{
    unsigned char i;
          for(i=0; i<8; i++)
          {
        TM1680_WriteData(i*2, 0xFF); // 数码管数据地址间隔
    }
//    for(i=0; i<SEG_NUM; i++)
//          {
//        TM1680_WriteData(i*2, seg_data); // 数码管数据地址间隔
//    }
}

现在现象是只能显示3个LED ,为什么,要显示多个怎么办? 微信图片_20250813182332_14.jpg
回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 2025-8-13 18:28:00 | 显示全部楼层
根据您提供的电路图及程序代码,以下是对TM1680驱动的分析与建议:

TM1680是一款I²C接口的LED数码管驱动芯片,常用于驱动共阴极或共阳极的多位数码管。其通过I²C总线与单片机通信,支持动态扫描和静态显示模式。

从您提供的代码来看,您已实现了基本的I²C通信函数(如TM1680start()、TM1680SendByte()、Ack()、I2CStop()),并尝试通过TM1680WriteData()函数向TM1680写入数据。然而,您的代码存在以下几个问题:

1. 未定义的函数:TM1680start()、TM1680SendByte()、Ack()等函数未在代码中给出定义,需确保这些函数已正确实现,并且符合I²C协议时序。

2. 地址格式不正确:TM1680的I²C地址通常为0x30~0x37(根据A0、A1引脚电平选择)。在发送地址时,应将地址左移一位,并添加读/写位(0x30 | 0x00表示写操作)。

3. 缺少初始化配置:TM1680需要先进行初始化设置(如亮度控制、显示模式、扫描位数等),否则可能无法正常显示。

4. 显示数据格式不完整:DisplaySEG()函数未完成,无法确认是否正确地将段码写入TM1680的指定位置。

建议修改后的代码如下:

```c
// TM1680 I²C地址(假设A0=0, A1=0,地址为0x30)
define TM1680ADDR 0x30

// I²C起始信号
void TM1680start(void) {
    // 根据实际硬件实现I²C起始信号
}

// 发送一个字节
void TM1680SendByte(unsigned char byte) {
    // 根据实际硬件实现I²C发送一个字节
}

// 等待应答
void Ack(void) {
    // 根据实际硬件实现应答检测
}

// I²C停止信号
void I2CStop(void) {
    // 根据实际硬件实现I²C停止信号
}

// 写入TM1680寄存器
void TM1680WriteData(unsigned char addr, unsigned char dat) {
    TM1680start();
    TM1680SendByte(TM1680ADDR

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-08-24 00:56:18
已绑定手机

40

主题

2410

回帖

3256

积分

荣誉版主

积分
3256
发表于 2025-8-13 23:36:15 | 显示全部楼层
提供的信息不太完整,不好推测出问题在哪里,有点建议如下:
1,按照芯片手册命令表里的命令操作
2,将所有显存区都填充数据,没把握的话,可以填充0x55或者0xAA这种间隔01的数据用于调试
3,适当降低I2C的速度,向芯片发送每个字节后都需要等待ACK,而不是发送ACK
睁开眼睛做场梦~~~
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 02:38 , Processed in 0.122586 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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