CH455G驱动数码管

官方硬件原理图

 这个芯片可以驱动数码管也可以扫描键盘,这里我们只看数码管驱动,所以原理图参考官方这里就行了。最多只能驱动4个数码管。

官方数码管驱动说明

文档中说了芯片是iic通信控制,时序也是标准的iic时序,所以驱动我们用标准的iic驱动就可以了。如果你用的是正常写好可以用的iic驱动,但是驱动不了ch455g,那么不要怀疑,肯定不是你iic的问题,请你好好检查硬件。

看到这一段,我们大致知道ch455g有一个系统参数命令,48H,控制着一些模式,亮度等等,一次需要传输2个字节,第一个是命令,第二个是数据,但是并没有清晰的看出传输字节2的数据位怎么分配的。

如果我没有猜错的话,它的位分布应该是这样,如下图。

 各功能子手册都有介绍,对于数码管应用,一般我们只需要控制ENA,和INTENS亮度即可,

如何显示数据

加载数据,字节1有四个命令68H,6AH,6CH,6E,字节2是要显示的数据,数据位中也是一位控制数码管的一个灯,了解数码管的原理的应该看到这就很熟悉了,

例如数据=0x01(00000001),那么就只有数码管A那一段灯亮,

如果数据=0x80(10000000),那么就只有DP那一段灯亮,其实就是那个小数点,

那么我们就可以写一个BCD码出来显示各种文字了。

//0-f
static u8 bcdcode[16]={ 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F,\
												0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 };

驱动编写使用

说明:因为iic是通用的驱动,这里就不介绍了,可以用硬件的,也可以用模拟的,关于在网上看到说命令字节需要右移一位,这个可能跟他的iic驱动有关系,正常的是不用的。

应用驱动

ch455g_send_cmd   函数用到了iic的函数,先发送命令字节,然后发送数据字节。

ch455g_init  函数主要是把系统48H命令设置成0x01,等于使能芯片。

ch455g_test  函数测试四个管子显示 0,1,2,3,具体数据在上方的bcd表中

//初始化
void ch455g_init(void)
{
	IIC_Init();
	IIC_ch455_Send_Byte(0x48,0x01);
	
}

 //发送数据
void ch455g_send_cmd(u8 cmd,u8 data)
{
		IIC_Start();
		IIC_Send_Byte(cmd);
		IIC_Wait_Ack();
		IIC_Send_Byte(data);
		IIC_Wait_Ack();
		IIC_Stop();
	
}

//测试
void ch455g_test(void)
{
		ch455g_send_cmd(0x68,bcdcode[0]);
		ch455g_send_cmd(0x6A,bcdcode[1]);
		ch455g_send_cmd(0x6C,bcdcode[2]);
		ch455g_send_cmd(0x6E,bcdcode[3]);

}

显示效果:

 整体上使用还是比较简单的。

例子源码:

https://download.youkuaiyun.com/download/HES_C/86832296

写了一个stm32c8t6的小例子,iic用的PB6  PB7模拟。效果如下:

 

