SM1628C Помогите разобраться с библиотекой

Здравствуйте. Помогите пожалуйста разобраться с дисплеем на драйвере SM1628C. Пробовал разные библиотеки, но на экране высвечиваются сплошные кракозябры. Пробывал код от Евгения П


#define	PIN_CLK	3
#define	PIN_DIO	2
#define	PIN_STB	4	
#define	PIN_IR	13


/////////////////////////////////////////////////////////////
/////////////    ТИПА "библиотека" ДЛЯ TM1668    ////////////
/////////////////////////////////////////////////////////////

//
// при том подключении, что есть
// достаточно 10 байтов на светодиоды и 2 на кнопки
//
#define	LED_DATA_LENGTH	10


//
// Подключено 5 "цифр". 
// 0-ая - это двоеточие, залействовано только два младших бита
// 1-4 - собственно цифры слева направо.
// В цифрах задействовано 7 битов под сегменты (с 0-го по 6-ой)
// и 7-ой бит под доплнительный символ (питание, конверт и т.п.) 
//
#define	SEG_A	0x80	// цифры с 1 по 4
#define	SEG_B	0x0000	// цифры с 1 по 4
#define	SEG_C	0x0000	// цифры с 1 по 4
#define	SEG_D	0x0000	// цифры с 1 по 4
#define	SEG_E	0x0000	// цифры с 1 по 4
#define	SEG_F	0x0000	// цифры с 1 по 4
#define	SEG_G	0x0000	// цифры с 1 по 4

#define	SEG_H	0x80 // Дополнительный символ (	// цифры с 1 по 4)
#define	SEG_ENVELOP	SEG_H // только 1-ая цифра
#define	SEG_ANTENNA	SEG_H // только 2-ая цифра
#define	SEG_POWER	SEG_H // только 3-я цифра
#define	SEG_MUSIC	SEG_H // только 4-ая цифра

#define	SYMBOL_COLON  0x0020	//(SEG_UDOT | SEG_LDOT)	// Двоеточие (только 0-ая цифра)

//
// Символы (цифры / буквы, можно ещё добавить всяких)
//
#define SYMBOL_0 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F)
#define SYMBOL_1 (SEG_B | SEG_C)
#define SYMBOL_2 (SEG_A | SEG_B | SEG_D | SEG_E | SEG_G)
#define SYMBOL_3 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_G)
#define SYMBOL_4 (SEG_B | SEG_C | SEG_F | SEG_G)
#define SYMBOL_5 (SEG_A | SEG_C | SEG_D | SEG_F | SEG_G)
#define SYMBOL_6 (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_7 (SEG_A | SEG_B | SEG_C)
#define SYMBOL_8 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_9 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G)

#define SYMBOL_MINUS (SEG_G)
#define SYMBOL_A (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)
#define SYMBOL_C (SEG_A | SEG_E | SEG_F | SEG_D)
#define SYMBOL_E (SEG_A | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_H (SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)
#define SYMBOL_P (SEG_A | SEG_B | SEG_E | SEG_F | SEG_G)
#define SYMBOL_G (SEG_A | SEG_E | SEG_F)
#define SYMBOL_L (SEG_D | SEG_E | SEG_F)
#define SYMBOL_F (SEG_A | SEG_E | SEG_F | SEG_G)
#define SYMBOL_d (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G)
#define SYMBOL_b (SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define SYMBOL_rP (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F)

//
// Глобальные переменные
//
static uint16_t ledGRID[LED_DATA_LENGTH / 2]; // текущее состояние экрана
static uint8_t currentBrightness = 5;	// текущая яркость
static uint8_t digits[] = { SYMBOL_0, SYMBOL_1, SYMBOL_2, SYMBOL_3, SYMBOL_4, SYMBOL_5, SYMBOL_6, SYMBOL_7, SYMBOL_8, SYMBOL_9 };
static uint16_t saveGRID[LED_DATA_LENGTH / 2]; // нужно для сохранения состояния экрана на время теста
static uint8_t saveBrightness;	// нужно для сохранения яркости на время теста
//
static IRrecv irrecv(PIN_IR);

//
//	Запись одиночной команды в TM1668
//
void writeSingleCommand(const uint8_t command) {
	digitalWrite(PIN_STB, LOW);
	shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, command);
	digitalWrite(PIN_STB, HIGH);
	delayMicroseconds(1); // Пауза до следующей команды
}

