TM1668 与 CT1668 驱动有差异?

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;
}

你可能感兴趣的:(TM1668 与 CT1668 驱动有差异?)