单片机驱动TM1680这个电路图怎么驱动
电路图我写的程序
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 ,为什么,要显示多个怎么办?
根据您提供的电路图及程序代码,以下是对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
[本文内容由国芯人工智能辅助生成,仅供参考] 提供的信息不太完整,不好推测出问题在哪里,有点建议如下:
1,按照芯片手册命令表里的命令操作
2,将所有显存区都填充数据,没把握的话,可以填充0x55或者0xAA这种间隔01的数据用于调试
3,适当降低I2C的速度,向芯片发送每个字节后都需要等待ACK,而不是发送ACK
页:
[1]