From 4b538832c951621513210e22de97e4ea93e70a63 Mon Sep 17 00:00:00 2001 From: Ivan Li Date: Sat, 4 Feb 2023 21:47:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B8=A9=E5=BA=A6=E4=BC=A0=E6=84=9F?= =?UTF-8?q?=E5=99=A8=E6=8E=A5=E5=85=A5=E5=B9=B6=E4=BD=BF=E7=94=A8=E5=B1=8F?= =?UTF-8?q?=E5=B9=95=E6=98=BE=E7=A4=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 +- main/CMakeLists.txt | 2 +- main/Kconfig.projbuild | 23 +- main/codetab.h | 614 ++++++++++++++++++++++++++++++++++++++++ main/embedded_display.c | 93 ++++++ main/main.c | 36 +++ main/temperature.c | 73 +++++ main/ui.c | 146 +++++----- 8 files changed, 909 insertions(+), 83 deletions(-) create mode 100644 main/codetab.h create mode 100644 main/embedded_display.c create mode 100644 main/temperature.c diff --git a/.vscode/settings.json b/.vscode/settings.json index 818b670..8a66b05 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -42,6 +42,9 @@ "vector": "c", "freertos.h": "c", "task.h": "c", - "led_strip.h": "c" + "led_strip.h": "c", + "esp_event.h": "c", + "string.h": "c", + "i2c.h": "c" } } diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 52596c7..dcc2372 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,2 +1,2 @@ -idf_component_register(SRCS "ui.c" "mqtt.c" "main.c" "wifi.c" "light.c" "mqtt.c" +idf_component_register(SRCS "temperature.c" "embedded_display.c" "ui.c" "mqtt.c" "main.c" "wifi.c" "light.c" "mqtt.c" INCLUDE_DIRS ".") \ No newline at end of file diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 5d6a51a..6a7d7bc 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -64,7 +64,7 @@ menu "MQTT Configuration" endmenu -menu "GPIO Configuration" +menu "Encoder Configuration" config ENCODER_0_CLK_PIN int "encoder 0 click GPIO" range 1 32 @@ -103,4 +103,25 @@ menu "GPIO Configuration" help Encoder 1 switch pin +endmenu + +menu "I2C Configuration" + config I2C_SCL + int "I2C SCL GPIO" + range 1 32 + default 8 + help + I2C SCL GPIO + config I2C_SDA + int "I2C SDA GPIO" + range 1 32 + default 10 + help + I2C SDA GPIO + config I2C_NUM + int "I2C NUM" + range 0 1 + default 0 + help + I2C NUM endmenu \ No newline at end of file diff --git a/main/codetab.h b/main/codetab.h new file mode 100644 index 0000000..d6e1df9 --- /dev/null +++ b/main/codetab.h @@ -0,0 +1,614 @@ +/************************************************************************************ + * Copyright (c), 2013, HelTec Automatic Technology co.,LTD. + * All rights reserved. + * + * Http: www.heltec.cn + * Email: cn.heltec@gmail.com + * WebShop: shop105719768.taobao.com + * + * File name: codetab.h + * Project : OLED + * Processor: STC89C52 + * Compiler : Keil C51 Compiler + * + * Author : 小林 + * Version: 1.00 + * Date : 2013.8.8 + * Email : hello14blog@gmail.com + * Modification: none + * + * Description: + * 1. 128*64点整OLED模块功能演示程序的字表,仅适用heltec.taobao.com所售产品; + * 2. 字表由打包资料中的“取字软件”计算得出; + * 3. 取字方式 -- 共阴、列行式、逆向输出 + * + * Others: none; + * + * Function List: + * + * 1. void delay(unsigned int z) -- 主函数中用于调整显示效果的延时函数,STC89C52 + *12MHZ z=1时大约延时1ms,其他频率需要自己计算 + * 2. void main(void) -- 主函数 + * + * History: none; + * + *************************************************************************************/ + +// #include "reg52.h" +/***************************16*16的点阵字体取模方式:共阴——列行式——逆向输出*********/ +uint8_t F16x16[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, /*" ",0*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, /*" ",0*/ + + 0x00, 0x02, 0x02, 0xFA, 0xFA, 0xAA, 0xAA, 0xFF, 0xFF, 0xAA, 0xAA, + 0xFA, 0xFA, 0x02, 0x02, 0x00, 0x00, 0x42, 0x72, 0x72, 0x3A, 0x7A, + 0x42, 0x4B, 0x5B, 0x52, 0x62, 0x62, 0x13, 0x77, 0x66, 0x00, /*"惠",1*/ + + 0x20, 0x3C, 0x1C, 0xFF, 0xFF, 0xB0, 0xB4, 0x24, 0x24, 0x3F, 0x3F, + 0xE4, 0xE4, 0x24, 0x24, 0x20, 0x02, 0x02, 0x03, 0xFF, 0xFF, 0x00, + 0x01, 0x05, 0x1D, 0x59, 0xC1, 0xFF, 0x7F, 0x01, 0x01, 0x01, /*"特",2*/ + + 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x48, 0x4C, 0x4F, 0x4B, 0x4A, 0x48, + 0x48, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xFF, 0xFF, 0x00, 0x00, /*"自",3*/ + + 0x20, 0x24, 0x24, 0xE4, 0xE4, 0x24, 0x24, 0x24, 0x30, 0x10, 0xFF, + 0xFF, 0x10, 0xF0, 0xF0, 0x00, 0x08, 0x1C, 0x1F, 0x0B, 0x0C, 0x0D, + 0x4F, 0x6E, 0x34, 0x1C, 0x0F, 0x23, 0x60, 0x7F, 0x3F, 0x00, /*"动",4*/ + + 0x80, 0xC0, 0x60, 0xF8, 0xFF, 0x07, 0x02, 0x00, 0xFF, 0xFF, 0xE0, + 0x70, 0x3C, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x04, + 0x06, 0x03, 0x3F, 0x7F, 0x40, 0x40, 0x40, 0x78, 0x78, 0x00, /*"化",5*/ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, /*" ",6*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, /*" ",6*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, /*" ",7*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, /*" ",7*/ + + 0x10, 0x21, 0x86, 0x70, 0x00, 0x7E, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x01, 0x40, 0x7F, 0x41, + 0x41, 0x7F, 0x41, 0x41, 0x7F, 0x41, 0x41, 0x7F, 0x40, 0x00, /*"温",8*/ + 0x00, 0x00, 0xFC, 0x04, 0x24, 0x24, 0xFC, 0xA5, 0xA6, 0xA4, 0xFC, + 0x24, 0x24, 0x24, 0x04, 0x00, 0x80, 0x60, 0x1F, 0x80, 0x80, 0x42, + 0x46, 0x2A, 0x12, 0x12, 0x2A, 0x26, 0x42, 0xC0, 0x40, 0x00, /*"度",9*/ + 0x08, 0x08, 0x08, 0xFF, 0x88, 0x48, 0x00, 0x98, 0x48, 0x28, 0x0A, + 0x2C, 0x48, 0xD8, 0x08, 0x00, 0x02, 0x42, 0x81, 0x7F, 0x00, 0x00, + 0x40, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x40, 0x00, /*"控",10*/ + 0x00, 0x50, 0x4F, 0x4A, 0x48, 0xFF, 0x48, 0x48, 0x48, 0x00, 0xFC, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x01, 0x01, 0xFF, + 0x21, 0x61, 0x3F, 0x00, 0x0F, 0x40, 0x80, 0x7F, 0x00, 0x00, /*"制",11*/ + 0x00, 0x90, 0x8C, 0xA4, 0xA4, 0xA4, 0xA5, 0xA6, 0xA4, 0xA4, 0xA4, + 0xA4, 0x94, 0x8C, 0x04, 0x00, 0x00, 0x80, 0x40, 0x20, 0x18, 0x07, + 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x70, 0x00, 0x00, /*"完",12*/ + 0x00, 0x04, 0x74, 0xD4, 0xFF, 0xD4, 0x74, 0x04, 0x10, 0x0C, 0xB7, + 0x44, 0xB4, 0x0C, 0x04, 0x00, 0x00, 0x42, 0x43, 0x7A, 0x43, 0x42, + 0x43, 0x7E, 0x4B, 0x4B, 0x4A, 0x4A, 0x42, 0x43, 0x01, 0x00, /*"整",13*/ + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xF9, 0x4A, 0x4C, 0x48, 0x48, + 0xC8, 0x08, 0x08, 0x08, 0x00, 0x40, 0x40, 0x20, 0x10, 0x0C, 0x03, + 0x00, 0x00, 0x20, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x00, /*"方",14*/ + 0x00, 0x20, 0x2C, 0x24, 0x64, 0x74, 0xAD, 0xA6, 0xE4, 0x34, 0x24, + 0x24, 0x2C, 0x24, 0x00, 0x00, 0x00, 0x24, 0x24, 0x25, 0x15, 0x15, + 0x0D, 0xFE, 0x04, 0x0D, 0x17, 0x14, 0x24, 0x64, 0x24, 0x00, /*"案",15*/ + + 0x00, 0x00, 0x00, 0xF8, 0x48, 0x48, 0x4C, 0x4B, 0x4A, 0x48, 0x48, + 0x48, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xFF, 0x00, 0x00, 0x00, /*"自",16*/ + 0x20, 0x24, 0x24, 0xE4, 0x24, 0x24, 0x24, 0x20, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0xF0, 0x00, 0x00, 0x08, 0x1C, 0x0B, 0x08, 0x0C, 0x05, + 0x4E, 0x24, 0x10, 0x0C, 0x03, 0x20, 0x40, 0x3F, 0x00, 0x00, /*"动",17*/ + 0x08, 0x08, 0x08, 0xFF, 0x88, 0x48, 0x00, 0x98, 0x48, 0x28, 0x0A, + 0x2C, 0x48, 0xD8, 0x08, 0x00, 0x02, 0x42, 0x81, 0x7F, 0x00, 0x00, + 0x40, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x40, 0x00, /*"控",18*/ + 0x00, 0x50, 0x4F, 0x4A, 0x48, 0xFF, 0x48, 0x48, 0x48, 0x00, 0xFC, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x01, 0x01, 0xFF, + 0x21, 0x61, 0x3F, 0x00, 0x0F, 0x40, 0x80, 0x7F, 0x00, 0x00, /*"制",19*/ + 0x08, 0x07, 0xFA, 0xAA, 0xAE, 0xAA, 0xAA, 0xA8, 0xAC, 0xAB, 0xAA, + 0xFE, 0x0A, 0x02, 0x02, 0x00, 0x08, 0x08, 0x8B, 0x6A, 0x1E, 0x0A, + 0x0A, 0x0A, 0x0A, 0xFE, 0x0A, 0x0B, 0x08, 0x08, 0x08, 0x00, /*"算",20*/ + 0x10, 0x60, 0x01, 0xC6, 0x30, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x10, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x04, 0x04, 0xFE, 0x01, 0x00, 0x41, + 0x61, 0x51, 0x4D, 0x43, 0x41, 0x41, 0x51, 0xE1, 0x01, 0x00, /*"法",21*/ + 0x40, 0x41, 0xCE, 0x04, 0x00, 0x80, 0x40, 0xBE, 0x82, 0x82, 0x82, + 0xBE, 0xC0, 0x40, 0x40, 0x00, 0x00, 0x00, 0x7F, 0x20, 0x90, 0x80, + 0x40, 0x43, 0x2C, 0x10, 0x10, 0x2C, 0x43, 0xC0, 0x40, 0x00, /*"设",22*/ + 0x20, 0x21, 0x2E, 0xE4, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0xFF, + 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x20, 0x10, + 0x08, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, /*"计",23*/ + + 0x00, 0x00, 0xF8, 0x48, 0x48, 0x48, 0x48, 0xFF, 0x48, 0x48, 0x48, + 0x48, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x04, 0x04, 0x04, + 0x04, 0x3F, 0x44, 0x44, 0x44, 0x44, 0x4F, 0x40, 0x70, 0x00, /*"电",24*/ + 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0xE2, 0x12, 0x0A, 0x06, + 0x02, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x41, + 0x81, 0x7F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, /*"子",25*/ + 0x00, 0x20, 0x20, 0x22, 0x22, 0xE2, 0x22, 0x22, 0x22, 0xE2, 0x22, + 0x22, 0x22, 0x20, 0x20, 0x00, 0x00, 0x40, 0x20, 0x10, 0x0C, 0x03, + 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00, /*"元",26*/ + 0x40, 0x20, 0xF8, 0x0F, 0x82, 0x60, 0x1E, 0x14, 0x10, 0xFF, 0x10, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, /*"件",27*/ + 0x00, 0x00, 0x00, 0x00, 0x7E, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0xCC, 0x08, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x24, 0x46, 0x44, 0x20, 0x1F, 0x00, 0x00, /*"与",28*/ + 0x84, 0x94, 0x94, 0xFF, 0x94, 0x94, 0x80, 0x24, 0x24, 0x24, 0xFC, + 0x12, 0x13, 0x12, 0x00, 0x00, 0x20, 0x18, 0x06, 0xFF, 0x02, 0x1C, + 0x0A, 0x02, 0x02, 0x02, 0x3F, 0x41, 0x41, 0x41, 0x71, 0x00, /*"耗",29*/ + 0x10, 0x10, 0xD0, 0xFE, 0x50, 0x90, 0x00, 0x10, 0x10, 0x10, 0xD0, + 0xFE, 0x10, 0x10, 0x10, 0x00, 0x08, 0x06, 0x01, 0xFF, 0x00, 0x01, + 0x10, 0x08, 0x04, 0x43, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, /*"材",30*/ + 0x90, 0x88, 0xA7, 0xA2, 0xA6, 0xBA, 0xA2, 0xF8, 0xA7, 0xA2, 0xA6, + 0xBA, 0xA2, 0x82, 0x80, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x0C, + 0x34, 0x04, 0x44, 0x84, 0x7F, 0x04, 0x04, 0x04, 0x00, 0x00, /*"等",31*/ +}; + +/************************************6*8的点阵************************************/ +const uint8_t F6x8[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp + 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // ! + 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " + 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // # + 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $ + 0x00, 0x62, 0x64, 0x08, 0x13, 0x23, // % + 0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & + 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' + 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // ( + 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // ) + 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * + 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // , + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // . + 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // / + 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 + 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 + 0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2 + 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 + 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 + 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5 + 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 + 0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7 + 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 + 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 + 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // : + 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ; + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // < + 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // = + 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // > + 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ? + 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @ + 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C + 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D + 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F + 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G + 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H + 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I + 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J + 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K + 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L + 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M + 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N + 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P + 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q + 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R + 0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S + 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T + 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U + 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V + 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W + 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X + 0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y + 0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z + 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [ + 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55, // 55 + 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ] + 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ + 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _ + 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, // ' + 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // a + 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, // b + 0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c + 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d + 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e + 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f + 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g + 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h + 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i + 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j + 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k + 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l + 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m + 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n + 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o + 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p + 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q + 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r + 0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s + 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t + 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u + 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v + 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w + 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x + 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y + 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // horiz lines +}; +/****************************************8*16的点阵************************************/ +const uint8_t F8X16[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0 + 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, 0x00, //! 1 + 0x00, 0x10, 0x0C, 0x06, 0x10, 0x0C, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //" 2 + 0x40, 0xC0, 0x78, 0x40, 0xC0, 0x78, 0x40, 0x00, + 0x04, 0x3F, 0x04, 0x04, 0x3F, 0x04, 0x04, 0x00, // # 3 + 0x00, 0x70, 0x88, 0xFC, 0x08, 0x30, 0x00, 0x00, + 0x00, 0x18, 0x20, 0xFF, 0x21, 0x1E, 0x00, 0x00, //$ 4 + 0xF0, 0x08, 0xF0, 0x00, 0xE0, 0x18, 0x00, 0x00, + 0x00, 0x21, 0x1C, 0x03, 0x1E, 0x21, 0x1E, 0x00, //% 5 + 0x00, 0xF0, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00, + 0x1E, 0x21, 0x23, 0x24, 0x19, 0x27, 0x21, 0x10, //& 6 + 0x10, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //' 7 + 0x00, 0x00, 0x00, 0xE0, 0x18, 0x04, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x00, //( 8 + 0x00, 0x02, 0x04, 0x18, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, //) 9 + 0x40, 0x40, 0x80, 0xF0, 0x80, 0x40, 0x40, 0x00, + 0x02, 0x02, 0x01, 0x0F, 0x01, 0x02, 0x02, 0x00, //* 10 + 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x00, //+ 11 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, //, 12 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //- 13 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, //. 14 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x04, + 0x00, 0x60, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, /// 15 + 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, // 0 16 + 0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // 1 17 + 0x00, 0x70, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, + 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00, // 2 18 + 0x00, 0x30, 0x08, 0x88, 0x88, 0x48, 0x30, 0x00, + 0x00, 0x18, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, // 3 19 + 0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00, + 0x00, 0x07, 0x04, 0x24, 0x24, 0x3F, 0x24, 0x00, // 4 20 + 0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00, + 0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00, // 5 21 + 0x00, 0xE0, 0x10, 0x88, 0x88, 0x18, 0x00, 0x00, + 0x00, 0x0F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, // 6 22 + 0x00, 0x38, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, // 7 23 + 0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00, + 0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00, // 8 24 + 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x00, 0x00, 0x31, 0x22, 0x22, 0x11, 0x0F, 0x00, // 9 25 + 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, //: 26 + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, //; 27 + 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, + 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, //< 28 + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, //= 29 + 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, //> 30 + 0x00, 0x70, 0x48, 0x08, 0x08, 0x08, 0xF0, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x36, 0x01, 0x00, 0x00, //? 31 + 0xC0, 0x30, 0xC8, 0x28, 0xE8, 0x10, 0xE0, 0x00, + 0x07, 0x18, 0x27, 0x24, 0x23, 0x14, 0x0B, 0x00, //@ 32 + 0x00, 0x00, 0xC0, 0x38, 0xE0, 0x00, 0x00, 0x00, + 0x20, 0x3C, 0x23, 0x02, 0x02, 0x27, 0x38, 0x20, // A 33 + 0x08, 0xF8, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, // B 34 + 0xC0, 0x30, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, + 0x07, 0x18, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, // C 35 + 0x08, 0xF8, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, // D 36 + 0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x23, 0x20, 0x18, 0x00, // E 37 + 0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, + 0x20, 0x3F, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, // F 38 + 0xC0, 0x30, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, + 0x07, 0x18, 0x20, 0x20, 0x22, 0x1E, 0x02, 0x00, // G 39 + 0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, + 0x20, 0x3F, 0x21, 0x01, 0x01, 0x21, 0x3F, 0x20, // H 40 + 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // I 41 + 0x00, 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, + 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, 0x00, // J 42 + 0x08, 0xF8, 0x88, 0xC0, 0x28, 0x18, 0x08, 0x00, + 0x20, 0x3F, 0x20, 0x01, 0x26, 0x38, 0x20, 0x00, // K 43 + 0x08, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x00, // L 44 + 0x08, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x08, 0x00, + 0x20, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x20, 0x00, // M 45 + 0x08, 0xF8, 0x30, 0xC0, 0x00, 0x08, 0xF8, 0x08, + 0x20, 0x3F, 0x20, 0x00, 0x07, 0x18, 0x3F, 0x00, // N 46 + 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x0F, 0x10, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, // O 47 + 0x08, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00, + 0x20, 0x3F, 0x21, 0x01, 0x01, 0x01, 0x00, 0x00, // P 48 + 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x0F, 0x18, 0x24, 0x24, 0x38, 0x50, 0x4F, 0x00, // Q 49 + 0x08, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, + 0x20, 0x3F, 0x20, 0x00, 0x03, 0x0C, 0x30, 0x20, // R 50 + 0x00, 0x70, 0x88, 0x08, 0x08, 0x08, 0x38, 0x00, + 0x00, 0x38, 0x20, 0x21, 0x21, 0x22, 0x1C, 0x00, // S 51 + 0x18, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x18, 0x00, + 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, // T 52 + 0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, + 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, // U 53 + 0x08, 0x78, 0x88, 0x00, 0x00, 0xC8, 0x38, 0x08, + 0x00, 0x00, 0x07, 0x38, 0x0E, 0x01, 0x00, 0x00, // V 54 + 0xF8, 0x08, 0x00, 0xF8, 0x00, 0x08, 0xF8, 0x00, + 0x03, 0x3C, 0x07, 0x00, 0x07, 0x3C, 0x03, 0x00, // W 55 + 0x08, 0x18, 0x68, 0x80, 0x80, 0x68, 0x18, 0x08, + 0x20, 0x30, 0x2C, 0x03, 0x03, 0x2C, 0x30, 0x20, // X 56 + 0x08, 0x38, 0xC8, 0x00, 0xC8, 0x38, 0x08, 0x00, + 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, // Y 57 + 0x10, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, + 0x20, 0x38, 0x26, 0x21, 0x20, 0x20, 0x18, 0x00, // Z 58 + 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, //[ 59 + 0x00, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0xC0, 0x00, //\ 60 + 0x00, 0x02, 0x02, 0x02, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x40, 0x40, 0x7F, 0x00, 0x00, 0x00, //] 61 + 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //^ 62 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //_ 63 + 0x00, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //` 64 + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x19, 0x24, 0x22, 0x22, 0x22, 0x3F, 0x20, // a 65 + 0x08, 0xF8, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x3F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, // b 66 + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x0E, 0x11, 0x20, 0x20, 0x20, 0x11, 0x00, // c 67 + 0x00, 0x00, 0x00, 0x80, 0x80, 0x88, 0xF8, 0x00, + 0x00, 0x0E, 0x11, 0x20, 0x20, 0x10, 0x3F, 0x20, // d 68 + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x1F, 0x22, 0x22, 0x22, 0x22, 0x13, 0x00, // e 69 + 0x00, 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x18, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // f 70 + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x6B, 0x94, 0x94, 0x94, 0x93, 0x60, 0x00, // g 71 + 0x08, 0xF8, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, // h 72 + 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // i 73 + 0x00, 0x00, 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, + 0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, // j 74 + 0x08, 0xF8, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, + 0x20, 0x3F, 0x24, 0x02, 0x2D, 0x30, 0x20, 0x00, // k 75 + 0x00, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // l 76 + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x20, 0x3F, 0x20, 0x00, 0x3F, 0x20, 0x00, 0x3F, // m 77 + 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, // n 78 + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, // o 79 + 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xA1, 0x20, 0x20, 0x11, 0x0E, 0x00, // p 80 + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x0E, 0x11, 0x20, 0x20, 0xA0, 0xFF, 0x80, // q 81 + 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, + 0x20, 0x20, 0x3F, 0x21, 0x20, 0x00, 0x01, 0x00, // r 82 + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x33, 0x24, 0x24, 0x24, 0x24, 0x19, 0x00, // s 83 + 0x00, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x00, 0x00, // t 84 + 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x00, 0x1F, 0x20, 0x20, 0x20, 0x10, 0x3F, 0x20, // u 85 + 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, + 0x00, 0x01, 0x0E, 0x30, 0x08, 0x06, 0x01, 0x00, // v 86 + 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, + 0x0F, 0x30, 0x0C, 0x03, 0x0C, 0x30, 0x0F, 0x00, // w 87 + 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x20, 0x31, 0x2E, 0x0E, 0x31, 0x20, 0x00, // x 88 + 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, + 0x80, 0x81, 0x8E, 0x70, 0x18, 0x06, 0x01, 0x00, // y 89 + 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x21, 0x30, 0x2C, 0x22, 0x21, 0x30, 0x00, // z 90 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x7C, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, //{ 91 + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, //| 92 + 0x00, 0x02, 0x02, 0x7C, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x00, //} 93 + 0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~ 94 +}; + +uint8_t BMP1[] = { + 0x00, 0x03, 0x05, 0x09, 0x11, 0xFF, 0x11, 0x89, 0x05, 0xC3, 0x00, 0xE0, + 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, + 0x28, 0xFF, 0x11, 0xAA, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x38, 0x44, 0x82, 0x92, + 0x92, 0x74, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, + 0x44, 0xC7, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, + 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x6D, 0x6D, 0x6D, 0x6D, + 0x6D, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDB, 0xDB, + 0xDB, 0xDB, 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDB, + 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, + 0x00, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0x00, 0x00, 0xD8, 0xD8, 0xD8, 0xD8, + 0xD8, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, + 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, + 0xE6, 0x66, 0x20, 0x00, 0x06, 0x06, 0x86, 0x06, 0x06, 0x00, 0x00, 0x06, + 0x06, 0x06, 0x06, 0x86, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, + 0x00, 0x86, 0x86, 0x86, 0x86, 0x86, 0x80, 0x80, 0x86, 0x86, 0x06, 0x86, + 0x86, 0xC0, 0xC0, 0x86, 0x86, 0x86, 0x06, 0x06, 0xD0, 0x30, 0x76, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x1C, + 0x00, 0xFE, 0x00, 0x01, 0x02, 0x00, 0xC4, 0x18, 0x20, 0x02, 0x9E, 0x63, + 0xB2, 0x0E, 0x00, 0xFF, 0x81, 0x81, 0xFF, 0x00, 0x00, 0x80, 0x40, 0x30, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x23, 0xEA, 0xAA, 0xBF, 0xAA, + 0xEA, 0x03, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0C, 0x08, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x81, + 0x80, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, + 0x09, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x1E, 0x21, 0x40, + 0x40, 0x50, 0x21, 0x5E, 0x00, 0x1E, 0x21, 0x40, 0x40, 0x50, 0x21, 0x5E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC1, 0xC1, 0xFF, + 0xFF, 0xC1, 0xC1, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0xFC, 0xF3, 0xEF, 0xF3, 0xFC, + 0x80, 0xFF, 0x80, 0xEE, 0xEE, 0xEE, 0xF5, 0xFB, 0xFF, 0x9C, 0xBE, 0xB6, + 0xB6, 0x88, 0xFF, 0x00, +}; + +uint8_t BMP2[] = { + 0x00, 0x03, 0x05, 0x09, 0x11, 0xFF, 0x11, 0x89, 0x05, 0xC3, 0x00, 0xE0, + 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, + 0x28, 0xFF, 0x11, 0xAA, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x38, 0x44, 0x82, 0x92, + 0x92, 0x74, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, + 0x44, 0xFF, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, + 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0xF8, 0x18, 0x60, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x20, 0x20, + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x10, 0x08, 0x08, 0x08, + 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x20, 0xF8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x88, 0x68, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0x06, 0x18, 0x06, 0x01, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x20, 0x40, 0x40, 0x40, 0x40, 0x20, 0x1F, 0x00, + 0x00, 0x00, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x18, 0x06, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x20, + 0x20, 0xC0, 0x00, 0x00, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0x00, 0x00, 0x00, + 0x40, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x20, 0x20, 0xE0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x20, 0x20, 0x20, 0xC0, 0x00, 0x00, 0x40, 0x20, 0x20, + 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0A, 0x0A, 0x09, 0x0C, 0x00, 0x00, + 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x08, 0x00, + 0x00, 0x00, 0x0C, 0x08, 0x09, 0x09, 0x0E, 0x00, 0x00, 0x0C, 0x00, 0x00, + 0x0F, 0x09, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x0A, + 0x0A, 0x09, 0x0C, 0x00, 0x00, 0x0C, 0x0A, 0x0A, 0x09, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, 0x0C, + 0x30, 0x0C, 0x03, 0x7F, 0x00, 0x00, 0x38, 0x54, 0x54, 0x58, 0x00, 0x00, + 0x7C, 0x04, 0x04, 0x78, 0x00, 0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xAA, 0xAA, 0xAA, + 0x28, 0x08, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, 0x0C, 0x30, 0x0C, 0x03, 0x7F, + 0x00, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x00, 0x7F, 0x02, 0x04, + 0x08, 0x10, 0x7F, 0x00}; \ No newline at end of file diff --git a/main/embedded_display.c b/main/embedded_display.c new file mode 100644 index 0000000..5fd0c89 --- /dev/null +++ b/main/embedded_display.c @@ -0,0 +1,93 @@ +#pragma once +#include +#include + +#include "codetab.h" +#include "driver/i2c.h" +#include "esp_log.h" + +#define Brightness 0xCF +#define X_WIDTH 128 +#define Y_WIDTH 64 + +#define I2C_ADDRESS 0x78 +#define I2C_MASTER_NUM CONFIG_I2C_NUM + +void i2cWriteByte(uint8_t reg, uint8_t data) { + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, I2C_ADDRESS | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, reg, true); + i2c_master_write_byte(cmd, data, true); + i2c_master_stop(cmd); + i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); +} + +void i2cWriteCommand(uint8_t data) { i2cWriteByte(0x00, data); } + +void i2cWriteData(uint8_t data) { i2cWriteByte(0x40, data); } + +void display_fill(uint8_t bmpData) { + for (int y = 0; y < 8; y++) { + i2cWriteCommand(0xB0 + y); + i2cWriteCommand(0x01); + i2cWriteCommand(0x10); + for (int x = 0; x < X_WIDTH; x++) { + i2cWriteData(bmpData); + } + } +} + +void display_set_pos(uint8_t x, uint8_t y) { + i2cWriteCommand(0xB0 + y); + i2cWriteCommand(((x & 0xF0) >> 4) | 0x10); + i2cWriteCommand((x & 0x0F) | 0x01); +} + +void display_print8_str(uint8_t x, uint8_t y, char str[]) { + uint8_t c; + for (uint8_t ch, ci = 0; ch = str[ci], ch != '\0'; ci++, x += 8) { + c = ch - 0x20; + display_set_pos(x, y); + for (uint8_t cx = 0; cx < 8; cx++) { + i2cWriteData(F8X16[c * 16 + cx]); + } + display_set_pos(x, y + 1); + for (uint8_t cx = 0; cx < 8; cx++) { + i2cWriteData(F8X16[c * 16 + cx + 8]); + }; + } +} + +void init_display() { + i2cWriteCommand(0xAE); // display off + i2cWriteCommand(0x00); // set lower column address + i2cWriteCommand(0x10); // set higher column address + i2cWriteCommand(0x40); // set start line address + i2cWriteCommand(0x81); // set contrast control register + i2cWriteCommand(0xCF); // set contrast + i2cWriteCommand(0xA1); // set segment re-map + i2cWriteCommand(0xC8); // set COM output scan direction + i2cWriteCommand(0xA6); // set normal display + i2cWriteCommand(0xA8); // set multiplex ratio(1 to 64) + i2cWriteCommand(0x3F); // 1/64 duty + i2cWriteCommand(0xD3); // set display offset + i2cWriteCommand(0x00); // not offset + i2cWriteCommand(0xD5); // set display clock divide ratio/oscillator frequency + i2cWriteCommand(0x80); // set divide ratio + i2cWriteCommand(0xD9); // set pre-charge period + i2cWriteCommand(0xF1); // set pre-charge voltage + i2cWriteCommand(0xDA); // set com pins hardware configuration + i2cWriteCommand(0x12); + i2cWriteCommand(0xDB); // set vcomh + i2cWriteCommand(0x40); // 0.77*vcc + i2cWriteCommand(0x20); // set memory addressing mode + i2cWriteCommand(0x02); // set page addressing mode + i2cWriteCommand(0x8D); // set charge pump enable/disable + i2cWriteCommand(0x14); // set(0x10) disable + i2cWriteCommand(0xAF); // display on + + display_fill(0x00); + display_set_pos(0, 0); +} \ No newline at end of file diff --git a/main/main.c b/main/main.c index e5f36d1..6223157 100644 --- a/main/main.c +++ b/main/main.c @@ -1,3 +1,4 @@ +#include "driver/i2c.h" #include "esp_log.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -6,10 +7,45 @@ #include "sdkconfig.h" #include "wifi.c" +#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */ +#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */ +#define I2C_MASTER_SDA_IO CONFIG_I2C_SDA +#define I2C_MASTER_SCL_IO CONFIG_I2C_SCL + +#define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */ +#define I2C_MASTER_NUM CONFIG_I2C_NUM + +#include "embedded_display.c" +#include "temperature.c" + +void init_i2c() { + int i2c_master_port = I2C_MASTER_NUM; + + i2c_config_t conf = { + .mode = I2C_MODE_MASTER, + .sda_io_num = I2C_MASTER_SDA_IO, + .scl_io_num = I2C_MASTER_SCL_IO, + .sda_pullup_en = GPIO_PULLUP_ENABLE, + .scl_pullup_en = GPIO_PULLUP_ENABLE, + .master.clk_speed = I2C_MASTER_FREQ_HZ, + }; + i2c_param_config(i2c_master_port, &conf); + ESP_LOGI("I2C", "Enabling I2C"); + ESP_ERROR_CHECK(i2c_driver_install(i2c_master_port, conf.mode, + I2C_MASTER_RX_BUF_DISABLE, + I2C_MASTER_TX_BUF_DISABLE, 0)); + + ESP_LOGI("SCR", "I2C initialized successfully"); +} + static const char *TAG = "DisplayAmbientLight"; void app_main(void) { light_init_strip(); + init_i2c(); + init_display(); + auto_fetch_temperature(); + display_print8_str(0, 0, "Ambient Light"); init_ui(); xTaskCreate(publish_ui_input, "ui_input_event", 2048, NULL, 10, NULL); vTaskDelay(pdMS_TO_TICKS(10)); diff --git a/main/temperature.c b/main/temperature.c new file mode 100644 index 0000000..9fe3fad --- /dev/null +++ b/main/temperature.c @@ -0,0 +1,73 @@ +#include +#include + +#include "driver/i2c.h" +#include "embedded_display.c" +#include "esp_log.h" + +#define ACK_CHECK_EN 0x1 /*!< I2C master will check ack from slave*/ +#define ACK_CHECK_DIS 0x0 /*!< I2C master will not check ack from slave */ +#define ACK_VAL 0x0 /*!< I2C ack value */ +#define NACK_VAL 0x1 /*!< I2C nack value */ + +#define I2C_MASTER_NUM CONFIG_I2C_NUM + +#define GX21M15_ADDRESS 0x90 +#define GX21M15_TEMP_POINTER_VALUE 0b00 // 温度寄存器 +#define GX21M15_CONF_POINTER_VALUE 0b01 // 配置寄存器 +#define GX21M15_THYST_POINTER_VALUE 0b10 // 回滞寄存器 +#define GX21M15_TOS_POINTER_VALUE 0b11 // 过温关断寄存器 + +#define DEFAULT_TEMPERATURE -999 // 过温关断寄存器 + +#define TEMPERATURE_TAG "temperature" +void fetch_temperature(void* arg) { + esp_err_t error; + float temperature = DEFAULT_TEMPERATURE; + char temperature_str[10]; + uint8_t temperature_buffer[] = {0, 0}; + for (;;) { + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, GX21M15_ADDRESS | I2C_MASTER_WRITE, + ACK_CHECK_EN); + i2c_master_write_byte(cmd, 0, ACK_CHECK_EN); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, GX21M15_ADDRESS | I2C_MASTER_READ, ACK_VAL); + i2c_master_read_byte(cmd, &(temperature_buffer[0]), ACK_VAL); + i2c_master_read_byte(cmd, &(temperature_buffer[1]), NACK_VAL); + i2c_master_stop(cmd); + error = + i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + if (error != ESP_OK) { + ESP_LOGW(TEMPERATURE_TAG, "read failed. %x", error); + } else { + if (temperature_buffer[0] == 0xff) { + if (temperature == DEFAULT_TEMPERATURE) { + sprintf(temperature_str, "Temp: Loading"); + } else { + sprintf(temperature_str, "Temp: %.3f.", temperature); + } + } else { + if (temperature_buffer[0] >> 7) { + temperature = -(((((~temperature_buffer[0]) & 0x7f) << 3) | + ((~temperature_buffer[1] >> 5) & 0x07)) + + 1) * + 0.125; + } else { + temperature = + (temperature_buffer[0] << 3 | temperature_buffer[1] >> 5) * 0.125; + } + sprintf(temperature_str, "Temp: %.3f ", temperature); + } + + display_print8_str(8, 2, temperature_str); + } + vTaskDelay(pdMS_TO_TICKS(1000)); + } +} + +void auto_fetch_temperature() { + xTaskCreate(fetch_temperature, "ui_input_event", 2048, NULL, 10, NULL); +} diff --git a/main/ui.c b/main/ui.c index 0da6a6a..7c1ebfd 100644 --- a/main/ui.c +++ b/main/ui.c @@ -33,93 +33,83 @@ typedef struct s_ui_input { uint16_t value; } s_ui_input_t; -static xQueueHandle encoder_event_queue = NULL; static xQueueHandle ui_input_event = NULL; -static void IRAM_ATTR gpio_isr_handler(void* arg) { - uint8_t input_key = (uint8_t)arg; - xQueueSendFromISR(encoder_event_queue, &input_key, NULL); -} - static int8_t rising_edge_rotation_direction = NOT_ROTATING; static int8_t falling_edge_rotation_direction = NOT_ROTATING; -static int8_t display_0_brightness = 20; -static int8_t display_1_brightness = 20; +static uint8_t display_0_brightness = 20; +static uint8_t display_1_brightness = 20; static s_ui_input_t current_ui_input = {}; -static void encoder_value_change(void* arg) { - uint8_t input_key; - uint8_t clk_pin = ENCODER_0_CLK_PIN; - uint8_t dt_pin = ENCODER_0_DT_PIN; - uint8_t* value = &display_0_brightness; - for (;;) { - if (xQueueReceive(encoder_event_queue, &input_key, portMAX_DELAY)) { - switch (input_key) { - case UI_INPUT_DISPLAY_0_BRIGHTNESS: - clk_pin = ENCODER_0_CLK_PIN; - dt_pin = ENCODER_0_DT_PIN; - value = &display_0_brightness; - break; - case UI_INPUT_DISPLAY_1_BRIGHTNESS: - clk_pin = ENCODER_1_CLK_PIN; - dt_pin = ENCODER_1_DT_PIN; - value = &display_1_brightness; - break; - default: - break; - } - if (gpio_get_level(clk_pin)) { - rising_edge_rotation_direction = gpio_get_level(dt_pin) == 0; - // printf("R %d\t", rising_edge_rotation_direction); - if (falling_edge_rotation_direction == rising_edge_rotation_direction) { - if (rising_edge_rotation_direction) { - gpio_set_level(GPIO_OUTPUT_IO_0, 1); - gpio_set_level(GPIO_OUTPUT_IO_1, 0); - *value += 1; - printf("CW\tvalue: %d\n", *value); - } else { - gpio_set_level(GPIO_OUTPUT_IO_0, 0); - gpio_set_level(GPIO_OUTPUT_IO_1, 1); - *value -= 1; - printf("CCW\tvalue: %d\n", *value); - } - falling_edge_rotation_direction = NOT_ROTATING; +uint8_t input_key; +uint8_t clk_pin = ENCODER_0_CLK_PIN; +uint8_t dt_level; +uint8_t dt_pin = ENCODER_0_DT_PIN; +uint8_t* value = &display_0_brightness; - current_ui_input.key = input_key; - current_ui_input.value = *value; - xQueueSend(ui_input_event, ¤t_ui_input, NULL); - } else { - if (falling_edge_rotation_direction != NOT_ROTATING) { - rising_edge_rotation_direction = NOT_ROTATING; - } - } +static void IRAM_ATTR gpio_isr_handler(void* arg) { + uint8_t input_key = (uint8_t)arg; + + switch (input_key) { + case UI_INPUT_DISPLAY_0_BRIGHTNESS: + clk_pin = ENCODER_0_CLK_PIN; + dt_pin = ENCODER_0_DT_PIN; + value = &display_0_brightness; + break; + case UI_INPUT_DISPLAY_1_BRIGHTNESS: + clk_pin = ENCODER_1_CLK_PIN; + dt_pin = ENCODER_1_DT_PIN; + value = &display_1_brightness; + break; + default: + break; + } + dt_level = gpio_get_level(dt_pin); + if (gpio_get_level(clk_pin)) { + rising_edge_rotation_direction = dt_level == 0; + if (falling_edge_rotation_direction == rising_edge_rotation_direction) { + if (rising_edge_rotation_direction) { + gpio_set_level(GPIO_OUTPUT_IO_0, 1); + gpio_set_level(GPIO_OUTPUT_IO_1, 0); + *value += 1; } else { - falling_edge_rotation_direction = gpio_get_level(dt_pin); - // printf("F %d\t", falling_edge_rotation_direction); - if (rising_edge_rotation_direction == falling_edge_rotation_direction) { - if (falling_edge_rotation_direction) { - gpio_set_level(GPIO_OUTPUT_IO_0, 1); - gpio_set_level(GPIO_OUTPUT_IO_1, 0); - *value += 1; - printf("CW\tvalue: %d\n", *value); - } else { - gpio_set_level(GPIO_OUTPUT_IO_0, 0); - gpio_set_level(GPIO_OUTPUT_IO_1, 1); - *value -= 1; - printf("CCW\tvalue: %d\n", *value); - } - rising_edge_rotation_direction = NOT_ROTATING; + gpio_set_level(GPIO_OUTPUT_IO_0, 0); + gpio_set_level(GPIO_OUTPUT_IO_1, 1); + *value -= 1; + } + falling_edge_rotation_direction = NOT_ROTATING; - current_ui_input.key = input_key; - current_ui_input.value = *value; - xQueueSend(ui_input_event, ¤t_ui_input, NULL); + current_ui_input.key = input_key; + current_ui_input.value = *value; + xQueueSendFromISR(ui_input_event, ¤t_ui_input, NULL); + } else { + if (falling_edge_rotation_direction != NOT_ROTATING) { + rising_edge_rotation_direction = NOT_ROTATING; + } + } + } else { + falling_edge_rotation_direction = dt_level; + // printf("F %d\t", falling_edge_rotation_direction); + if (rising_edge_rotation_direction == falling_edge_rotation_direction) { + if (falling_edge_rotation_direction) { + gpio_set_level(GPIO_OUTPUT_IO_0, 1); + gpio_set_level(GPIO_OUTPUT_IO_1, 0); + *value += 1; + } else { + gpio_set_level(GPIO_OUTPUT_IO_0, 0); + gpio_set_level(GPIO_OUTPUT_IO_1, 1); + *value -= 1; + } + rising_edge_rotation_direction = NOT_ROTATING; - } else { - if (rising_edge_rotation_direction != NOT_ROTATING) { - falling_edge_rotation_direction = NOT_ROTATING; - } - } + current_ui_input.key = input_key; + current_ui_input.value = *value; + xQueueSendFromISR(ui_input_event, ¤t_ui_input, NULL); + + } else { + if (rising_edge_rotation_direction != NOT_ROTATING) { + falling_edge_rotation_direction = NOT_ROTATING; } } } @@ -152,11 +142,7 @@ void init_ui(void) { io_conf.pin_bit_mask = ENCODER_0_DT_PIN_MASK | ENCODER_1_DT_PIN_MASK; gpio_config(&io_conf); - // create a queue to handle gpio event from isr - encoder_event_queue = xQueueCreate(10, sizeof(uint8_t)); // start encoder task - xTaskCreate(encoder_value_change, "encoder_value_change", 2048, NULL, 10, - NULL); ui_input_event = xQueueCreate(10, sizeof(s_ui_input_t)); // install gpio isr service