//
//	Запись состояния дисплея в TM1668
//
void updateDisplay(void) {
	writeSingleCommand(0x40);  // запись данных, автоматический адрес
	digitalWrite(PIN_STB, LOW);
	shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, 0xC0); // Установка адреса в 0
	uint8_t * p = (uint8_t *) ledGRID;
	for (int8_t i = 0; i < LED_DATA_LENGTH; i++, p++) {
		shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, *p);
	}; // запись данных
	digitalWrite(PIN_STB, HIGH);
	delayMicroseconds(1); // Пауза до следующей команды
}
//
// Установить яркость от 0 (выключено) до 8
// (возвращает старую яркость)
//
static inline uint8_t setBrightness(const uint8_t newBrighness) {
	const uint8_t res = currentBrightness;
	currentBrightness = (newBrighness > 8) ? 8 : newBrighness;
	if (currentBrightness == 0) writeSingleCommand(0x80); // Выключить дисплей
	else writeSingleCommand(0x88 + (currentBrightness - 1)); // Установить яркость
	return res;
}

//
//	Увеличить яркость на 1 (возвращает старую яркость)
//
static inline uint8_t increaseBrightness(void) {
	const uint8_t res = currentBrightness;
	if (currentBrightness < 8) setBrightness(currentBrightness + 1);
	return res;
}

//
//	Уменьшить яркость на 1 (возвращает старую яркость)
//
static inline uint8_t decreaseBrightness(void) {
	const uint8_t res = currentBrightness;
	if (currentBrightness > 0) setBrightness(currentBrightness - 1);
	return res;
}

//
//	Показать тест экрана
// (все символы включены на максимальной яркости)
//
void showTest(void) {
	memcpy(saveGRID, ledGRID, sizeof(saveGRID));
	ledGRID[0] = 0x0ff0;
	ledGRID[1] = 0x0FF0;
	ledGRID[2] = 0x0FF0;
	ledGRID[3] = 0x0FF0;
	ledGRID[4] = 0x0FF0;
  ledGRID[5] = 0x0FF0;
  ledGRID[6] = 0x0FF0;
	updateDisplay();
	saveBrightness = setBrightness(4);
}
//
//	Восстановить экран после теста
//
void hideTest(void) {
	memcpy(ledGRID, saveGRID, sizeof(saveGRID));
	updateDisplay();
	setBrightness(saveBrightness);
}

/*//
//	Показать/скрыть/инвертировать дополнительный символ на цифре n
// Одополнительные символы по цифрам:
// 	1-ая - конверт
// 	2-ая - сигнал (антенна), а может громоксть?
// 	3-я  - значок питания
// 	4-ая - нота (типа музыка)
//
static inline void showExtraSymbol(const int8_t n) { ledGRID[n] |= SEG_H; }
static inline void hideExtraSymbol(const int8_t n) { ledGRID[n] &= ~SEG_H; }
static inline void invertExtraSymbol(const int8_t n) { ledGRID[n] ^= SEG_H; }

//
//	Показать/скрыть/инвертировать конверт
//
static inline void showEnvelope(void) { showExtraSymbol(1); }
static inline void hideEnvelope(void) { hideExtraSymbol(1); }
static inline void invertEnvelope(void) { invertExtraSymbol(1); }

//
//	Показать/скрыть/инвертировать антенну
//
static inline void showAntenna(void) { showExtraSymbol(2); }
static inline void hideAntenna(void) { hideExtraSymbol(2); }
static inline void invertAntenna(void) { invertExtraSymbol(2); }

//
//	Показать/скрыть/инвертировать символ питания
//
static inline void showPower(void) { showExtraSymbol(3); }
static inline void hidePower(void) { hideExtraSymbol(3); }
static inline void invertPower(void) { invertExtraSymbol(3); }

//
//	Показать/скрыть/инвертировать ноту
//
static inline void showMusic(void) { showExtraSymbol(4); }
static inline void hideMusic(void) { hideExtraSymbol(4); }
static inline void invertMusic(void) { invertExtraSymbol(4); }*/