<think>好的,我现在需要解决用户关于CH455G驱动数码管的问题。首先,用户提供了几个引用资料,我需要仔细看看这些引用是否和CH455G相关。不过看引用内容,大部分是关于CH422和STC89C52RC的,可能用户想通过这些资料来类比解决CH455G的问题。 首先,我需要确认CH455G的基本信息。CH455G应该是一个数码管驱动芯片,可能和CH422类似,但具体参数可能不同。用户可能遇到了驱动数码管时的问题,比如显示不稳定、无法正常扫描、亮度不均或者通信问题等。 接下来,我需要根据常见的数码管驱动问题来分析可能的原因。例如,硬件连接是否正确,包括段选、位选、电源和地线;软件配置是否正确,比如初始化流程、数据格式、扫描频率;还有可能涉及动态扫描的原理,比如是否正确地分时点亮各个数码管。 引用中提到CH422需要动态驱动数码管,并且提到了段码和COM端的配合,这可能同样适用于CH455G。另外,用户提供的CH422驱动资料中提到了双线串行接口,可能CH455G也是类似的通信方式,需要检查SPI或I2C的配置是否正确。 可能用户的问题包括:数码管不亮、部分段不显示、闪烁、通信失败等。解决方案需要从硬件连接检查开始,确认各个引脚是否正确连接,尤其是段码和位选信号。软件方面需要确保正确的初始化序列,数据发送时序,以及适当的扫描频率设置。 此外,引用中提到数码管的动态驱动需要段码和COM端配合,这意味着在CH455G驱动时,需要正确设置位选信号,依次点亮各个数码管,并保持足够的刷新率以避免闪烁。如果扫描频率过低,可能导致显示闪烁;过高则可能影响亮度或导致电流问题。 可能还需要考虑电流限制和电阻的选择,确保每个LED段的电流在安全范围内,避免烧毁芯片或数码管。同时,软件上可能需要处理数据的更新和缓冲,避免显示内容在更新时出现残影或错乱。 最后,用户可能需要具体的代码示例或配置步骤,但根据引用资料中的CH422示例,可以推测CH455G驱动代码结构可能类似,需要初始化芯片,设置工作模式,然后循环发送显示数据。 总结一下,我需要从硬件连接、软件配置、动态扫描原理、电流控制等方面来组织回答,并引用用户提供的资料中相关的部分,比如动态驱动的概念和通信接口的配置。</think>### CH455G驱动数码管问题分析与解决方案 #### 一、常见问题分析 1. **显示不全或闪烁** 动态数码管需要段码和位选信号配合,若扫描频率过低(通常低于50Hz)会导致肉眼可见的闪烁,而扫描时序错误会导致部分位数码管无法点亮[^3]。 2. **通信失败** CH455G采用**I2C或SPI接口**,若未正确配置时钟频率、数据格式或地址偏移,会导致芯片无响应。例如,未发送起始条件或ACK信号未处理[^4]。 3. **亮度不均匀** 段电流限制电阻配置不当会导致亮度差异。例如,红色数码管需更低限流电阻(如100Ω),绿色则需更高电阻(如200Ω)[^1]。 4. **硬件布线干扰** 若段码线(SEG)与位选线(DIG)未按LSB到MSB顺序对齐,会增加软件译码复杂度,甚至导致显示错乱[^1]。 --- #### 二、硬件解决方案 1. **引脚连接规范** - 确认**SEG0-SEG7**与数码管段码(a-g, dp)按顺序直连 - **DIG0-DIG3**与数码管位选一一对应 - 参考典型电路连接下拉电阻(如10kΩ)和滤波电容(0.1μF) 2. **电流配置公式** 段电流由`ISET`引脚电阻决定: $$R_{SET} = \frac{V_{REF}}{I_{SEG}} \quad (V_{REF}=1.5V)$$ 例如需5mA段电流时:$R_{SET}=1.5V/5mA=300Ω$ 3. **抗干扰设计** - 电源线与信号线分开布线 - 超过15cm连线时增加RC滤波(如100Ω+100pF) --- #### 三、软件实现要点 ```c // CH455G初始化示例(I2C模式) void CH455_Init() { I2C_Start(); I2C_Write(0x40); // 设备地址+写命令 I2C_Write(0x02); // 设置显示模式:4位数码管,7段+DP I2C_Write(0x01); // 开启显示和键盘扫描 I2C_Stop(); } // 数码管数据发送 void CH455_WriteDigit(uint8_t pos, uint8_t data) { I2C_Start(); I2C_Write(0x48); // 数码管数据命令头 I2C_Write(pos | 0x08); // 位选地址(0x08-0x0B对应DIG0-DIG3) I2C_Write(data); // 段码数据 I2C_Stop(); } ``` --- #### 四、特殊问题处理 1. **多片级联冲突** 通过`ADDR`引脚设置不同地址(0x40/0x42/0x44/0x46),需确保地址译码电路正确。 2. **与LED共用控制** CH455G的LED输出与数码管共享驱动,需在命令字中设置`LED_EN=1`,并通过`0x44`命令字控制LED。 3. **休眠模式唤醒** 发送唤醒命令后需延迟>10ms再操作: ```c I2C_Write(0x01); // SLEEP=0唤醒 delay_ms(15); ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值