В данном уроке мы подключим OLED экран с драйвером управления SH1106 к микроконтроллеру STM32F103.
Обмен данных происходит по шине I2C.
Hапряжение питание 3,3В.
Ток потребления 23-33 mA
Дисплей состоит из матрицы микро светодиодов и драйвера управления ими. Матрица пикселей дисплея имеет размер 128×64. Таким образом, у нас 64 строки, каждая из которых состоит из 128 пикселей. Матрица пикселей дисплея имеет размер 128×64.
Алгоритм работы OLED экрана:
Работа с экраном начинается с того, что ведущий формирует состояние СТАРТ: генерирует переход сигнала линии SDA из высокого состояния в низкое при высоком уровне на линии SCL. Этот переход воспринимается устройством как признак начала процедуры обмена. Процедура обмена завершается тем, что ведущий формирует состояние «СТОП» — переход состояния линии SDA из низкого состояния в высокое при высоком состоянии линии SCL.
Для подтверждения приёма байта от ведущего передатчика, ведомый передает специальный бит подтверждения,
выставляемый на шину SDA после приёма 8
бита данных.
Передача 8 бит данных от передатчика приёмнику завершаются дополнительным циклом (формированием 9-го тактового
импульса линии SCL), при котором приёмник выставляет низкий уровень сигнала на линииSDA, как флаг успешного приёма байта.
Особенности работы OLED экрана:
Дисплей принимает два вида байт: байты управления, записываемые в регистры управления контроллера, и байты данных, записываемые в оперативную память. Перед отправкой команды или данных сначала посылается управляющий байт, в котором указывает тип байта — команда или данные.
Управляемые команды:
Установка старших битов адреса колонки (00H — 0FH).
Установка младших битов адреса колонки (10H — 1FH).
/**********************/
При вызове команд управления состоянием
источника напряжения дисплей должен быть
выключен.
Вход в режим управления источником
напряжения (ADH);
Выкл/вкл внутренний источник напряжения
(8AH/8BH).
Установка значения подкачки напряжения (30H
— 33H).
Устанавливает выходное напряжение
встроенного источника напряжения (7.4 – 9 В).
Установка начальной строки (40H-7FH).
Устанавливает адрес строки, с которой
начинается вывод информации. Выбранная в
памяти контроллера строка окажется верхней на
дисплее.
Настройка контрастности.
Устанавливает значение контраста дисплея из
256 возможных в диапазоне 00H – FFH.
Включает две команды:
Вход в режим управления контрастом (81H);
Установка значения контраста (00H – FFH).
После отправки данной команды, происходит
автоматический выход из режима управления
контрастом.
Установка режима отображения (A0H/A1H).
Устанавливает инверсный или нормальный
режим отображения информации. Иными
словами, позволяет отображать информацию
зеркально.
Выкл/вкл режим подсветки всего дисплея (A4H
/A5H).
Устанавливает нормальный режим работы
дисплея или принудительно зажигает все
светодиоды.
Выкл/вкл инверсию состояний точек дисплея
(A6H / A7H).
Определяет нормальный режим работы дисплея,
либо инверсный, в котором в зависимости от
содержимого оперативной памяти все
выключенные светодиоды включаются, а
включенные – выключаются.
Выкл/вкл дисплей (AEH/AFH).
Установка адреса страницы (B0H-B7H)
Настройка шины I2C выполняется аналогично уроку: Подключение экрана Winstar WH1604A через I2C интерфейс. Единственным исключением это скорость работы шины, ее мы выставим 400кГц:
Схема подключения:
Программный код:
I2C_HandleTypeDef hi2c2;
#define OLED_adress 0x78
#define OLED_SETCONTRAST 0x81 //установка контраста
#define OLED_DISPLAYALLON_RESUME 0xA4
#define OLED_DISPLAYALLON 0xA5
#define OLED_NORMALDISPLAY 0xA6 //нормальный режим
#define OLED_INVERTDISPLAY 0xA7
#define OLED_DISPLAYOFF 0xAE //выключить экран
#define OLED_DISPLAYON 0xAF // выключить дисплей
#define OLED_SETDISPLAYOFFSET 0xD3
#define OLED_SETCOMPINS 0xDA
#define OLED_SETVCOMDETECT 0xDB
#define OLED_SETDISPLAYCLOCKDIV 0xD5
#define OLED_SETPRECHARGE 0xD9
#define OLED_SETMULTIPLEX 0xA8
#define OLED_SETLOWCOLUMN 0x00 //младшие биты адреса колонки
#define OLED_SETHIGHCOLUMN 0x10 //старшие биты адреса колонки
#define OLED_SETSTARTLINE 0x40 //стартовая строка
#define OLED_MEMORYMODE 0x20
#define OLED_COLUMNADDR 0x21
#define OLED_PAGEADDR 0x22
#define OLED_COMSCANINC 0xC0
#define OLED_COMSCANDEC 0xC8
#define OLED_SEGREMAP 0xA0
#define OLED_CHARGEPUMP 0x8D //включить генератор подкачки
#define OLED_SWITCHCAPVCC 0x2
#define OLED_NOP 0xE3
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_BUFFERSIZE (OLED_WIDTH*OLED_HEIGHT)/8
#define OLED_DEFAULT_SPACE 5
#define COMAND 0x00
#define DATA 0x40
uint16_t gg;
uint8_t temp[2] = {0,0};
uint8_t temp_char[7] = {0,0,0,0,0,0,0};
unsigned char LCD_X,LCD_Y;
typedef struct {
uint16_t CurrentX;
uint16_t CurrentY;
uint8_t Inverted;
uint8_t Initialized;
} SSD1306_t;
static SSD1306_t SSD1306;
unsigned char LCD_Buffer[0x0500] =
{
0x00, 0x00, 0x00, 0x00, 0x00,// 0
0x00, 0x00, 0x5F, 0x00, 0x00,// 1
0x00, 0x07, 0x00, 0x07, 0x00,// 2
0x14, 0x7F, 0x14, 0x7F, 0x14,// 3
0x24, 0x2A, 0x7F, 0x2A, 0x12,//4
0x23, 0x13, 0x08, 0x64, 0x62,//5
0x36, 0x49, 0x55, 0x22, 0x50,//6
0x00, 0x05, 0x03, 0x00, 0x00,//7
0x00, 0x1C, 0x22, 0x41, 0x00,//8
0x00, 0x41, 0x22, 0x1C, 0x00,//9
0x14, 0x08, 0x3E, 0x08, 0x14,//A
0x08, 0x08, 0x3E, 0x08, 0x08,//B
0x00, 0x50, 0x30, 0x00, 0x00,// C
0x08, 0x08, 0x08, 0x08, 0x08,// D
0x00, 0x60, 0x60, 0x00, 0x00,// E
0x20, 0x10, 0x08, 0x04, 0x02,// F
0x00, 0x00, 0x00, 0x00, 0x00,// 0
0x00, 0x00, 0x5F, 0x00, 0x00,// 1
0x00, 0x07, 0x00, 0x07, 0x00,// 2
0x14, 0x7F, 0x14, 0x7F, 0x14,// 3
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 4
0x23, 0x13, 0x08, 0x64, 0x62,// 5
0x36, 0x49, 0x55, 0x22, 0x50,// 6
0x00, 0x05, 0x03, 0x00, 0x00,// 7
0x00, 0x1C, 0x22, 0x41, 0x00,// 8
0x00, 0x41, 0x22, 0x1C, 0x00,// 9
0x14, 0x08, 0x3E, 0x08, 0x14,// A
0x08, 0x08, 0x3E, 0x08, 0x08,// B
0x00, 0x50, 0x30, 0x00, 0x00,// C
0x08, 0x08, 0x08, 0x08, 0x08,// D
0x00, 0x60, 0x60, 0x00, 0x00,// E
0x20, 0x10, 0x08, 0x04, 0x02,// F
0x00, 0x00, 0x00, 0x00, 0x00,// space
0x00, 0x00, 0x5F, 0x00, 0x00,// !
0x00, 0x07, 0x00, 0x07, 0x00,// «
0x14, 0x7F, 0x14, 0x7F, 0x14,// #
0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
0x23, 0x13, 0x08, 0x64, 0x62,// %
0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x05, 0x03, 0x00, 0x00,// ‘
0x00, 0x1C, 0x22, 0x41, 0x00,// (
0x00, 0x41, 0x22, 0x1C, 0x00,// )
0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x50, 0x30, 0x00, 0x00,// ,
0x08, 0x08, 0x08, 0x08, 0x08,// —
0x00, 0x60, 0x60, 0x00, 0x00,// .
0x20, 0x10, 0x08, 0x04, 0x02,// /
0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x08, 0x14, 0x22, 0x41, 0x00,// <
0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x41, 0x22, 0x14, 0x08,// >
0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x32, 0x49, 0x79, 0x41, 0x3E,// @
0x7E, 0x11, 0x11, 0x11, 0x7E,// A
0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x46, 0x49, 0x49, 0x49, 0x31,// S
0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x63, 0x14, 0x08, 0x14, 0x63,// X
0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x02, 0x04, 0x08, 0x10, 0x20,// Yen Currency Sign
0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x01, 0x02, 0x04, 0x00,// `
0x20, 0x54, 0x54, 0x54, 0x78,// a
0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x38, 0x44, 0x44, 0x44, 0x20,// c
0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x38, 0x54, 0x54, 0x54, 0x18,// e
0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x0C, 0x52, 0x52, 0x52, 0x3E,// g
0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x20, 0x40, 0x44, 0x3D, 0x00,// j
0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x38, 0x44, 0x44, 0x44, 0x38,// o
0x7C, 0x14, 0x14, 0x14, 0x08,// p
0x08, 0x14, 0x14, 0x18, 0x7C,// q
0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x08, 0x54, 0x54, 0x54, 0x20,// s
0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x44, 0x28, 0x10, 0x28, 0x44,// x
0x0C, 0x50, 0x50, 0x50, 0x3C,// y
0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x00, 0x08, 0x36, 0x41, 0x00,// <
0x00, 0x00, 0x7F, 0x00, 0x00,// |
0x00, 0x41, 0x36, 0x08, 0x00,// >
0x10, 0x08, 0x08, 0x10, 0x08,// Right Arrow ->
0x78, 0x46, 0x41, 0x46, 0x78,// Left Arrow <-
0x00, 0x00, 0x00, 0x00, 0x00,// 0
0x00, 0x00, 0x5F, 0x00, 0x00,// 1
0x00, 0x07, 0x00, 0x07, 0x00,// 2
0x14, 0x7F, 0x14, 0x7F, 0x14,// 3
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 4
0x23, 0x13, 0x08, 0x64, 0x62,// 5
0x36, 0x49, 0x55, 0x22, 0x50,// 6
0x00, 0x05, 0x03, 0x00, 0x00,// 7
0x00, 0x1C, 0x22, 0x41, 0x00,// 8
0x00, 0x41, 0x22, 0x1C, 0x00,// 9
0x14, 0x08, 0x3E, 0x08, 0x14,// A
0x08, 0x08, 0x3E, 0x08, 0x08,// B
0x00, 0x50, 0x30, 0x00, 0x00,// C
0x08, 0x08, 0x08, 0x08, 0x08,// D
0x00, 0x60, 0x60, 0x00, 0x00,// E
0x20, 0x10, 0x08, 0x04, 0x02,// F
0x00, 0x00, 0x00, 0x00, 0x00,// 0
0x00, 0x00, 0x5F, 0x00, 0x00,// 1
0x00, 0x07, 0x00, 0x07, 0x00,// 2
0x14, 0x7F, 0x14, 0x7F, 0x14,// 3
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 4
0x23, 0x13, 0x08, 0x64, 0x62,// 5
0x36, 0x49, 0x55, 0x22, 0x50,// 6
0x00, 0x05, 0x03, 0x00, 0x00,// 7
0x00, 0x1C, 0x22, 0x41, 0x00,// 8
0x00, 0x41, 0x22, 0x1C, 0x00,// 9
0x14, 0x08, 0x3E, 0x08, 0x14,// A
0x08, 0x08, 0x3E, 0x08, 0x08,// B
0x00, 0x50, 0x30, 0x00, 0x00,// C
0x08, 0x08, 0x08, 0x08, 0x08,// D
0x00, 0x60, 0x60, 0x00, 0x00,// E
0x20, 0x10, 0x08, 0x04, 0x02,// F
0x00, 0x00, 0x00, 0x00, 0x00,// 0
0x00, 0x00, 0x5F, 0x00, 0x00,// 1
0x00, 0x07, 0x00, 0x07, 0x00,// 2
0x14, 0x7F, 0x14, 0x7F, 0x14,// 3
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 4
0x23, 0x13, 0x08, 0x64, 0x62,// 5
0x36, 0x49, 0x55, 0x22, 0x50,// 6
0x00, 0x05, 0x03, 0x00, 0x00,// 7
0x00, 0x1C, 0x22, 0x41, 0x00,// 8
0x00, 0x41, 0x22, 0x1C, 0x00,// 9
0x14, 0x08, 0x3E, 0x08, 0x14,// A
0x08, 0x08, 0x3E, 0x08, 0x08,// B
0x00, 0x50, 0x30, 0x00, 0x00,// C
0x08, 0x08, 0x08, 0x08, 0x08,// D
0x00, 0x60, 0x60, 0x00, 0x00,// E
0x20, 0x10, 0x08, 0x04, 0x02,// F
0x00, 0x06, 0x09, 0x09, 0x06,
0x00, 0x42, 0x7F, 0x40, 0x00,//
0x42, 0x61, 0x51, 0x49, 0x46,//
0x21, 0x41, 0x45, 0x4B, 0x31,//
0x18, 0x14, 0x12, 0x7F, 0x10,//
0x27, 0x45, 0x45, 0x45, 0x39,//
0x3C, 0x4A, 0x49, 0x49, 0x30,//
0x01, 0x71, 0x09, 0x05, 0x03,//
0x36, 0x49, 0x49, 0x49, 0x36,//
0x06, 0x49, 0x49, 0x29, 0x1E,//
0x00, 0x36, 0x36, 0x00, 0x00,//
0x00, 0x56, 0x36, 0x00, 0x00,//
0x08, 0x14, 0x22, 0x41, 0x00,//
0x14, 0x14, 0x14, 0x14, 0x14,//
0x00, 0x41, 0x22, 0x14, 0x08,//
0x02, 0x01, 0x51, 0x09, 0x06,//
0x7E, 0x11, 0x11, 0x11, 0x7E,//
0x7F, 0x49, 0x49, 0x49, 0x31,//
0x7F, 0x49, 0x49, 0x49, 0x36,//
0x7F, 0x01, 0x01, 0x01, 0x03,//
0x60, 0x3E, 0x21, 0x21, 0x7F,//
0x7F, 0x49, 0x49, 0x49, 0x41,//
0x77, 0x08, 0x7F, 0x08, 0x77,//
0x22, 0x41, 0x49, 0x49, 0x36,//
0x7F, 0x10, 0x08, 0x04, 0x7F,//
0x7F, 0x10, 0x09, 0x04, 0x7F,//
0x7F, 0x08, 0x14, 0x22, 0x41,//
0x40, 0x3E, 0x01, 0x01, 0x7F,//
0x7F, 0x02, 0x0C, 0x02, 0x7F,//
0x7F, 0x08, 0x08, 0x08, 0x7F,//
0x3E, 0x41, 0x41, 0x41, 0x3E,//
0x7F, 0x01, 0x01, 0x01, 0x7F,//
0x7F, 0x09, 0x09, 0x09, 0x06,//
0x3E, 0x41, 0x41, 0x41, 0x22,//
0x01, 0x01, 0x7F, 0x01, 0x01,//
0x27, 0x48, 0x48, 0x48, 0x3F,//
0x1E, 0x21, 0x7F, 0x21, 0x1E,//
0x63, 0x14, 0x08, 0x14, 0x63,//
0x3F, 0x20, 0x20, 0x3F, 0x60,//
0x07, 0x08, 0x08, 0x08, 0x7F,//
0x7F, 0x40, 0x7F, 0x40, 0x7F,//
0x3F, 0x20, 0x3F, 0x20, 0x7F,//
0x01, 0x7F, 0x48, 0x48, 0x30,//
0x7F, 0x48, 0x30, 0x00, 0x7F,//
0x00, 0x7F, 0x48, 0x48, 0x30,//
0x22, 0x41, 0x49, 0x49, 0x3E,//
0x7F, 0x08, 0x3E, 0x41, 0x3E,//
0x46, 0x29, 0x19, 0x09, 0x7F,//
0x20, 0x54, 0x54, 0x54, 0x78,//
0x3C, 0x4A, 0x4A, 0x4A, 0x30,//
0x7C, 0x54, 0x54, 0x28, 0x00,//
0x7C, 0x04, 0x04, 0x04, 0x04,//
0x60, 0x38, 0x24, 0x24, 0x7C,//
0x38, 0x54, 0x54, 0x54, 0x18,//
0x6C, 0x10, 0x7C, 0x10, 0x6C,//
0x00, 0x44, 0x54, 0x54, 0x28,//
0x7C, 0x20, 0x10, 0x08, 0x7C,//
0x7C, 0x21, 0x12, 0x09, 0x7C,//
0x7C, 0x10, 0x28, 0x44, 0x00,//
0x40, 0x38, 0x04, 0x04, 0x7C,//
0x7C, 0x08, 0x10, 0x08, 0x7C,//
0x7C, 0x10, 0x10, 0x10, 0x7C,//
0x38, 0x44, 0x44, 0x44, 0x38,//
0x7C, 0x04, 0x04, 0x04, 0x7C,//
0x7C, 0x14, 0x14, 0x14, 0x08,//
0x38, 0x44, 0x44, 0x44, 0x00,//
0x04, 0x04, 0x7C, 0x04, 0x04,//
0x0C, 0x50, 0x50, 0x50, 0x3C,//
0x08, 0x14, 0x7C, 0x14, 0x08,//
0x44, 0x28, 0x10, 0x28, 0x44,//
0x3C, 0x20, 0x20, 0x3C, 0x60,//
0x0C, 0x10, 0x10, 0x10, 0x7C,//
0x7C, 0x40, 0x7C, 0x40, 0x7C,//
0x3C, 0x20, 0x3C, 0x20, 0x7C,//
0x04, 0x7C, 0x50, 0x50, 0x20,//
0x7C, 0x50, 0x20, 0x00, 0x7C,//
0x00, 0x7C, 0x50, 0x50, 0x20,//
0x28, 0x44, 0x54, 0x54, 0x38,//
0x7C, 0x10, 0x38, 0x44, 0x38,//
0x48, 0x54, 0x34, 0x14, 0x7C //
};
void OLED_init(void); // инициализация экрана
void sendCommand(unsigned char command);// отправка команды
void LCD_Clear(void); // очистка
void LCD_Char(unsigned int c); //отправка символа
void LCD_Goto(unsigned char x, unsigned char y); // переход на нужную позицию
void OLED_string(char *string); / /отправка строчки
void OLED_num_to_str(unsigned int value, unsigned char nDigit);// преобразование цифры в текст
void sendCommand(uint8_t command_s){
temp[0] = COMAND;
temp[1] = command_s;
HAL_I2C_Master_Transmit(&hi2c2,OLED_adress,temp,2,100);
}
void sendData(uint8_t data_s){
temp[0] = DATA;
temp[1] = data_s;
HAL_I2C_Master_Transmit(&hi2c2,OLED_adress,temp,2,100);
}
void LCD_Goto(unsigned char x, unsigned char y){
LCD_X = x;
LCD_Y = y;
sendCommand(0xB0 + y);
sendCommand(x & 0xf);
sendCommand(0x10 | (x >> 4));
}
void LCD_Clear(void){
unsigned short i;
unsigned short x=0;
unsigned short y=0;
LCD_Goto(0,0);
for (i=0; i<(OLED_BUFFERSIZE); i++){ //(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)
LCD_Char(‘ ‘);
x ++;
if(x>OLED_WIDTH){
x =0;
y++;
LCD_Goto(0,y);
}
}
LCD_X =OLED_DEFAULT_SPACE;
LCD_Y =0;
}
void LCD_Char(unsigned int c){
unsigned char x = 0;
temp_char[0] = 0x40;
for (x=0; x<5; x++){
temp_char[x+1] = LCD_Buffer[c*5+x];
}
temp_char[6] = 0;
HAL_I2C_Master_Transmit(&hi2c2, OLED_adress, temp_char, 7,1000);
LCD_X += 8;
if(LCD_X>OLED_WIDTH){
LCD_X = OLED_DEFAULT_SPACE;
}
}
void OLED_string(char *string){
while(*string != ‘\0’)
{
LCD_Char(*string);
string++;
}
}
void OLED_num_to_str(unsigned int value, unsigned char nDigit){
switch(nDigit){
case 5: LCD_Char(value/10000+48);
case 4: LCD_Char((value/1000)%10+48);
case 3: LCD_Char((value/100)%10+48);
case 2: LCD_Char((value/10)%10+48);
case 1: LCD_Char(value%10+48);
}
}
void OLED_init(void){
// Выключить дисплей
sendCommand(OLED_DISPLAYOFF);
sendCommand(OLED_SETDISPLAYCLOCKDIV);
sendCommand(0x80);
sendCommand(OLED_SETMULTIPLEX);
//sendCommand(0x1F);//128×32
sendCommand(0x3F);//128×64
sendCommand(OLED_SETDISPLAYOFFSET);
sendCommand(0x00);
sendCommand(OLED_SETSTARTLINE | 0x00);//0
// Используем внутреннюю подкачку
sendCommand(OLED_CHARGEPUMP);
sendCommand(0x14);
// Горизонтальный режим памяти
sendCommand(OLED_MEMORYMODE);
sendCommand(0x00);
sendCommand(OLED_SEGREMAP | 0x1);
sendCommand(OLED_COMSCANDEC);
sendCommand(OLED_SETCOMPINS);
//sendCommand(0x02);//128×32
sendCommand(0x12);//128×64
// Max contrast
sendCommand(OLED_SETCONTRAST);
//sendCommand(0x0F);//0xCF
sendCommand(0xCF);//0xCF
sendCommand(OLED_SETPRECHARGE);
sendCommand(0xF1);
sendCommand(OLED_SETVCOMDETECT);
//sendCommand(0x10);//0x40
sendCommand(0x40);//0x40
sendCommand(OLED_DISPLAYALLON_RESUME);
// Нормальный режим (не инверсный)
sendCommand(OLED_NORMALDISPLAY);
// Включаем дисплей
sendCommand(OLED_DISPLAYON);
}
Использование кода.
OLED_init();
LCD_Clear();
LCD_Goto(0,0);
OLED_string(«Ok»);
LCD_Goto(0,1);
OLED_string(«I2C include SSD1306»);
LCD_Goto(0,3);
LCD_Char(33);