Views: 773
Для практического развития приведу схему подключения, библиотеку и проект для вывода информации на графический дисплей OLED 1.1″ RGB UG-9696TDDCG02 использующий драйвер SEPS114A. Этот раздел для специалистов и сильно расписывать нет необходимости. Все параметры видны со схемы, с программы можно понять что где и как настраивается и работает.
Схема подключения
Библиотека
Что нового в этой библиотеки по сравнению с прошлыми, так это добавлен функция рисования окружности, а так все аналогично предыдущим вариантам, для других типов микроконтроллеров.
/*
* File: SEPS114A.h
* Author: Gena Chernov – http://catcatcat.d-lan.dp.ua/
* Catcatcat 2015
* catcatcat@e-mail.ua
* Демонстрационный пример работы графический дисплей CNK111063 драйвер SEPS114A
* OLED 1.1″ RGB UG-9696TDDCG02
* интерфейс SPI.
* версия PIC32_1.0
* интерфейс PIC32MX795F512H
* —————————————————————————–
* вывод номер порт вывод
* индикатора ноги модуля SPI
* D0-SCL 29 RB14 SCK4 – синхронизация
* D1-SDI 32 RF5 SDO4 – данные
* D2-SDO — SDI4 – нет подключения
* D3-R/W 22 RB9 RC1
* D4-VSS
* D5-VSS
* D6-VSS
* D7-VSS
* A0 23 RB10 – тип передаваемых данных 0-команда/1-данные
* CSB 24 RB11 – Выбор кристалла – низкий активный, высокий – отключение драйвера от всех управляющих сигналов шины
* RSTB 30 RB15 – Данные/Команда, 0 – передача команды, 1 – передача данных-RC6 – Чтение/Запись 0 – режим записи 1 – режим чтения
* VCC_C 31 RF4 – управление повышающим DC/DC
* C80-VSS
* PS-VSS
* 96RGB96
* Индикатор подключается к SPI4 PIC32MX795F512H
* Для выполнения функции задержки используется таймер 5
* Кординаты нормальные. Начало нижний левый угол
* Microchip MPLAB® XC32 Compiler v1.34
* Created on 1 Марта 2015 г.
*/
//—————————————————————————————————–
// формат дисплея
#define dispX 96 // ширина дисплея
#define dispY 96
#define FCY 80000000 // 80 MHz
//—————————————————————————————————–
// описание управляющих сигналов
#define A0_OLED LATBbits.LATB10 // *данные/команда
#define CSB_OLED LATBbits.LATB11 // *выбор микросхемы
#define RW_OLED LATBbits.LATB9 // *чтение/запись
#define RSTB_OLED LATBbits.LATB15 // *сброс
#define VCC_C_OLED LATDbits.LATD8 // *вывод управления работой повышающего преобразователя для OLED
#define A0_TRIS TRISBbits.TRISB10 //
#define CSB_TRIS TRISBbits.TRISB11 //
#define RW_TRIS TRISBbits.TRISB9 //
#define RSTB_TRIS TRISBbits.TRISB15 //
#define VCC_C_TRIS TRISDbits.TRISD8 //
//—————————————————————————————————–
void SPI4_ON (void); // инициализация SPI2
//—————————————————————————————————–
void OledInt (void); // инициализация драйвера дисплея
void OledFic_read (void); // фиктивное чтение данных, для эмуляции автоприращения
void OledWriteCom (int IR, int datain); // запись команды управления драйвером
void OledEnVcc (int enable_disable); // выключение/включение внешнего DC/DC преобразователя/off / on the external DC / DC converter
void OledData (void); // установка обращению к регистру данных изображения
void OledPict (void); // запись точки в DDRAM (цветом установленным для рисунка)
void OledFon (void); // запись точки фона в DDRAM (цветом установленным для фона)
void kvadr (unsigned char tip, unsigned char X, unsigned char Y); // рисование квадратиков
//—————————————————————————————————–
void delay_ms (int zad); // функция задержки zad от 0 до 200
//—————————————————————————————————–
// расширенная задание рабочих цветов
// необходимо ввести цвет рисунка, и фона в формате RGB (0-255)
void OledColorSet (unsigned char Rr, unsigned char Gr, unsigned char Br,unsigned char Rf, unsigned char Gf, unsigned char Bf);
//—————————————————————————————————–
// компактная настройка цвета
// необходимо ввести цвет рисунка, и фона в формате 0-15
/* номер цвета R G B R G B
* 0-Black (черный) #000000 (000,000,000)
* 1-Maroon (темно-бордовый) #800000 (128,000,000)
* 2-Red (красный) #FF0000 (255,000,000)
* 3-Green (зеленый) #008000 (000,128,000)
* 4-Lime (ярко-зеленый) #00FF00 (000,255,000)
* 5-Olive (оливковый) #808000 (128,128,000)
* 6-Yellow (желтый) #FFFF00 (255,255,000)
* 7-Navy (темно-синий) #000080 (000,000,128)
* 8-Blue (голубой) #0000FF (000,000,255)
* 9-Purple (фиолетовый) #800080 (128,000,128)
* 10-Fuchsia (фуксин) #FF00FF (255,000,255)
* 11-Teal (серо-зеленый) #008080 (000,128,128)
* 12-Aqua (морская волна) #00FFFF (000,255,255)
* 13-Gray (серый) #808080 (128,128,128)
* 14-Silver (серебряный) #C0C0C0 (192,192,192)
* 15-White (белый) #FFFFFF (255,255,255)
*/
void OledColorFast (unsigned char colP, unsigned char colF);// установить цвет выводимой точки
//—————————————————————————————————–
// быстрая очистка в черный цвет
void OledClearAll (void);// быстрая очистка в черный цвет
//—————————————————————————————————–
/*установка курсора/positioning of the cursor X-(0,95),Y-(0,95)*/
void OledCursor (char Xp, char Yp);
//—————————————————————————————————–
/* Закраска прямоугольной области
* XS – начало левый нижний угол (0-95)
* YS – начало левый нижний угол (0-95)
* XE – конец правый верхний угол (0-95)
* YE – конец правый верхний угол (0-95)
* tip – тир заливки 0-сплошная, 1-градиентная, 2-градиентная серая
* NAP – направление градиента (0-7)
* colorN – цвет 1 (0-15)
* colorS – цвет 2 (0-15)
*/
void OledFillRect (unsigned char XS,unsigned char YS,unsigned char XE,unsigned char YE,unsigned char tip,unsigned char NAP,unsigned char colorN,unsigned char colorS);
//—————————————————————————————————–
/*вывод символа//the output symbol*/
// прорисовка символа
// X – 0-132; Y – 0-64
// cod – символ
// tip – расстояние после символа
// sti – тип наложения на фон 0-наложение 1 – стирание фона
// shi – ширина 0/1-стандартная 7-максимальная.
// vis – высота 0/1-стандартная, 7-максимальная
void OledSymbol (unsigned char cod,unsigned char tip,unsigned char inv,unsigned char shi,unsigned char vis);
//—————————————————————————————————–
/*
* вывод строк/output character strings
* OledString – вывод на дисплей строк c любой точки дисплея
* str строка символов или указатель на строку в ПЗУ
* prop – расстояние между символами
* nalo – тип наложения на фон 0-наложение 1 – стирание фона
* width-[ширина символа] 0-нормальное до 7
* height-[высота символа] 0-нормальное, 1-двойная высота
* X-[координата по X][-1 = центрирование строки Х 0-dispX]
* Y-[координата по Y][координата Y 0-62]
*/
void OledString(const char *str,char prop,char nalo,char width,char height,char X,char Y);
/*вывод строки с текущей позиции*/
void OledStringCur(const char *str,char prop,char inv,char width,char height);
//—————————————————————————————————–
/*
* бегущая строка/ / Ticker
* при вызове функции в окно бегущей строки выводиться 1 следующий символ.
* в цикле вывода информации должна быть одна строка OledTicker
* строка выезжает в окно, пробегает окно, и начинается заново
* str – символьная строка – max 255 символов
* tipvy – тип вывода информации 0- нормальный, 1- в начале наложение
* shiS – ширина символа 0-2 (0,1 == 1)
* vysS – высота символа 0-3 (0,1 == 1)
* X – положение по X
* Y – высота строки (низ)
* dlinokna – длина окна в пикселях (ширина будет подогнана к размеру символов)
*/
void OledTicker (const char *str,char tipvy,char shiS,char vysS,char X,char Y,char dlinokna);
//—————————————————————————————————–
// рисование точки
//[тип] 0-цвет рисунка,1-цвет фона
//[координата по X] 0-95
//[координата по Y] 0-95
void point(unsigned char tip, unsigned char X, unsigned char Y);
//—————————————————————————————————–
// рисование линии алгоритм Брезенхема
// tip тип линии 0-цвет рисунка 1-цвет фона, 2-варианты пунктиров
// x0 y0 x1 y1 – координаты линии
void line(unsigned char tip, unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1);
//—————————————————————————————————–
//Рисование прямоугольника (есть ограничение на задание координат – задание координаты верхний левый угол + ширина и высота)
//1-[тип углов]0-прямые, 1-скругленные
//2-[тип линии] 0-отсутствует 1- сплошная, от 2 и более варианты прорисовки
//3-[толщина бордюра] 0- нет (заливка все равно будет делать 1 пиксель отступа), 1,2,3 толщина
//4-[тип заливки]0-нет заливки,1-цвет рисунка,2-цвет фона, 3 и более варианты
//5-[x0][y0] – координата нижнего левого угла
//6-[ширина] – ширина прямоугольника
//7-[высота] – высота прямоугольника
void rectangle(unsigned char ugl, unsigned char tip, unsigned char bor, unsigned char tipzal, unsigned char x0, unsigned char y0, unsigned char sh, unsigned char vs);
//—————————————————————————————————–
// полоса загрузки индикатор линейный (есть ограничение на задание координат – задание координата нижнего левый угол + ширина и высота)
//[тип углов]0-прямые, 1-скругленные
//[тип линии]0-белая 1- сплошная, от 2 и более варианты
//[тип заливки]0-белая,1-черная, 2 и более варианты
//[x0][y0] – координата нижнего левого угла
//[ширина] – ширина прямоугольника
//[высота] – высота прямоугольника
//[vol] – уровень 0-100%
void strip(unsigned char ugl, unsigned char tip, unsigned char tipzal, unsigned char x0, unsigned char y0, unsigned char sh, unsigned char vs, unsigned char vol);
//—————————————————————————————————–
//tip [тип заливки]0-цвет рисунка,1-цвет фона
//[cx][cy] – координаты центра окружности
//radius[радиус] – радиус окружности
void Circle(unsigned int tip, unsigned int cx, unsigned int cy ,unsigned int radius);
//—————————————————————————————————–
версия 1,1 добавлена функция визуализации чисел в шестнадцатеричном формате
void bin_HEX (unsigned long chisloin);
Продолжение еще будет…