//
//	Показать/скрыть/инвертировать верхнюю точку двоеточия
//
//static inline void showUpperDot(void) { ledGRID[0] |= SEG_UDOT; }
//static inline void hideUpperDot(void) { ledGRID[0] &= ~SEG_UDOT; }
//static inline void invertUpperDot(void) { ledGRID[0] ^= SEG_UDOT; }

//
//	Показать/скрыть/инвертировать нижнюю точку двоеточия
//
//static inline void showLowerDot(void) { ledGRID[0] |= SEG_LDOT; }
//static inline void hideLowerDot(void) { ledGRID[0] &= ~SEG_LDOT; }
//static inline void invertLowerDot(void) { ledGRID[0] ^= SEG_LDOT; }

//
//	Показать/скрыть/инвертировать двоеточие
//
static inline void showColon(void) { ledGRID[4] |= SYMBOL_COLON; }
static inline void hideColon(void) { ledGRID[4] &= ~SYMBOL_COLON; }
static inline void invertColon(void) { ledGRID[4] ^= SYMBOL_COLON; }

//
//	Показать цифру value (0-9) в позиции digit (1-4)
// при этом, если у цифры горит дополнительный символ, сохраняем его
//
static inline void setDigit(const int8_t digit, const uint8_t value) {
	if (digit < 0 || digit > 14) return; // цифры у нас с 1-ой по 4-ую слева направо
	ledGRID[digit] = value | (ledGRID[digit] & SEG_H); // не обижать дополнительный символ, если есть
}

//
//	Показать число m в двух правых цифрах (типа минуты или там секунды)
//
static inline void showMinutes(const int8_t m) {
	setDigit(4, digits[m % 10]);
	setDigit(7, digits[m / 10]);
}

//
//	Показать число h в двух левых цифрах (типа часы или там минуты)
//
static inline void showHours(const int8_t h) {
	setDigit(2, digits[h % 10]);
	setDigit(1, digits[h / 10]);
}


//
//	Показать и часы, и минуты
//
static inline void showClock(const int8_t h, const int8_t m) {
	showHours(h);
	showMinutes(m);
}

/////////////////////////////////////////////////////////////
////////////    КОНЕЦ "библиотеки" ДЛЯ TM1668    ////////////
/////////////////////////////////////////////////////////////



void setup(void) {
	//
	// Инициализация пинов
	pinMode(PIN_CLK, OUTPUT);
	pinMode(PIN_DIO, OUTPUT);
	pinMode(PIN_STB, OUTPUT);
	pinMode(PIN_IR, INPUT);
	digitalWrite(PIN_STB, HIGH);
	digitalWrite(PIN_CLK, HIGH);
	//
	// Инициализация экрана
	writeSingleCommand(0x03); // Режим отображения (1 и 2 - ничего не меняется)
	setBrightness(currentBrightness);
	//
	// Пишем на экране слово ПОПА
	//setDigit(14, SYMBOL_1);
	//setDigit(6, SYMBOL_0|SYMBOL_2);
	//setDigit(3, SYMBOL_2);
	//setDigit(0, SYMBOL_3);
//	updateDisplay();
	//
	// Даём 5 секунд полюбоваться
	//delay(5000);
	//
	// Рисуем нулевое время
	showClock(0, 0);
	showColon();
	updateDisplay();
	//
	//  Приступаем к слушанию "эфира"
	irrecv.enableIRIn(); // Слушаем пульт
}



void loop(void) {
	static int8_t m = 0, s = 0;	// минуты и секунды для показа
	static uint32_t oldMillis = 0;	// запомненное состояние счётчика миллисекунд
	static bool alreadyBlinked = false;	// флаг. Если true, то на этой секунде двоеточием уже мигали
	bool haveToUpdate = false;	// Если true, то в конце нужно обновить экран
	
	const uint32_t currMillis = millis();
	const uint32_t diffMillis = currMillis - oldMillis;

	//
	// Двоеточием мигаем вдвое чаще, чем меняются цифры
	//
	if (! alreadyBlinked && diffMillis >= 500) {
		invertColon();
		haveToUpdate = true;
		alreadyBlinked = true;
	}

	//
	//	Пришла пора сменить цифру
	//
	if (diffMillis >= 1000) {
		s++;
		if (s == 60) {
			s = 0;
			m = (m + 1) % 60;
		}
		showClock(m, s);
		invertColon();
		haveToUpdate = true;
		alreadyBlinked = false;
		oldMillis = currMillis;
	}

	

	//
	// Если пришла команда с пульта (любая, кроме символа повтора),
	// Показываем тест экрана
	//
	decode_results results;
	if (irrecv.decode(&results)) {
		if (results.value != 0xFFFFFFFFUL) {
			showTest();
			delay(1000);
			hideTest();
		}
		irrecv.resume();
	}

	if (haveToUpdate) updateDisplay(); // Обновляем экран, если нужно
}

