вторник, 1 апреля 2014 г.

Библиотека для блока Block7Seg или Выводим текст на семисегментный светодиодный дисплей

Вступление

Повозившись со существующими библиотеками найденными в сети, понял, что не все так гладко как хотелось.
Во первых, еле нашел библиотеку, которая работает по прерываниям (Multiplex7Seg), что дает возможность в основном теле нашей программы заниматься своими делами, а не прорисовывать числа на дисплеях. Ведь без прерывания при обращении к датчику температуры 18B20 дисплей зависает на одной цифре почти на секунду.
Во вторых, та же библиотека как-то коряво выводит числа на дисплей, каким-то хитрым путем прорисовывает точку в дробных числах. И никакой реализации, чтобы вывести что-то больше. А хочется.
В общем взяв эту библиотеку и взяв на вооружение опыт полученный при написании библиотеки для светодиодного дисплея на микросхеме TM1628 и ее части (библиотеки конечно же) я, промудахавшись пару дней, получил нужное.
Итак, прошу любить и жаловать, библиотека для вывода текста на светодиодный семисегментный индикатор подключенный напрямую к микроконтроллеру: lib_Block7Seg.


UPDATE!!!

Библиотека была полностью переработана и доработана!!!
Больше инфо и ссылки на скачивание на Тотальное обновление библиотеки lib_Block7Seg, она же PrintTo7Seg

Описание

Позволяет с помощью функции print() выводить любую текстовую информацию в нужном виде.
Т.е. можно задавать количество выводимых цифр после точки и прочее:
Вот модифицированный пример из Reference для Print (см пример Print_Demo):
  Seg7.print(78, BIN);    // выводит "1001110"
  Seg7.print(78, OCT);    // выводит "116"
  Seg7.print(78, DEC);    // выводит "78"
  Seg7.print(78, HEX);    // выводит "4E"
  Seg7.print(1.23456, 0); // выводит "1"
  Seg7.print(1.23456, 1); // выводит "1.2"
  Seg7.print(1.23456, 3); // выводит "1.234"
  Seg7.print("b.ino");    // выводит "b.ino"
Как видите, открываются интересные возможности.
Кроме того есть дополнительные функции:
Seg7.clear(); - очистка дисплея
Seg7.ml(); - сдвиг содержимого дисплея на одну позицию влево
Seg7.mr(); - сдвиг содержимого дисплея на одну позицию вправо
Seg7.setChar(pos, char); - вывод символа в нужную ячейку (0 - крайняя слева)

Особенности

Есть небольшие особенности работы с этой библиотекой. Процедура вывода информации такова: символ помещается в крайнюю правую ячейку, при выводе очередного символа предыдущий смещается влево. Т.е. при выводе 5ти символов на четырех числовой дисплей первый символ выйдет за пределы, т.е. не будет отображаться. Но зато при последовательном выводе символов с небольшой задержкой можно легко реализовать бегущую строку (см. пример в библиотеке Rinning_Text).
Конечно, нужно понимать, что на семи сегментах невозможно прорисовать полноценный текст, к тому же всего на 4х индикаторах. Но тем не менее без проблем можно вывести короткие сообщения типа:  Set, Test, Err, Load, Shut, Open, Stop, Cool, Heat.
Кстати, шрифт прописан от 32го символа (пробел) до 126го (тильда), т.е. русского шрифта нет, да и многие символы прорисовываются чисто символически (извините за тавтологию)))
Нужно еще обратить внимание на точку, т.к. она прорисовывается не в основном поле, а под ним, то при выводе точки смещения символов не происходит. А значит троеточие будет выводится в одну точку, но это решается вставкой пробелов между точками, как это сделано в примере.

Порта / пины

Пины подключения прописываются в библиотеке (в файле lib_Block7Seg.cpp):
// digitPins - LSB to MSB, segmentPins - a to g, Dp
byte digitPins[4] = { 3, 7, 8, A0 };
byte segmentPins[8] = { 4, 9, A2, A3, 2, 5, A1, 6};
Можно смело прописывать свои порта.

Общий катод / анод

Для подключения дисплеев с общим катодом (или анодом... чего-то я запутался...) нужно раскомментировать:
bool LLOW = LOW;
bool HHIGH = HIGH;
// bool LLOW = HIGH;
// bool HHIGH = LOW;

Заключение

В общем такая вот интересная и универсальная библиотечка вышла, пользуйтесь в свое удовольствие и делитесь впечатлениями и замечаниями.

Фото / видео


Ссылки

Ссылка на библиотеку:  lib_Block7Seg

UPDATE!!!

Библиотека была полностью переработана и доработана!!!
Больше инфо и ссылки на скачивание на Тотальное обновление библиотеки lib_Block7Seg, она же PrintTo7Seg