#include "Lcd.h" #include #include #include #include "DevUtil.h" using namespace std; #define IOEXPORTPATH "/sys/class/gpio/export" #define DELAY_US(t) this_thread::sleep_for(chrono::microseconds((t))) #define DELAY_MS(t) this_thread::sleep_for(chrono::milliseconds((t))) static unsigned char ascii_table_8x16[95][16] = { /*-- 文字: --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: ! --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, 0x00, /*-- 文字: " --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x10, 0x0C, 0x06, 0x10, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: # --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x40, 0xC0, 0x78, 0x40, 0xC0, 0x78, 0x40, 0x00, 0x04, 0x3F, 0x04, 0x04, 0x3F, 0x04, 0x04, 0x00, /*-- 文字: $ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x70, 0x88, 0xFC, 0x08, 0x30, 0x00, 0x00, 0x00, 0x18, 0x20, 0xFF, 0x21, 0x1E, 0x00, 0x00, /*-- 文字: % --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xF0, 0x08, 0xF0, 0x00, 0xE0, 0x18, 0x00, 0x00, 0x00, 0x21, 0x1C, 0x03, 0x1E, 0x21, 0x1E, 0x00, /*-- 文字: & --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0xF0, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00, 0x1E, 0x21, 0x23, 0x24, 0x19, 0x27, 0x21, 0x10, /*-- 文字: ' --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x10, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: ( --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0xE0, 0x18, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x00, /*-- 文字: ) --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x02, 0x04, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, /*-- 文字: * --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x40, 0x40, 0x80, 0xF0, 0x80, 0x40, 0x40, 0x00, 0x02, 0x02, 0x01, 0x0F, 0x01, 0x02, 0x02, 0x00, /*-- 文字: + --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x00, /*-- 文字: , --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: - --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, /*-- 文字: . --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: / --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x04, 0x00, 0x60, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, /*-- 文字: 0 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, /*-- 文字: 1 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, /*-- 文字: 2 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x70, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00, /*-- 文字: 3 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x30, 0x08, 0x88, 0x88, 0x48, 0x30, 0x00, 0x00, 0x18, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, /*-- 文字: 4 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x07, 0x04, 0x24, 0x24, 0x3F, 0x24, 0x00, /*-- 文字: 5 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00, /*-- 文字: 6 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0xE0, 0x10, 0x88, 0x88, 0x18, 0x00, 0x00, 0x00, 0x0F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, /*-- 文字: 7 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x38, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, /*-- 文字: 8 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00, /*-- 文字: 9 --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x31, 0x22, 0x22, 0x11, 0x0F, 0x00, /*-- 文字: : --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, /*-- 文字: ; --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, /*-- 文字: < --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, /*-- 文字: = --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, /*-- 文字: > --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, /*-- 文字: ? --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x70, 0x48, 0x08, 0x08, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x36, 0x01, 0x00, 0x00, /*-- 文字: @ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xC0, 0x30, 0xC8, 0x28, 0xE8, 0x10, 0xE0, 0x00, 0x07, 0x18, 0x27, 0x24, 0x23, 0x14, 0x0B, 0x00, /*-- 文字: A --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0xC0, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x3C, 0x23, 0x02, 0x02, 0x27, 0x38, 0x20, /*-- 文字: B --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, /*-- 文字: C --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xC0, 0x30, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x07, 0x18, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, /*-- 文字: D --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, /*-- 文字: E --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x23, 0x20, 0x18, 0x00, /*-- 文字: F --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, /*-- 文字: G --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xC0, 0x30, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x07, 0x18, 0x20, 0x20, 0x22, 0x1E, 0x02, 0x00, /*-- 文字: H --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, 0x20, 0x3F, 0x21, 0x01, 0x01, 0x21, 0x3F, 0x20, /*-- 文字: I --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, /*-- 文字: J --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, 0x00, /*-- 文字: K --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x88, 0xC0, 0x28, 0x18, 0x08, 0x00, 0x20, 0x3F, 0x20, 0x01, 0x26, 0x38, 0x20, 0x00, /*-- 文字: L --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x00, /*-- 文字: M --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x08, 0x00, 0x20, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x20, 0x00, /*-- 文字: N --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x30, 0xC0, 0x00, 0x08, 0xF8, 0x08, 0x20, 0x3F, 0x20, 0x00, 0x07, 0x18, 0x3F, 0x00, /*-- 文字: O --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, /*-- 文字: P --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00, 0x20, 0x3F, 0x21, 0x01, 0x01, 0x01, 0x00, 0x00, /*-- 文字: Q --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x0F, 0x18, 0x24, 0x24, 0x38, 0x50, 0x4F, 0x00, /*-- 文字: R --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x03, 0x0C, 0x30, 0x20, /*-- 文字: S --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x70, 0x88, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x38, 0x20, 0x21, 0x21, 0x22, 0x1C, 0x00, /*-- 文字: T --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x18, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, /*-- 文字: U --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, /*-- 文字: V --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0x78, 0x88, 0x00, 0x00, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x07, 0x38, 0x0E, 0x01, 0x00, 0x00, /*-- 文字: W --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0xF8, 0x08, 0x00, 0xF8, 0x00, 0x08, 0xF8, 0x00, 0x03, 0x3C, 0x07, 0x00, 0x07, 0x3C, 0x03, 0x00, /*-- 文字: X --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0x18, 0x68, 0x80, 0x80, 0x68, 0x18, 0x08, 0x20, 0x30, 0x2C, 0x03, 0x03, 0x2C, 0x30, 0x20, /*-- 文字: Y --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0x38, 0xC8, 0x00, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, /*-- 文字: Z --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x10, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, 0x20, 0x38, 0x26, 0x21, 0x20, 0x20, 0x18, 0x00, /*-- 文字: [ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, /*-- 文字: \ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0xC0, 0x00, /*-- 文字: ] --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x02, 0x02, 0x02, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x7F, 0x00, 0x00, 0x00, /*-- 文字: ^ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: _ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*-- 文字: ` --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*-- 文字: a --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x19, 0x24, 0x22, 0x22, 0x22, 0x3F, 0x20, /*-- 文字: b --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, /*-- 文字: c --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x11, 0x20, 0x20, 0x20, 0x11, 0x00, /*-- 文字: d --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x80, 0x80, 0x88, 0xF8, 0x00, 0x00, 0x0E, 0x11, 0x20, 0x20, 0x10, 0x3F, 0x20, /*-- 文字: e --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x22, 0x22, 0x22, 0x22, 0x13, 0x00, /*-- 文字: f --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x18, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, /*-- 文字: g --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x6B, 0x94, 0x94, 0x94, 0x93, 0x60, 0x00, /*-- 文字: h --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, /*-- 文字: i --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, /*-- 文字: j --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, /*-- 文字: k --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x08, 0xF8, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x20, 0x3F, 0x24, 0x02, 0x2D, 0x30, 0x20, 0x00, /*-- 文字: l --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, /*-- 文字: m --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x3F, 0x20, 0x00, 0x3F, /*-- 文字: n --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, /*-- 文字: o --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, /*-- 文字: p --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xA1, 0x20, 0x20, 0x11, 0x0E, 0x00, /*-- 文字: q --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x0E, 0x11, 0x20, 0x20, 0xA0, 0xFF, 0x80, /*-- 文字: r --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x20, 0x20, 0x3F, 0x21, 0x20, 0x00, 0x01, 0x00, /*-- 文字: s --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x33, 0x24, 0x24, 0x24, 0x24, 0x19, 0x00, /*-- 文字: t --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x00, 0x00, /*-- 文字: u --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x10, 0x3F, 0x20, /*-- 文字: v --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x01, 0x0E, 0x30, 0x08, 0x06, 0x01, 0x00, /*-- 文字: w --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x0F, 0x30, 0x0C, 0x03, 0x0C, 0x30, 0x0F, 0x00, /*-- 文字: x --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x31, 0x2E, 0x0E, 0x31, 0x20, 0x00, /*-- 文字: y --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x81, 0x8E, 0x70, 0x18, 0x06, 0x01, 0x00, /*-- 文字: z --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x21, 0x30, 0x2C, 0x22, 0x21, 0x30, 0x00, /*-- 文字: { --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x80, 0x7C, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, /*-- 文字: | --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, /*-- 文字: } --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x02, 0x02, 0x7C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x00, /*-- 文字: ~ --*/ /*-- Comic Sans MS12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static unsigned char ascii_table_5x8[95][5] = { /*全体ASCII 列表:5x8点阵*/ 0x00, 0x00, 0x00, 0x00, 0x00, //space 0x00, 0x00, 0x4f, 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, 0x07, 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, //\ 0x00,0x41,0x41,0x7f,0x00,//] 0x04, 0x02, 0x01, 0x02, 0x04, //^ 0x40, 0x40, 0x40, 0x40, 0x40, //_ 0x01, 0x02, 0x04, 0x00, 0x00, //` 0x20, 0x54, 0x54, 0x54, 0x78, //a 0x7f, 0x48, 0x48, 0x48, 0x30, //b 0x38, 0x44, 0x44, 0x44, 0x44, //c 0x30, 0x48, 0x48, 0x48, 0x7f, //d 0x38, 0x54, 0x54, 0x54, 0x58, //e 0x00, 0x08, 0x7e, 0x09, 0x02, //f 0x48, 0x54, 0x54, 0x54, 0x3c, //g 0x7f, 0x08, 0x08, 0x08, 0x70, //h 0x00, 0x00, 0x7a, 0x00, 0x00, //i 0x20, 0x40, 0x40, 0x3d, 0x00, //j 0x7f, 0x20, 0x28, 0x44, 0x00, //k 0x00, 0x41, 0x7f, 0x40, 0x00, //l 0x7c, 0x04, 0x38, 0x04, 0x7c, //m 0x7c, 0x08, 0x04, 0x04, 0x78, //n 0x38, 0x44, 0x44, 0x44, 0x38, //o 0x7c, 0x14, 0x14, 0x14, 0x08, //p 0x08, 0x14, 0x14, 0x14, 0x7c, //q 0x7c, 0x08, 0x04, 0x04, 0x08, //r 0x48, 0x54, 0x54, 0x54, 0x24, //s 0x04, 0x04, 0x3f, 0x44, 0x24, //t 0x3c, 0x40, 0x40, 0x40, 0x3c, //u 0x1c, 0x20, 0x40, 0x20, 0x1c, //v 0x3c, 0x40, 0x30, 0x40, 0x3c, //w 0x44, 0x28, 0x10, 0x28, 0x44, //x 0x04, 0x48, 0x30, 0x08, 0x04, //y 0x44, 0x64, 0x54, 0x4c, 0x44, //z 0x08, 0x36, 0x41, 0x41, 0x00, //{ 0x00, 0x00, 0x77, 0x00, 0x00, //| 0x00, 0x41, 0x41, 0x36, 0x08, //} 0x04, 0x02, 0x02, 0x02, 0x01, //~ }; Lcd::Lcd() : spi_sck(51), spi_sda(72), spi_cs(154), spi_reset(150), spi_rs(156),COM_BOOT0(153) { printf("Lcd()\n"); write_dev(IOEXPORTPATH,51); write_dev(IOEXPORTPATH,72); write_dev(IOEXPORTPATH,154); write_dev(IOEXPORTPATH,150); write_dev(IOEXPORTPATH,156); write_dev(IOEXPORTPATH,153); COM_BOOT0.setDirection(Gpio::out); spi_sck.setDirection(Gpio::out); spi_sda.setDirection(Gpio::out); spi_cs.setDirection(Gpio::out); spi_reset.setDirection(Gpio::out); spi_rs.setDirection(Gpio::out); COM_BOOT0.setValue(Gpio::Low); spi_sck.setValue(Gpio::High); spi_sda.setValue(Gpio::High); spi_cs.setValue(Gpio::High); spi_reset.setValue(Gpio::High); spi_rs.setValue(Gpio::High); } /*=======写指令========*/ void Lcd::Lcd_Transfer_Command(int data1) { spi_cs.setValue(Gpio::Low); spi_rs.setValue(Gpio::Low); for (int i = 0; i < 8; i++) { spi_sck.setValue(Gpio::Low); if (data1 & 0x80) spi_sda.setValue(Gpio::High); else spi_sda.setValue(Gpio::Low); spi_sck.setValue(Gpio::High); data1 = data1 <<= 1; } spi_cs.setValue(Gpio::High); } /*--------写数据------------*/ void Lcd::Lcd_Transfer_data(int data1) { spi_cs.setValue(Gpio::Low); spi_rs.setValue(Gpio::High); for (int i = 0; i < 8; i++) { spi_sck.setValue(Gpio::Low); if (data1 & 0x80) spi_sda.setValue(Gpio::High); else spi_sda.setValue(Gpio::Low); spi_sck.setValue(Gpio::High); data1 = data1 <<= 1; } spi_cs.setValue(Gpio::High); } /*LCD模块初始化*/ void Lcd::Lcd_Initial_Lcd(bool biglcd) { spi_cs.setValue(Gpio::Low); spi_reset.setValue(Gpio::Low); /*低电平复位*/ DELAY_MS(20); spi_reset.setValue(Gpio::High); /*复位完毕*/ DELAY_MS(20); Lcd_Transfer_Command(0xe2); /*软复位*/ DELAY_MS(50); Lcd_Transfer_Command(0x2c); /*升压步聚1*/ DELAY_MS(50); Lcd_Transfer_Command(0x2e); /*升压步聚2*/ DELAY_MS(50); Lcd_Transfer_Command(0x2f); /*升压步聚3*/ DELAY_MS(50); Lcd_Transfer_Command(biglcd?0x21:0x24); /*0X24粗调对比度,可设置范围0x20~0x27*/ Lcd_Transfer_Command(0x81); /*微调对比度*/ Lcd_Transfer_Command(biglcd?0x28:0x15); /*45微调对比度的值,可设置范围0x00~0x3f 1f*/ // 0~63 Lcd_Transfer_Command(0xa2); /*1/9偏压比(bias)0xa2 ,1/7bias 0xa3*/ Lcd_Transfer_Command(0xc8); /*行扫描顺序:从上到下*/ //原 c0 字体倒置 CF ///////////////////////////////////////////////////////////// Lcd_Transfer_Command(0xa0); /*列扫描顺序:从左到右*/ //原 a1 字体倒置 A0 //////////////////////////////////////////////// Lcd_Transfer_Command(0x40); /*起始行:第一行开始*/ Lcd_Transfer_Command(0xaf); /*开显示*/ spi_cs.setValue(Gpio::High); } void Lcd::Lcd_Address(unsigned char page, unsigned char column) { spi_cs.setValue(Gpio::Low); column = column - 1; page = page - 1; Lcd_Transfer_Command(0xb0 + page); //设置页地址。每页是8行。一个画面的64行被分成8个页。我们平常所说的第1页,在LCD驱动IC里是第0页,所以在这里减去1*/ Lcd_Transfer_Command(((column >> 4) & 0x0f) + 0x10); //设置列地址的高4位 Lcd_Transfer_Command(column & 0x0f); //设置列地址的低4位 } /*全屏清屏*/ void Lcd::Lcd_Clear_screen() { unsigned char i, j; spi_cs.setValue(Gpio::Low); for (i = 0; i < 4; i++) { Lcd_Address(1 + i, 1); for (j = 0; j < 132; j++) { Lcd_Transfer_data(0x00); } } spi_cs.setValue(Gpio::High); } //===显示测试画面:例如全显示,隔行显示,隔列显示,雪花显示===== void Lcd::Lcd_Test_Display(unsigned char data1, unsigned char data2) { int i, j; for (j = 0; j < 8; j++) { spi_cs.setValue(Gpio::Low); Lcd_Address(j + 1, 1); for (i = 0; i < 128; i++) { Lcd_Transfer_data(data1); Lcd_Transfer_data(data2); } } } /*显示128x64点阵图像*/ void Lcd::Lcd_Display_Graphic_128x64(unsigned char page, unsigned char column, unsigned char *dp) { int i, j; for (j = 0; j < 8; j++) { spi_cs.setValue(Gpio::Low); Lcd_Address(page + j, column); for (i = 0; i < 128; i++) { Lcd_Transfer_data(*dp); dp++; } } } /*显示32x32点阵图像、汉字、生僻字或32x32点阵的其他图标*/ void Lcd::Lcd_Display_graphic_32x32(unsigned char page, unsigned char column, unsigned char *dp) { unsigned char i, j; spi_cs.setValue(Gpio::Low); for (j = 0; j < 4; j++) { Lcd_Address(page + j, column); for (i = 0; i < 31; i++) { Lcd_Transfer_data(*dp); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/ dp++; } } } /*显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标*/ void Lcd::Lcd_Display_Graphic_16x16_2(unsigned char reverse, unsigned char page, unsigned char column, unsigned char *dp) { unsigned char i, j; spi_cs.setValue(Gpio::Low); for (j = 0; j < 2; j++) { Lcd_Address(page + j, column); for (i = 0; i < 16; i++) { if (reverse == 1) Lcd_Transfer_data(*dp); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/ else Lcd_Transfer_data(~*dp); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/ dp++; } } spi_cs.setValue(Gpio::High); } /*显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标*/ void Lcd::Lcd_Display_Graphic_16x16(unsigned char page, unsigned char column, unsigned char *dp, unsigned int wordcount) { unsigned char i, j, k; spi_cs.setValue(Gpio::Low); for (k = 0; k < wordcount; k++) { for (j = 0; j < 2; j++) { Lcd_Address(page + j, column + 16 * k); for (i = 0; i < 16; i++) { Lcd_Transfer_data(*dp); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/ dp++; } } } spi_cs.setValue(Gpio::High); } /*显示8x16点阵图像、ASCII, 或8x16点阵的自造字符、其他图标*/ void Lcd::Lcd_Display_Graphic_8x16(unsigned char page, unsigned char column, unsigned char *dp) { unsigned char i, j; spi_cs.setValue(Gpio::Low); for (j = 0; j < 2; j++) { Lcd_Address(page + j, column); for (i = 0; i < 8; i++) { Lcd_Transfer_data(*dp); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/ dp++; } } spi_cs.setValue(Gpio::High); } void Lcd::Lcd_Display_String_8x16(unsigned int page, unsigned int column, const char *text) { unsigned int i = 0, j, k, n; spi_cs.setValue(Gpio::Low); while (text[i] > 0x00) { if ((text[i] >= 0x20) && (text[i] <= 0x7e)) { j = text[i] - 0x20; for (n = 0; n < 2; n++) { Lcd_Address(page + n, column); for (k = 0; k < 8; k++) { Lcd_Transfer_data(ascii_table_8x16[j][k + 8 * n]); /*显示5x7的ASCII字到LCD上,y为页地址,x为列地址,最后为数据*/ } } i++; column += 8; } else i++; } } void Lcd::Lcd_Display_String_5x8(unsigned int page, unsigned int column, const char *text) { unsigned int i = 0, j, k; spi_cs.setValue(Gpio::Low); while (text[i] > 0x00) { if ((text[i] >= 0x20) && (text[i] < 0x7e)) { j = text[i] - 0x20; Lcd_Address(page, column); for (k = 0; k < 5; k++) { Lcd_Transfer_data(ascii_table_5x8[j][k]); /*显示5x7的ASCII字到LCD上,y为页地址,x为列地址,最后为数据*/ } i++; column += 6; } else i++; } } void Lcd::Lcd_Clear_Half_Screen(bool top) { int pageindex = top ? 0 : 2; int pagemaxindex = top ? 2 : 4; spi_cs.setValue(Gpio::Low); for (int i = pageindex; i < pagemaxindex; i++) { Lcd_Address(1 + i, 1); for (int j = 0; j < 132; j++) { Lcd_Transfer_data(0x00); } } spi_cs.setValue(Gpio::High); }