官方硬件原理图
这个芯片可以驱动数码管也可以扫描键盘,这里我们只看数码管驱动,所以原理图参考官方这里就行了。最多只能驱动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.csdn.net/download/HES_C/86832296
写了一个stm32c8t6的小例子,iic用的PB6 PB7模拟。效果如下: