Набор семисегментных индикаторов - это тоже в своем роде светодиодная матрица (7 сегментов x количество индикаторов). Судя по даташиту, драйвер управляет 16 индикаторами по 8 сегментов. Интерфейс похож на I2C, но без адреса устройства, бита контроля и т.п. Формат передачи данных следующий: сигнал начала передачи, передача команды/данных, сигнал окончания передачи. Эти три шага реализованы в приведенном выше
скетче, функции можно просто скопировать в свой скетч. Можно заодно скопировать инициализацию из функции
setup
. В даташите написано, что поддерживаются три типа команд:
1. Установка режима передачи данных:
0x40
(задание значений для нескольких подряд идущих индикаторов),
0x44
(задание значения для одного индикатора), есть еще тестовый режим, но из даташита не понятно, что он делает.
IIC_start();
IIC_send(0x44); // для простоты будем включать по одному индикатору за раз
IIC_end();
2. Передача данных. Сначала указывается адрес индикатора (от
0xс0
до
0xcf
). Затем в зависимости от режима из первого пункта указываются значения либо подряд идущих индикаторов, начиная с указанного адреса, либо одного. Значения 8-битные (от
0x00
до
0xff
, или от
b00000000
до
b11111111
в двоичной), 8 бит - 8 сегментов. Соответствие между битами и сегментами можно посмотреть в даташите на 17 и 19 стр.
IIC_start();
IIC_send(0xc0); // указываем адрес самого первого индикатора
IIC_send(0xff); // включаем на нем все светодиоды
IIC_end();
IIC_start();
IIC_send(0xc1); // указываем адрес второго индикатора
IIC_send(b10010000); // включаем на нем пару сегментов
IIC_end();
Тут стоит последовательно повключать по одному все индикаторы и записать куда-нибудь какой адрес соответствет какой зоне на табло.
3. Включение/выключение/яркость дисплея. Яркость указывается значением от
0x88
до
0x8f
, выключение -
0x80
(могу ошибаться, мне кажется, что в даташите написано с ошибкой).
IIC_start();
IIC_send(0x88); // ставим минимальную яркость
IIC_end();
IIC_start();
IIC_send(0x8f); // ставим максимальную яркость
IIC_end();
IIC_start();
IIC_send(0x80); // выключаем дисплей
IIC_end();
Выглядит довольно просто, дальше нужно просто экспериментировать.