2024-01-09 06:26:46 +00:00
|
|
|
|
#include "Lcd.h"
|
|
|
|
|
|
|
|
|
|
#include <thread>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <fstream>
|
|
|
|
|
#include <uart/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, //~
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2024-02-02 08:53:17 +00:00
|
|
|
|
#define OUT_BIT() \
|
|
|
|
|
shift--; \
|
|
|
|
|
spi_sck.setValue(Gpio::Low); \
|
|
|
|
|
spi_sda.setValue((Gpio::GpioLevel)((val >> shift) & 0x1)); \
|
|
|
|
|
spi_sck.setValue(Gpio::High);
|
|
|
|
|
|
|
|
|
|
|
2024-01-09 06:26:46 +00:00
|
|
|
|
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);
|
|
|
|
|
}
|
2024-02-02 08:53:17 +00:00
|
|
|
|
|
|
|
|
|
void Lcd::go_to(uint8_t page, uint8_t col)
|
|
|
|
|
{
|
|
|
|
|
write_before();
|
|
|
|
|
set_data_type(false);
|
|
|
|
|
|
|
|
|
|
write_char(0xb0 + page); // 设置页地址。每页是8行。一个画面的64行被分成8个页。我们平常所说的第1页,在LCD驱动IC里是第0页,所以在这里减去1*/
|
|
|
|
|
write_char(((col >> 4) & 0x0f) + 0x10); // 设置列地址的高4位
|
|
|
|
|
write_char(col & 0x0f); // 设置列地址的低4位
|
|
|
|
|
|
|
|
|
|
write_end();
|
|
|
|
|
}
|
|
|
|
|
void Lcd::write(uint8_t val, bool data, uint8_t mask)
|
|
|
|
|
{
|
|
|
|
|
write_before();
|
|
|
|
|
set_data_type(data);
|
|
|
|
|
|
|
|
|
|
write_char(val, mask);
|
|
|
|
|
|
|
|
|
|
write_end();
|
|
|
|
|
}
|
|
|
|
|
void Lcd::clear(int x, int y, int w, int h)
|
|
|
|
|
{
|
|
|
|
|
if(x >= LCD_WIDTH || y >= LCD_HEIGHT)
|
|
|
|
|
return;
|
|
|
|
|
if(x < 0)
|
|
|
|
|
x = 0;
|
|
|
|
|
if(y < 0)
|
|
|
|
|
y = 0;
|
|
|
|
|
if(w == -1)
|
|
|
|
|
w = LCD_WIDTH;
|
|
|
|
|
if(h == -1)
|
|
|
|
|
h = LCD_HEIGHT;
|
|
|
|
|
w += x;
|
|
|
|
|
h += y;
|
|
|
|
|
if(w > LCD_WIDTH)
|
|
|
|
|
w = LCD_WIDTH;
|
|
|
|
|
if(h > LCD_HEIGHT)
|
|
|
|
|
h = LCD_HEIGHT;
|
|
|
|
|
|
|
|
|
|
for(int r = y / LCD_LINE_PER_PAGE; r <= (h + LCD_LINE_PER_PAGE - 1) / LCD_LINE_PER_PAGE; ++r)
|
|
|
|
|
{
|
|
|
|
|
go_to(r, x);
|
|
|
|
|
write_before();
|
|
|
|
|
set_data_type(true);
|
|
|
|
|
for(int c = 0; c < w - x; ++c)
|
|
|
|
|
write_char(0);
|
|
|
|
|
write_end();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void Lcd::write_line(uint8_t rows, uint8_t cols, uint8_t cnt, uint8_t** data, int x, int y, uint8_t mask)
|
|
|
|
|
{
|
|
|
|
|
for(int r = 0; r < rows / LCD_LINE_PER_PAGE; ++r)
|
|
|
|
|
{
|
|
|
|
|
go_to(y / LCD_LINE_PER_PAGE + r, x);
|
|
|
|
|
write_before();
|
|
|
|
|
set_data_type(true);
|
|
|
|
|
|
|
|
|
|
for(int ind = 0; ind < cnt; ++ind)
|
|
|
|
|
{
|
|
|
|
|
for(int c = 0; c < cols; ++c)
|
|
|
|
|
{
|
|
|
|
|
write_char(*data[ind]++, mask);
|
|
|
|
|
}
|
|
|
|
|
write_char(0, mask);
|
|
|
|
|
}
|
|
|
|
|
write_end();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Lcd::set_data_type(bool data)
|
|
|
|
|
{
|
|
|
|
|
spi_rs.setValue((Gpio::GpioLevel)data);
|
|
|
|
|
}
|
|
|
|
|
void Lcd::write_before(void)
|
|
|
|
|
{
|
|
|
|
|
spi_cs.setValue(Gpio::Low);
|
|
|
|
|
}
|
|
|
|
|
void Lcd::write_char(uint8_t val, uint8_t mask)
|
|
|
|
|
{
|
|
|
|
|
uint8_t shift = 8;
|
|
|
|
|
|
|
|
|
|
val ^= mask;
|
|
|
|
|
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
OUT_BIT();
|
|
|
|
|
}
|
|
|
|
|
void Lcd::write_end(void)
|
|
|
|
|
{
|
|
|
|
|
spi_cs.setValue(Gpio::High);
|
|
|
|
|
}
|