Порывшись в интернетах я нашел несколько библиотек. В итоге решил разродиться собственной библиотекой тем, более авторы впихивают в них кучу дополнительных процедур и функций. И от этого они у меня не поместились в мой тестовый камешек stm 8s 003K . А мне всего лишь было необходимо выводить на дисплей символы строки и целые числа. В дальнейшем по мере необходимости запилю и другие функции, и рисование, и остальное.
И так дисплей OLED 128x 64 полностью графический, то есть внутри него нет шрифтов и остальных плюшек. Работает он по протоколу I 2C , хотя вроде как есть такие же которые работу по SPI . На него есть документация на английском, а также есть перевод английской документации. В конце документации указан порядок инициализации. В командах есть варианты чтоб менять положение отображения с горизонтального на вертикальное. И можно повернуть и на 90 градусов. Но мне этих функций не надо было. В библиотеке я реализовал только несколько функций.
И так описание того, что реализовано.
1. Честно украденные шрифты для английского языка 6х8 (шесть ширина и восемь высота), по сути, можно найти такие же шрифты и для русского языка. А можно нарисовать самим. Вывод подогнан под размер 6х8.
2. Первая процедура это void oled_i2c_setup(void); предназначена для начальной инициализации встроенного в мк интерфейса I 2C адрес для дисплея определен в дейфайнах. I2C работать будет на частоте 100КГц.
Там же можно добавить убавить контраст, а также сменить ориентацию дисплея.
3. Следующая процедура void OLED _write (uint 8_t ctr _dat , uint 8_t oled _value ); предназначена для отправки на OLED дисплей по I 2C команд и данных. Первый аргумент команда или данные дефайн CMD или DAT . Следующий аргумент то, что надо отправить. Адрес дисплея определен через дефайн в заголовочном файле библиотеки. ПО необходимости можно сменить в комментарии я постарался отобразить те значения, которые могут быть.
4. Процедура void OLED _Init (void ); Инициализация OLED дисплея согласно шагам, описанным в документации на дисплей. В ней можно поменять ориентацию дисплея правда необходимо свериться с документацией. Единственное что я на половину уменьшил контраст дисплея, чтоб не на полную яркость светил.
5. Процедура void OLED _fill (uint 8_t bmp _data ); заполняет экран байтами. То есть если задать байт 0x 00, то дисплей будет черным. Если заполнять 0xFF , то будет включенным. А вот если какое-то произвольное число, то в зависимости от установленных байт будут полоски.
6. Процедура void OLED _gotoxy (uint 8_t x _pos , uint 8_t y _pos ); предназначена для установки текущего положения в строчку x , и столбец y . Так как в данной библиотеки нет процедуры для включения пикселя, то ессно данная процедура предназначена больше для вывода текста.
7. Процедура void OLED _print _char (uint 8_t x _pos , uint 8_t y _pos , uint 8_t ch , out _mode md ); предназначена для выведения символа в позицию x , y , ch символ, который вывести, а md это выбор режима черное по белому(инверсный) или белом по-черному(нормальный). Последний параметр определен через перечисление (POSITIVE, NEGATIVE).
8. Процедура void OLED _print _string (uint 8_t x _pos , uint 8_t y _pos , uint 8_t *ch , out _mode md ); все аналогично процедуре п. 7, но строка эта массив символов, оканчивающихся символом “\n ”.
9. Процедура void OLED _set _contrast (uint 8_t contrast ); для установки контраста ввел на всякий случай, может быть, пригодится. Значение contrast от 0 до 0xFF .
10. Процедура void OLED _print _int (uint 8_t x _pos , uint 8_t y _pos , int 32_t value , out _mode md ); все параметры аналогичны описанным выше. Выводит целое типа signed long.
Для того чтобы нарисовать свой символ достаточно дополнить массив новым символом.
Дальнейшие планы — это перевести эту библиотеку с режима опроса, на прерывания, а также разрешение аварийных ситуаций. Может быть расширить ее графическими примитивами.
Результат работы смотрите в видео, а сам пример на выкладываю на гитхабе. Ссылки может найти ниже.
Документация по контроллеру дисплея на русском языке
http://microsin.net/adminstuff/hardware/ssd1306-oled-controller.html
Гитхаб