#ifndef SSD1322_H #define SSD1322_H #include "main.h" #include // ⚡ ИСПРАВЛЕННЫЕ АДРЕСА для FSMC (A16 на PD11) // Command: A16=0, Data: A16=1 (1<<16 = 0x20000) #define SSD1322_COMMAND_ADDR (*(volatile uint8_t*)0x60000000) // A16=0 #define SSD1322_DATA_ADDR (*(volatile uint8_t*)0x60020000) // A16=1 // Параметры дисплея ER-OLEDM032-1 #define SSD1322_WIDTH 256 // Физическая ширина дисплея #define SSD1322_HEIGHT 64 // Физическая высота дисплея // Параметры контроллера SSD1322 (внутренняя память 480x128) // Наша область 256x64 центрируется в 480x128 // Каждая колонка в SSD1322 = 4 пикселя (по 4 бита на пиксель) #define SSD1322_TOTAL_COLS 120 // 480 пикселей / 4 = 120 колонок #define SSD1322_TOTAL_ROWS 128 // Всего строк // Смещение для центрирования 256x64 в 480x128 // (480 - 256) / 2 / 4 = 28 колонок смещение // (128 - 64) / 2 = 32 строки смещение #define SSD1322_COL_START 28 // Первая колонка #define SSD1322_COL_END 91 // Последняя колонка (64 колонки) #define SSD1322_ROW_START 32 // Центрирование: (128-64)/2 = 32 #define SSD1322_ROW_END 95 // 32 + 64 - 1 = 95 // Цвета (4-битные, 16 градаций серого) #define SSD1322_BLACK 0x0 #define SSD1322_DARK_GRAY 0x4 #define SSD1322_GRAY 0x7 #define SSD1322_LIGHT_GRAY 0xB #define SSD1322_WHITE 0xF // Низкоуровневые функции void SSD1322_WriteCommand(uint8_t cmd); void SSD1322_WriteData(uint8_t data); void SSD1322_Reset(void); // Основные функции void SSD1322_Init(void); void SSD1322_SetContrast(uint8_t contrast); void SSD1322_DisplayOn(void); void SSD1322_DisplayOff(void); void SSD1322_Clear(void); void SSD1322_Update(void); void SSD1322_UpdateArea(uint8_t x_start, uint8_t x_end, uint8_t y_start, uint8_t y_end); // Функции рисования void SSD1322_DrawPixel(int16_t x, int16_t y, uint8_t color); void SSD1322_DrawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color); void SSD1322_DrawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color); void SSD1322_DrawFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color); void SSD1322_DrawCircle(int16_t x0, int16_t y0, int16_t r, uint8_t color); void SSD1322_DrawFillCircle(int16_t x0, int16_t y0, int16_t r, uint8_t color); // Функции установки адресов void SSD1322_SetColumnAddress(uint8_t start, uint8_t end); void SSD1322_SetRowAddress(uint8_t start, uint8_t end); void SSD1322_SetWindow(uint8_t col_start, uint8_t col_end, uint8_t row_start, uint8_t row_end); // Работа с текстом void SSD1322_SetCursor(int16_t x, int16_t y); void SSD1322_SetTextColor(uint8_t color); void SSD1322_WriteChar(char ch); void SSD1322_WriteString(const char* str); void SSD1322_WriteStringCentered(uint8_t y, const char* str); void SSD1322_WriteStringAt(uint8_t x, uint8_t y, const char* str); // Утилиты uint16_t SSD1322_GetWidth(void); uint8_t SSD1322_GetHeight(void); // Буфер кадра extern uint8_t SSD1322_frameBuffer[]; #endif