This commit is contained in:
Олег Бородин
2025-01-18 13:25:14 +02:00
parent 4b289d1c46
commit 9ae1e7bc07
10 changed files with 137 additions and 27115 deletions

45
disp.c
View File

@@ -6,8 +6,8 @@
#include <i2c.h>
#include <disp.h>
#define DISP_FONT basefont
#define DISP_I2CADDR (0x78 >> 1)
#define DISP_FONT basefont
#define DISP_I2CADDR 0x78
#define DISP_WIDTH 128
#define DISP_HEIGHT 64
@@ -23,15 +23,6 @@
#define DISP_SEND_CMD 0x00
#define DISP_SEND_DATA 0x40
const uint8_t basefont[DISP_MAX_CHARCODE - DISP_MIN_CHARCODE][DISP_CHAR_ARRLEN] PROGMEM;
typedef struct {
uint8_t max_posx;
uint8_t max_posy;
} disp_t;
disp_t disp;
#define SSD1306_SETLOWCOLUMN 0x00 /* Set Lower Column Start Address for Page Addressing Mode. */
#define SSD1306_SETHIGHCOLUMN 0x10 /* Set Higher Column Start Address for Page Addressing Mode. */
#define SSD1306_MEMORYMODE 0x20 /* Set Memory Addressing Mode. */
@@ -60,6 +51,19 @@ disp_t disp;
#define SSD1306_DEACTIVATE_SCROLL 0x2E /* Deactivate scroll */
#define SSD1306_NOP 0XE3 /* No Operation Command. */
const uint8_t basefont[DISP_MAX_CHARCODE - DISP_MIN_CHARCODE][DISP_CHAR_ARRLEN] PROGMEM;
static void disp_send_cmd(uint8_t cmd[], uint8_t size);
static void disp_send_data(uint8_t data[], uint16_t size);
typedef struct {
uint8_t max_posx;
uint8_t max_posy;
} disp_t;
disp_t disp;
const uint8_t init_sequence[] PROGMEM = {
SSD1306_DISPLAYOFF,
SSD1306_MEMORYMODE, 0x00,
@@ -83,20 +87,22 @@ const uint8_t init_sequence[] PROGMEM = {
};
void disp_send_cmd(uint8_t cmd[], uint8_t size) {
i2c_send_addr((DISP_I2CADDR << 1) | 0);
i2c_send_data(DISP_SEND_CMD);
static void disp_send_cmd(uint8_t cmd[], uint8_t size) {
i2c_start();
i2c_write(DISP_I2CADDR);
i2c_write(DISP_SEND_CMD);
for (uint8_t i = 0; i < size; i++) {
i2c_send_data(cmd[i]);
i2c_write(cmd[i]);
}
i2c_stop();
}
void disp_send_data(uint8_t data[], uint16_t size) {
i2c_send_addr((DISP_I2CADDR << 1) | 0);
i2c_send_data(DISP_SEND_DATA);
static void disp_send_data(uint8_t data[], uint16_t size) {
i2c_start();
i2c_write(DISP_I2CADDR);
i2c_write(DISP_SEND_DATA);
for (uint16_t i = 0; i < size; i++) {
i2c_send_data(data[i]);
i2c_write(data[i]);
}
i2c_stop();
}
@@ -174,7 +180,6 @@ void disp_clear(void) {
void disp_set_invert(bool invert) {
uint8_t commands[1];
if (invert == true) {
commands[0] = SSD1306_INVERTDISPLAY;
} else {