Но ничего не получилось. вот с этим кодом показывает счет до 9999, но первый сегмент переключает цифры вместе со вторым

     const int dataPin = 2;   // VDIO
     const int clockPin = 3;  // VCLK
     const int strobePin = 4; // VSTR
     const int intensity = 7; // яркость 0-7

byte led[14]={};//массив дисплея

void setup() {
 pinMode(dataPin, OUTPUT);       //
 pinMode(clockPin, OUTPUT);//
 pinMode(strobePin, OUTPUT);//

//long x=0L;//               число для записи в дисплей
  for(long x=0; x<9999; x++){
 for(int i=0; i<14; i++){//  очистка дисплея
   led[i]=0x00;
 }

 delay (30);
 //              разбивка числа на цифры для формирования массива
 byte  n0=x/1000;//    1-я цифра
 kodd_3(0x0002,n0);//      подготовка вывода на led 1
 byte  n2=(x/1000)%10;//2-я цифра
kodd_3(0x0001,n2);//       подготовка вывода на led 2 
 byte  n3=(x/100)%10;// 3-я цифра
 kodd(0x80,n3);//      подготовка вывода на led 3
byte n4=(x/10)%10;//        4-я цифра
 kodd(0x40,n4);//      подготовка вывода на led 4
byte n5=6;
kodd_2(0x30,n5);
//*********************************************************

 digitalWrite(strobePin, HIGH);
 digitalWrite(clockPin, HIGH);

 t_sendCommand(0x88 | min(7, intensity));//      команда 4 0x88
 t_sendCommand(0x03);//                          команда 1
 t_sendCommand(0x40);//                          команда 2
 t_sendCommand3(0XC0);//                         команда 3+


for (int j=0; j<14; j++){//      запись сформированного массива
   t_send(led[j]);//            в led дисплей
}
 digitalWrite(strobePin,HIGH);
}
}
//***************************************************************
// функции (подпропраммы)
void kodd(byte kod, byte n1)
{
  if (n1==1)
  {
   led[2]+=kod, led[4]+=kod;//                                        запись в массив цифры 1 
  }
  if (n1==2)
  {
   led[0]+=kod, led[2]+=kod, led[12]+=kod, led[8]+=kod, led[6]+=kod;//запись в массив цифры 2
  }
  if (n1==3)
  {
   led[0]+=kod, led[2]+=kod, led[12]+=kod, led[4]+=kod, led[6]+=kod;//запись в массив цифры 3
  }
  if (n1==4)
  {
   led[10]+=kod, led[12]+=kod, led[2]+=kod, led[4]+=kod;             //запись в массив цифры 4
  }
  if (n1==5)
  {
   led[0]+=kod, led[10]+=kod, led[12]+=kod, led[4]+=kod, led[6]+=kod; //запись в массив цифры 5
  }
  if (n1==6)
  {
   led[0]+=kod, led[10]+=kod, led[8]+=kod, led[6]+=kod,led[4]+=kod, led[12]+=kod;//        цифры 6
  }
  if (n1==7)
  {
   led[0]+=kod, led[2]+=kod, led[4]+=kod;                             //запись в массив цифры 7
  }
  if (n1==8)
  {
   led[0]+=kod, led[2]+=kod, led[4]+=kod, led[6]+=kod, led[8]+=kod, led[10]+=kod, led[12]+=kod;// цифры 8
  }
  if (n1==9)
  {
   led[0]+=kod, led[2]+=kod, led[4]+=kod, led[6]+=kod, led[10]+=kod, led[12]+=kod;//        цифры 9 
  }
  if(n1==0)
  {
   led[0]+=kod, led[2]+=kod, led[4]+=kod, led[6]+=kod, led[8]+=kod, led[10]+=kod;//         цифры 0
  }
  
  }

