TM1668 与 CT1668 驱动有差异?
在调试案子中发现 TM1668 与 CT1668 同一份代码有不同表现。
在用两款IC驱动LED屏时,CT1668一切正常,但是换上TM1668就会出现显示不全的现象,让其一直扫描更新显示后发现,TM1668显示就像是丢包一样,时有时无。排除了系统时钟频率的问题,代码也用其他IC(TM1628、TM1629、HT1628)测试过,均未发现问题。
后来在驱动write函数后加个延时就好了。之前用过很多这类IC,都用同一份驱动,不知道这次为什么会出现这样的问题。这个问题在别的MCU上测试也是存在。
有知道这个差异是怎么回事的大佬不妨解释解释。。
附上代码:
#define DISPLAY_MODE_SET 0x03
#define DATA_SETTING_CMD 0x40
#define DATA_SETTINGSPEC_CMD 0x44
#define ADDR_SETTING_CMD 0xC0
#define DISPLAY_CONTROL_CMD 0x8f
u8 tm1668_buf[14];
void LED16XXWrite(u8 data)
{
u8 i;
delay_us(1);
STB_LED_L;
delay_us(1);
for(i=0;i<8;i++)
{
CLK_LED_L;
delay_us(5);
if(data & 0x01){
DAT_LED_H;
}else{
DAT_LED_L;
}
delay_us(5);
CLK_LED_H;
data = data >> 1;
}
delay_us(5);//就是这里
}
void LED16XX_init(void)
{
u8 i;
DAT_LED_OUT;
CLK_LED_OUT;
STB_LED_OUT;
CLK_LED_H;
DAT_LED_H;
STB_LED_H;
LED16XXWrite(DISPLAY_MODE_SET);
STB_LED_H;
LED16XXWrite(DATA_SETTING_CMD);
STB_LED_H;
LED16XXWrite(ADDR_SETTING_CMD);
for(i=0;i<14;i++)
{
LED16XXWrite(0);
i++;
}
STB_LED_H;
LED16XXWrite(DISPLAY_CONTROL_CMD);
STB_LED_H;
}
void ledseg_16xx_scan(void)
{
u8 i;
LED1629CWrite(DISPLAY_MODE_SET);
STB_LED_H;
LED1629CWrite(DATA_SETTING_CMD);
STB_LED_H;
LED1629CWrite(ADDR_SETTING_CMD);
for(i=0;i<14;i++)
{
LED1629CWrite(tm1668_buf[i]);
}
STB_LED_H;
LED1629CWrite(DISPLAY_CONTROL_CMD);
STB_LED_H;
}