void kodd_3(byte kod, byte n1)
{
  if (n1==1)
  {
   led[3]+=kod, led[5]+=kod;//                                        запись в массив цифры 1 
  }
  if (n1==2)
  {
   led[1]+=kod, led[3]+=kod, led[13]+=kod, led[9]+=kod, led[7]+=kod;//запись в массив цифры 2
  }
  if (n1==3)
  {
   led[1]+=kod, led[3]+=kod, led[13]+=kod, led[5]+=kod, led[7]+=kod;//запись в массив цифры 3
  }
  if (n1==4)
  {
   led[11]+=kod, led[13]+=kod, led[3]+=kod, led[5]+=kod;             //запись в массив цифры 4
  }
  if (n1==5)
  {
   led[1]+=kod, led[11]+=kod, led[13]+=kod, led[5]+=kod, led[7]+=kod; //запись в массив цифры 5
  }
  if (n1==6)
  {
   led[1]+=kod, led[11]+=kod, led[9]+=kod, led[7]+=kod,led[5]+=kod, led[13]+=kod;//        цифры 6
  }
  if (n1==7)
  {
   led[1]+=kod, led[3]+=kod, led[5]+=kod;                             //запись в массив цифры 7
  }
  if (n1==8)
  {
   led[1]+=kod, led[3]+=kod, led[5]+=kod, led[7]+=kod, led[9]+=kod, led[11]+=kod, led[13]+=kod;// цифры 8
  }
  if (n1==9)
  {
   led[1]+=kod, led[3]+=kod, led[5]+=kod, led[7]+=kod, led[11]+=kod, led[13]+=kod;//        цифры 9 
  }
  if(n1==0)
  {
   led[1]+=kod, led[3]+=kod, led[5]+=kod, led[7]+=kod, led[9]+=kod, led[11]+=kod;//         цифры 0
  }
  
  }




void kodd_2(byte kod, byte n2)
{
  
  if(n2==0)
  {
   led[0]+=kod;// play=0      
  }
  if(n2==1)
  {
   led[2]+=kod;// rec=2   
  }
  if(n2==2)
  {
   led[4]+=kod;//usb=4    
  }
  if(n2==3)
  {
   led[6]+=kod;// disc=6     
  }
  if(n2==4)
  {
   led[10]+=kod;// hdd=10     
  }
  if(n2==5)
  {
   led[12]+=kod;// lan=12     
  }
  if(n2==6)
  {
   led[8]+=kod;//  dp=8      
  }
}
//custom functions
//******************************************************************************************************
void t_sendCommand(byte cmd)//     управление дисплеем
{
 digitalWrite(strobePin, LOW);
 t_send(cmd);
 digitalWrite(strobePin, HIGH);
 
}
void t_sendCommand3(byte cmd)
{
 digitalWrite(strobePin, LOW);
 t_send(cmd);
}

void t_sendData(byte seg)// byte Nled
{
 digitalWrite(strobePin, LOW);
 t_send(seg);                        
 digitalWrite(strobePin, HIGH);
}

void t_send(byte data)
{
 for (int i = 0; i < 8; i++) {                  //пишет 8 бит 
   digitalWrite(clockPin, LOW);
   digitalWrite(dataPin, data & 1 ? HIGH : LOW);// данных в ТМ
   data >>= 1;
   digitalWrite(clockPin, HIGH);
 }

}
void loop (){
  
}

Помогите пожалуйста, просто я в этом новичок

1 лайк

Прочитайте, пожалуйста, вводную тему и вставьте код еще раз

Извините пожалуйста

Спасибо, теперь хорошо.

Пробуй:

Там же и примеры для теста найдешь. Например:

Спойлер
// Testing sketch for DVD LED module with TM1628 IC
// Written by Vasyl Yudin, oct 2012, public domain
// www.blockduino.org

#include <TM1628.h>
// define - data pin D9, clock pin D8 and strobe pin D7
// обьявление портов: DIO - порт D9, CLK - D8, STB - D7
TM1628 dvdLED(9, 8, 7); 

void setup() {
  dvdLED.begin(ON, 2);
}

void loop() {
int z=0;
    dvdLED.clear();
    dvdLED.print("b_duino");
    dvdLED.setLED(z++);
    delay(1000);
    
// пример взят из reference/Serial_Print.html
    dvdLED.clear();
    dvdLED.print(78);//DEC default
    dvdLED.setLED(z++);
    delay(1000);

    dvdLED.clear();
    dvdLED.print(78, BYTE);
    dvdLED.setLED(z++);
    delay(1000);

    dvdLED.clear();
    dvdLED.print(78, BIN);
    dvdLED.setLED(z++);
    delay(1000);
    
    dvdLED.clear();
    dvdLED.print(78, OCT);
    dvdLED.setLED(z++);
    delay(1000);
    
    dvdLED.clear();
    dvdLED.print(78, HEX);
    dvdLED.setLED(z++);
    delay(1000);
    
    dvdLED.clear();
    dvdLED.print(-1.2345678);
    dvdLED.setLED(z++);
    delay(1000);
    
    dvdLED.clear();
    dvdLED.print(-1.2345678, 4);
    dvdLED.setLED(z++);
    delay(1000);
}
/* sequence of LEDs:
   порядок светодиодов:
    LED_SE0 0x00
    LED_SE1 0x01
    LED_SE2 0x02
    LED_SE3 0x03
    LED_SE4 0x04
    LED_SE5 0x05
    LED_SE6 0x06
    LED_SE7 0x07
    LED_DVD 0x08
    LED_VCD 0x09
    LED_MP3 0x0A
    LED_PLY 0x0B
    LED_PAU 0x0C
    LED_PBC 0x0D
    LED_RET 0x0E
    LED_DTS 0x0F
    LED_DDD 0x10
    LED_CL1 0x11
    LED_CL2 0x12
*/

Спасибо большое. Попробовал, все тесты показывают только 3 цифру, 1 и 4 вообще ничего а во 2 моргают сегменты. Мне кажется адреса у меня не совпадают как это подправить? Где это меняется?

Если попробовать вывести 9876, то 7 высвечивается нормально, 1 и 4 негорят совсем, в 3 зажигается сегмент “b”, все остальные также не горят

Если в библиотеке изменить адреса вот этой строчке
const byte led_addr[19]={0x03,0x0B,0x0D,0x07,0x05,0x09,0x0D,0x01,0x01,0x03,0x05,0x09,0x0b,0x07,0x00,0x08,0x06,0x02,0x04};//adress -| for the signs's and disc's leds
это поможет зажечь все цифры?

Вроде бы TM1628 и SM1628 аналоги. Значит ничего там менять не нужно. Проверь правильность подключения.

// define - data pin D9, clock pin D8 and strobe pin D7
// обьявление портов: DIO - порт D9, CLK - D8, STB - D7
TM1628 dvdLED(D9, D8, D7);

подключение проверял.
сейчас изменил в библиотеке вот эту строчку

const byte seg_addr[14]={0x05,0x00,0x07,0x06,0x00,0x00,0x00};

и получилось зажечь 4 цифру, но с первыми никак

Если ли у кого-то все таки будет возможность помочь в редактировании библиотеки, то вот какое подключение дисплея к драйверу у меня:
12=grid1, 11=grid2, 10=grid3, 9=grid4, 8=grid5/seg14, 7=grid6/seg13,
6=grid7/seg12, 5=seg10/ks10, 4=seg9/ks9, 3=seg8/ks8, 2=seg7/ks7, 1=seg6/ks6
1-12 это выводы дисплея

У меня ничего подобного нет. Я 7-сегментники подключал «напрямую».

Спасибо что откликнулись. Если ничего не выйдет то тоже буду напрямую подключать.

А даташит то Вы нашли?
(если где-то выше есть - извиняюсь, просто дайте ссылку)

Это полный аналог TM1628

Так, стоп, у Вас-то что? TM или SM?

SM
Там у вас в коде TM1668 в тесте 0x0FF, так у меня загорается 3 и 4 разряд а если 0x0FF0, то все

Еще забыл сказать с вашим кодом от TM1668 правильно работают двоеточие

Значит Вам надо просто подобрать битики. Сейчас я немного занят, потом вернусь, но у Вас есть работа.

Если у Вас ВСЕ разряды загораются при 0x0FF0, то поэкспериментируйте за что отвечает каждый бит. Т.е. переберите все 16 вариантов (0x0010, 0x0020, 0x0040 , 0x0080 и т.д.) и тщательно фиксируйте (записывайте) какой бит за что отвечает - без этого никуда, это надо делать, вот и делайте пока.