Преглед изворни кода

增加中文处理,显示还有些问题

guohui пре 1 година
родитељ
комит
9adda4e5ee
10 измењених фајлова са 508 додато и 176 уклоњено
  1. 48 0
      pro/ui/beep.c
  2. 24 0
      pro/ui/beep.h
  3. 250 41
      pro/ui/font.c
  4. 7 9
      pro/ui/font.h
  5. 90 0
      pro/ui/key.c
  6. 16 0
      pro/ui/key.h
  7. 18 73
      pro/ui/lcd.c
  8. 21 0
      pro/ui/led.c
  9. 17 0
      pro/ui/led.h
  10. 17 53
      pro/ui/ui.c

+ 48 - 0
pro/ui/beep.c

@@ -0,0 +1,48 @@
+#include "gpio.h"
+#include "elog.h"
+#include "common.h"
+
+#if 1
+    #define LOGD  log_d
+    #define LOGE  log_e
+#else
+    #define LOGD  printf
+    #define LOGE  printf
+#endif
+
+#define BEEP_LEVEL          0
+
+static beep_para_t beep_para[BEEP_MODE_MAX]={
+    {},
+    {},
+    {},
+    {},
+    {},
+};
+
+
+
+int beep_init(void)
+{
+    
+}
+
+
+int beep_start(int mode)
+{
+    
+}
+
+
+int beep_start_ex(beep_para_t *para)
+{
+    
+}
+
+
+int beep_stop(void)
+{
+    
+}
+
+

+ 24 - 0
pro/ui/beep.h

@@ -0,0 +1,24 @@
+#ifndef __BEEP_Hx__
+#define __BEEP_Hx__
+
+enum {
+    BEEP_MODE_WARN=0,
+    BEEP_MODE_ERROR,
+    BEEP_MODE_EMERG,
+    BEEP_MODE_FATAL,
+    
+    BEEP_MODE_MAX,
+};
+
+typedef struct {
+    int on_ms;
+    int off_ms;
+    int times;
+}beep_para_t;
+
+int beep_init(void);
+int beep_start(int mode);
+int beep_start_ex(beep_para_t *para);
+int beep_stop(void);
+
+#endif

+ 250 - 41
pro/ui/font.c

@@ -1,3 +1,4 @@
+#include <string.h>
 #include "font.h"
 
 //Arial Helvetica  Verdana
@@ -396,75 +397,283 @@ static const uint8_t font_2412[95][36] =
 };
 
 
-font_info_t font_info(int font)
+static const char *font_chinese_str="输出入通道状态率耗电压流量功率因素温湿度数据版本日期时间地址模式保存退出";
+static const uint8_t font_chinese_1212[][24] =
 {
-    font_info_t tmp={0};
-    
-    switch(font) {
+{0x34,0x01,0x2C,0x01,0xF7,0x0F,0xA4,0x00,0xE8,0x0F,0xA4,0x02,0xEA,0x0F,0x09,0x00,0xCA,0x03,0x04,0x08,0xE8,0x0F,0x00,0x00},/*"输",0*/
+{0x80,0x07,0x1E,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0xFF,0x07,0x10,0x04,0x10,0x04,0x10,0x04,0x1E,0x04,0x80,0x0F,0x00,0x00},/*"出",1*/
+{0x00,0x08,0x00,0x04,0x01,0x02,0x81,0x01,0x72,0x00,0x0C,0x00,0x70,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x00},/*"入",2*/
+{0x11,0x08,0xF2,0x07,0x00,0x08,0xF9,0x0B,0xA9,0x08,0xAB,0x08,0xFD,0x0B,0xAD,0x08,0xAB,0x0A,0xF8,0x0B,0x00,0x08,0x00,0x00},/*"通",3*/
+{0x10,0x08,0x11,0x04,0xF2,0x03,0x00,0x04,0xFA,0x0B,0xAB,0x0A,0xAE,0x0A,0xAA,0x0A,0xAA,0x0A,0xAB,0x0A,0xFA,0x0B,0x00,0x00},/*"道",4*/
+{0x04,0x01,0x88,0x00,0xFF,0x0F,0x00,0x00,0x10,0x08,0x10,0x06,0xD0,0x01,0x3F,0x00,0xD0,0x01,0x12,0x06,0x14,0x08,0x00,0x00},/*"状",5*/
+{0x44,0x04,0x44,0x03,0x24,0x00,0x14,0x07,0x0C,0x08,0xA7,0x08,0x4C,0x0B,0x14,0x08,0x24,0x0C,0x44,0x01,0x44,0x06,0x00,0x00},/*"态",6*/
+{0x02,0x02,0x8A,0x02,0x52,0x02,0x9A,0x02,0xD6,0x02,0xB3,0x0F,0xD2,0x02,0x8A,0x02,0x52,0x02,0x8A,0x02,0x02,0x02,0x00,0x00},/*"率",7*/
+{0x44,0x02,0x54,0x01,0xFF,0x0F,0x54,0x01,0x44,0x02,0x92,0x00,0x92,0x00,0xFE,0x07,0x49,0x08,0x49,0x08,0x40,0x0E,0x00,0x00},/*"耗",8*/
+{0xFC,0x03,0x24,0x01,0x24,0x01,0x24,0x01,0xFF,0x07,0x24,0x09,0x24,0x09,0x24,0x09,0xFC,0x09,0x00,0x08,0x00,0x0E,0x00,0x00},/*"电",9*/
+{0x00,0x08,0xFE,0x07,0x02,0x08,0x42,0x08,0x42,0x08,0x42,0x08,0xFA,0x0F,0x42,0x08,0x42,0x09,0x42,0x0A,0x02,0x08,0x00,0x00},/*"压",10*/
+{0x22,0x04,0x44,0x02,0x00,0x08,0x24,0x04,0xB4,0x03,0x2C,0x00,0xA5,0x0F,0x26,0x00,0xA4,0x07,0x34,0x08,0x64,0x0E,0x00,0x00},/*"流",11*/
+{0x08,0x08,0xFF,0x0A,0xA9,0x0A,0xA9,0x0A,0xA9,0x0A,0xFB,0x0F,0xAD,0x0A,0xA9,0x0A,0xA9,0x0A,0xFF,0x0A,0x08,0x08,0x00,0x00},/*"量",12*/
+{0x04,0x02,0x04,0x02,0xFC,0x01,0x04,0x09,0x04,0x05,0x08,0x03,0xFF,0x00,0x08,0x00,0x08,0x08,0x08,0x08,0xF8,0x07,0x00,0x00},/*"功",13*/
+{0x02,0x02,0x8A,0x02,0x52,0x02,0x9A,0x02,0xD6,0x02,0xB3,0x0F,0xD2,0x02,0x8A,0x02,0x52,0x02,0x8A,0x02,0x02,0x02,0x00,0x00},/*"率",14*/
+{0xFF,0x0F,0x01,0x04,0x11,0x05,0x91,0x04,0x51,0x04,0x3D,0x04,0x51,0x04,0x91,0x04,0x11,0x05,0x01,0x04,0xFF,0x0F,0x00,0x00},/*"因",15*/
+{0x22,0x00,0x2A,0x0A,0xAA,0x06,0xEA,0x02,0xAA,0x0B,0xBF,0x0E,0xAA,0x02,0x6A,0x02,0x2A,0x07,0x2A,0x0A,0x22,0x00,0x00,0x00},/*"素",16*/
+{0x22,0x04,0x44,0x02,0x00,0x09,0xC0,0x0F,0x5F,0x08,0xD5,0x0F,0x55,0x08,0xD5,0x0F,0x5F,0x08,0xC0,0x0F,0x00,0x08,0x00,0x00},/*"温",17*/
+{0x11,0x04,0x22,0x02,0x80,0x08,0x3E,0x09,0x2A,0x08,0xEA,0x0F,0x2A,0x08,0xEA,0x0F,0x2A,0x08,0x3E,0x09,0x80,0x08,0x00,0x00},/*"湿",18*/
+{0x00,0x08,0xFE,0x07,0x0A,0x00,0x8A,0x08,0xBE,0x09,0xAA,0x0A,0xAB,0x04,0xAA,0x04,0xBE,0x0A,0x8A,0x09,0x0A,0x08,0x00,0x00},/*"度",19*/
+{0x48,0x09,0x2A,0x0B,0x98,0x05,0x7F,0x05,0x28,0x0B,0x4A,0x00,0x10,0x08,0xEF,0x05,0x08,0x02,0xF8,0x05,0x08,0x08,0x00,0x00},/*"数",20*/
+{0x88,0x00,0x88,0x08,0xFF,0x0F,0x48,0x08,0x00,0x06,0xFE,0x01,0xAA,0x0F,0xAA,0x04,0xFA,0x04,0xAA,0x04,0xAE,0x0F,0x00,0x00},/*"据",21*/
+{0x00,0x08,0xFE,0x07,0x90,0x00,0x9F,0x0F,0x10,0x04,0xFE,0x03,0x12,0x08,0xF2,0x05,0x12,0x02,0x91,0x05,0x71,0x08,0x00,0x00},/*"版",22*/
+{0x04,0x02,0x04,0x01,0x84,0x02,0x64,0x02,0x14,0x02,0xFF,0x0F,0x14,0x02,0x64,0x02,0x84,0x02,0x04,0x01,0x04,0x02,0x00,0x00},/*"本",23*/
+{0x00,0x00,0xFE,0x0F,0x22,0x04,0x22,0x04,0x22,0x04,0x22,0x04,0x22,0x04,0x22,0x04,0x22,0x04,0xFE,0x0F,0x00,0x00,0x00,0x00},/*"日",24*/
+{0x04,0x09,0xFF,0x05,0x54,0x01,0x54,0x01,0xFF,0x05,0x04,0x09,0x00,0x08,0xFE,0x07,0x92,0x00,0x92,0x08,0xFE,0x0F,0x00,0x00},/*"期",25*/
+{0xFE,0x07,0x22,0x02,0x22,0x02,0xFE,0x07,0x00,0x00,0x08,0x00,0x48,0x00,0x88,0x09,0x08,0x08,0xFF,0x0F,0x08,0x00,0x00,0x00},/*"时",26*/
+{0x00,0x00,0xF9,0x0F,0x02,0x00,0xF8,0x03,0x49,0x02,0x49,0x02,0x49,0x02,0x49,0x02,0xF9,0x0B,0x01,0x08,0xFF,0x0F,0x00,0x00},/*"间",27*/
+{0x10,0x04,0x10,0x04,0xFF,0x03,0x10,0x02,0x20,0x00,0xFC,0x07,0x10,0x08,0xFF,0x09,0x08,0x08,0x84,0x08,0xFC,0x0E,0x00,0x00},/*"地",28*/
+{0x10,0x04,0x10,0x04,0xFF,0x03,0x10,0x02,0x00,0x08,0xF8,0x0F,0x00,0x08,0x00,0x08,0xFF,0x0F,0x10,0x08,0x10,0x08,0x00,0x00},/*"址",29*/
+{0x88,0x00,0x68,0x00,0xFF,0x0F,0x48,0x00,0x02,0x0A,0xFA,0x0A,0xAF,0x06,0xAA,0x03,0xAF,0x06,0xFA,0x0A,0x02,0x0A,0x00,0x00},/*"模",30*/
+{0x08,0x08,0x48,0x08,0x48,0x08,0xC8,0x07,0x48,0x04,0x48,0x04,0x08,0x04,0xFF,0x00,0x08,0x03,0x09,0x04,0x0A,0x0E,0x00,0x00},/*"式",31*/
+{0x20,0x00,0x10,0x00,0xFC,0x0F,0x03,0x00,0x40,0x04,0x5E,0x02,0x52,0x01,0xF2,0x0F,0x52,0x01,0x5E,0x02,0x40,0x04,0x00,0x00},/*"保",32*/
+{0x84,0x00,0x44,0x00,0xF4,0x0F,0x0C,0x00,0x87,0x00,0x94,0x00,0x94,0x08,0xD4,0x0F,0xB4,0x00,0x94,0x00,0x84,0x00,0x00,0x00},/*"存",33*/
+{0x10,0x08,0x11,0x04,0xF2,0x03,0x00,0x04,0xFF,0x0B,0x15,0x09,0xB5,0x08,0x55,0x08,0x95,0x08,0x5F,0x0B,0x20,0x08,0x00,0x00},/*"退",34*/
+{0x80,0x07,0x1E,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0xFF,0x07,0x10,0x04,0x10,0x04,0x10,0x04,0x1E,0x04,0x80,0x0F,0x00,0x00},/*"出",35*/
+};
+static const uint8_t font_chinese_1616[][32] =
+{
+{0x88,0x09,0x68,0x19,0x1F,0x09,0xC8,0xFF,0x08,0x05,0x10,0x00,0xC8,0xFF,0x54,0x12,0x52,0x92,0xD1,0xFF,0x12,0x00,0x94,0x5F,0x08,0x80,0xD0,0x7F,0x10,0x00,0x00,0x00},/*"输",0*/
+{0x00,0x00,0x00,0x7C,0x7C,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0x40,0x00,0xFC,0x00,0x00,0x00,0x00},/*"出",1*/
+{0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x0C,0x01,0x03,0xE2,0x00,0x1C,0x00,0xE0,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x80,0x00,0x80,0x00,0x00},/*"入",2*/
+{0x40,0x80,0x42,0x40,0xCC,0x3F,0x00,0x40,0x00,0x80,0xE2,0xFF,0x22,0x89,0x2A,0x89,0x2A,0x89,0xF2,0xBF,0x2A,0x89,0x26,0xA9,0x22,0xC9,0xE0,0xBF,0x00,0x80,0x00,0x00},/*"通",3*/
+{0x40,0x00,0x40,0x40,0x42,0x20,0xCC,0x1F,0x00,0x20,0x08,0x40,0xE9,0x5F,0xAA,0x4A,0xB8,0x4A,0xA8,0x4A,0xA8,0x4A,0xAA,0x4A,0xE9,0x5F,0x08,0x40,0x00,0x40,0x00,0x00},/*"道",4*/
+{0x00,0x04,0x08,0x04,0x30,0x02,0x00,0x01,0xFF,0xFF,0x20,0x80,0x20,0x40,0x20,0x30,0x20,0x0E,0xFF,0x01,0x20,0x06,0x20,0x18,0x22,0x20,0x2C,0x40,0x20,0x80,0x00,0x00},/*"状",5*/
+{0x00,0x41,0x04,0x39,0x84,0x00,0x84,0x00,0x44,0x3C,0x24,0x40,0x54,0x40,0x8F,0x42,0x14,0x4C,0x24,0x40,0x44,0x40,0x84,0x70,0x84,0x04,0x04,0x09,0x00,0x31,0x00,0x00},/*"态",6*/
+{0x00,0x08,0x14,0x09,0xA4,0x08,0x44,0x08,0x24,0x09,0x34,0x09,0xAD,0x09,0x66,0xFD,0x24,0x09,0x94,0x09,0x04,0x0B,0x44,0x08,0xA4,0x08,0x14,0x09,0x00,0x08,0x00,0x00},/*"率",7*/
+{0x88,0x20,0xA8,0x18,0xA8,0x06,0xFF,0xFF,0xA8,0x02,0xA8,0x0C,0x88,0x00,0x00,0x04,0x44,0x04,0x44,0x04,0xFC,0x7F,0x22,0x82,0x23,0x82,0x22,0x82,0x00,0xF2,0x00,0x00},/*"耗",8*/
+{0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0xFF,0x7F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x9F,0x00,0x80,0x00,0xF0,0x00,0x00},/*"电",9*/
+{0x00,0x80,0x00,0x60,0xFE,0x1F,0x02,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0xFA,0x7F,0x82,0x40,0x82,0x40,0x82,0x44,0x82,0x58,0x82,0x40,0x02,0x40,0x00,0x00},/*"压",10*/
+{0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x00,0x80,0x44,0x40,0x64,0x3E,0x54,0x00,0x4D,0x00,0x46,0xFE,0x44,0x00,0x54,0x00,0x64,0x7E,0xC4,0x80,0x04,0xE0,0x00,0x00},/*"流",11*/
+{0x20,0x00,0x20,0x80,0x20,0x80,0xBE,0xAF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0xAF,0x20,0x80,0x20,0x80,0x20,0x00,0x00,0x00},/*"量",12*/
+{0x08,0x10,0x08,0x30,0x08,0x10,0xF8,0x1F,0x08,0x08,0x08,0x88,0x08,0x48,0x10,0x30,0x10,0x0E,0xFF,0x01,0x10,0x40,0x10,0x80,0x10,0x40,0xF0,0x3F,0x00,0x00,0x00,0x00},/*"功",13*/
+{0x00,0x08,0x14,0x09,0xA4,0x08,0x44,0x08,0x24,0x09,0x34,0x09,0xAD,0x09,0x66,0xFD,0x24,0x09,0x94,0x09,0x04,0x0B,0x44,0x08,0xA4,0x08,0x14,0x09,0x00,0x08,0x00,0x00},/*"率",14*/
+{0x00,0x00,0xFE,0xFF,0x02,0x40,0x42,0x50,0x42,0x48,0x42,0x44,0x42,0x43,0xFA,0x40,0x42,0x41,0x42,0x42,0x42,0x44,0x42,0x58,0x02,0x40,0xFE,0xFF,0x00,0x00,0x00,0x00},/*"因",15*/
+{0x20,0x00,0x20,0x80,0x22,0x48,0x2A,0x29,0x2A,0x09,0xAA,0x4D,0x6A,0x8D,0x3F,0x7B,0x2A,0x0B,0x2A,0x09,0xAA,0x28,0x2A,0x4C,0x22,0x98,0x20,0x00,0x20,0x00,0x00,0x00},/*"素",16*/
+{0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x00,0x40,0x00,0x7E,0xFE,0x42,0x92,0x42,0x92,0x7E,0x92,0x42,0x92,0x7E,0x92,0x42,0xFE,0x42,0x00,0x7E,0x00,0x40,0x00,0x00},/*"温",17*/
+{0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x00,0x44,0xFE,0x48,0x92,0x50,0x92,0x7F,0x92,0x40,0x92,0x40,0x92,0x7F,0x92,0x50,0xFE,0x48,0x00,0x44,0x00,0x40,0x00,0x00},/*"湿",18*/
+{0x00,0x40,0x00,0x30,0xFC,0x8F,0x24,0x80,0x24,0x84,0x24,0x4C,0xFC,0x55,0x25,0x25,0x26,0x25,0x24,0x25,0xFC,0x55,0x24,0x4C,0x24,0x80,0x24,0x80,0x04,0x80,0x00,0x00},/*"度",19*/
+{0x90,0x82,0x52,0x9A,0x34,0x56,0x10,0x63,0xFF,0x22,0x10,0x52,0x34,0x8E,0x52,0x00,0x80,0x80,0x70,0x40,0x8F,0x33,0x08,0x0C,0x08,0x33,0xF8,0x40,0x08,0x80,0x00,0x00},/*"数",20*/
+{0x10,0x42,0x10,0x82,0xFF,0x7F,0x10,0x01,0x90,0x80,0x00,0x60,0xFE,0x1F,0x92,0x00,0x92,0xFC,0x92,0x44,0xF2,0x47,0x92,0x44,0x92,0x44,0x9E,0xFC,0x80,0x00,0x00,0x00},/*"据",21*/
+{0x00,0x80,0xFE,0x7F,0x20,0x01,0x20,0x01,0x3F,0xFF,0x20,0x80,0x00,0x60,0xFC,0x1F,0x24,0x80,0xE4,0x41,0x24,0x26,0x22,0x18,0x23,0x26,0xE2,0x41,0x00,0x80,0x00,0x00},/*"版",22*/
+{0x00,0x10,0x10,0x08,0x10,0x04,0x10,0x02,0x10,0x09,0xD0,0x08,0x30,0x08,0xFF,0xFF,0x30,0x08,0xD0,0x08,0x10,0x09,0x10,0x02,0x10,0x04,0x10,0x08,0x00,0x10,0x00,0x00},/*"本",23*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"日",24*/
+{0x00,0x88,0x04,0x48,0xFF,0x2F,0x24,0x09,0x24,0x09,0x24,0x19,0xFF,0xAF,0x04,0x48,0x00,0x30,0xFE,0x0F,0x22,0x02,0x22,0x42,0x22,0x82,0xFE,0x7F,0x00,0x00,0x00,0x00},/*"期",25*/
+{0x00,0x00,0xFC,0x3F,0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x3F,0x00,0x00,0x10,0x00,0x10,0x01,0x10,0x06,0x10,0x40,0x10,0x80,0xFF,0x7F,0x10,0x00,0x10,0x00,0x00,0x00},/*"时",26*/
+{0x00,0x00,0xF8,0xFF,0x01,0x00,0x06,0x00,0x00,0x00,0xF0,0x1F,0x12,0x11,0x12,0x11,0x12,0x11,0xF2,0x1F,0x02,0x00,0x02,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00},/*"间",27*/
+{0x20,0x10,0x20,0x30,0x20,0x10,0xFF,0x0F,0x20,0x08,0x20,0x08,0x80,0x00,0xF8,0x3F,0x80,0x40,0x40,0x40,0xFF,0x5F,0x20,0x42,0x10,0x44,0xF0,0x43,0x00,0x78,0x00,0x00},/*"地",28*/
+{0x20,0x10,0x20,0x30,0x20,0x10,0xFF,0x0F,0x20,0x08,0x20,0x48,0x00,0x40,0xF8,0x7F,0x00,0x40,0x00,0x40,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x00,0x00},/*"址",29*/
+{0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF,0x90,0x00,0x14,0x89,0xE4,0x4B,0xAF,0x2A,0xA4,0x1A,0xA4,0x0E,0xA4,0x1A,0xAF,0x2A,0xE4,0x4B,0x04,0x88,0x00,0x80,0x00,0x00},/*"模",30*/
+{0x10,0x00,0x10,0x20,0x90,0x60,0x90,0x20,0x90,0x3F,0x90,0x10,0x90,0x10,0x10,0x10,0x10,0x00,0xFF,0x03,0x10,0x0C,0x10,0x10,0x11,0x20,0x16,0x40,0x10,0xF8,0x00,0x00},/*"式",31*/
+{0x00,0x01,0x80,0x00,0x60,0x00,0xF8,0xFF,0x07,0x20,0x00,0x11,0x3E,0x09,0x22,0x05,0x22,0x03,0xE2,0xFF,0x22,0x03,0x22,0x05,0x3E,0x09,0x00,0x11,0x00,0x20,0x00,0x00},/*"保",32*/
+{0x04,0x02,0x04,0x01,0x84,0x00,0xE4,0xFF,0x1C,0x00,0x07,0x02,0x24,0x02,0x24,0x42,0x24,0x82,0x24,0x7F,0xA4,0x02,0x64,0x02,0x24,0x02,0x04,0x02,0x04,0x02,0x00,0x00},/*"存",33*/
+{0x40,0x00,0x40,0x40,0x42,0x20,0xCC,0x1F,0x00,0x20,0x00,0x40,0xFF,0x5F,0x49,0x48,0x49,0x44,0xC9,0x40,0x49,0x41,0x49,0x42,0x7F,0x45,0x80,0x58,0x00,0x40,0x00,0x00},/*"退",34*/
+{0x00,0x00,0x00,0x7C,0x7C,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0x40,0x00,0xFC,0x00,0x00,0x00,0x00},/*"出",35*/
+};
+static const uint8_t font_chinese_2424[][72] =
+{
+{0x00,0x00,0x00,0x20,0x08,0x02,0x20,0x0E,0x02,0xE0,0x0B,0x01,0x7C,0x08,0x01,0x2C,0x09,0x71,0x20,0xFF,0x7F,0x20,0x88,0x00,0x20,0x8A,0x00,0x20,0x01,0x00,0x00,0xFD,0x7F,0x80,0x24,0x01,0x60,0x25,0x21,0x38,0x25,0x61,0x0E,0xFD,0x3F,0x0C,0x01,0x00,0x10,0x01,0x00,0xA0,0xF8,0x07,0x40,0x01,0x20,0x80,0x00,0x60,0x80,0xFD,0x3F,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"输",0*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x8F,0x3F,0xE0,0x8F,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0xFC,0xFF,0x3F,0xF8,0xFF,0x3F,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0xE0,0x1F,0x20,0x20,0x90,0x7F,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"出",1*/
+{0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x0C,0x00,0x00,0x06,0x04,0x80,0x01,0x04,0xC0,0x00,0x08,0x30,0x00,0x18,0x1E,0x00,0xF0,0x03,0x00,0xC0,0x01,0x00,0x00,0x0E,0x00,0x00,0x70,0x00,0x00,0xC0,0x00,0x00,0x80,0x03,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00},/*"入",2*/
+{0x00,0x00,0x00,0x00,0x04,0x20,0x00,0x04,0x30,0x08,0x04,0x18,0x70,0x04,0x08,0x60,0xFC,0x07,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x30,0x84,0xFF,0x2F,0x84,0x44,0x20,0x84,0x44,0x60,0x94,0x44,0x60,0xA4,0x44,0x60,0xE4,0xFF,0x6F,0xE4,0x44,0x60,0x94,0x44,0x60,0x94,0x44,0x60,0x8C,0x44,0x68,0x88,0x44,0x7C,0x80,0xFF,0x6F,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"通",3*/
+{0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x02,0x18,0x04,0x02,0x08,0x0C,0x02,0x04,0x18,0xFF,0x07,0x00,0x02,0x08,0x20,0x00,0x10,0x20,0x00,0x10,0x20,0x00,0x20,0x22,0xFF,0x27,0x24,0x49,0x22,0x38,0x49,0x62,0xA0,0x49,0x62,0x60,0x49,0x42,0x20,0x49,0x42,0x30,0x49,0x42,0x2C,0x49,0x42,0x24,0xFF,0x47,0x20,0xFF,0x67,0x20,0x00,0x60,0x20,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00},/*"道",4*/
+{0x00,0x00,0x00,0x00,0x00,0x01,0x40,0x80,0x01,0x80,0x81,0x00,0x00,0x43,0x00,0x00,0x20,0x00,0x04,0x10,0x40,0xFC,0xFF,0x3F,0x00,0x02,0x40,0x00,0x02,0x20,0x00,0x02,0x10,0x00,0x02,0x0C,0x00,0x02,0x07,0x00,0xF2,0x01,0xFC,0x3F,0x00,0x00,0x06,0x00,0x00,0x7A,0x00,0x08,0x82,0x03,0x10,0x02,0x0E,0x70,0x02,0x1C,0xE0,0x03,0x38,0x00,0x02,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*"状",5*/
+{0x00,0x00,0x00,0x00,0x40,0x00,0x20,0x40,0x18,0x20,0x20,0x1C,0x20,0x20,0x0F,0x20,0x10,0x00,0x20,0x10,0x00,0x20,0x08,0x3F,0x20,0x04,0x61,0x20,0x07,0x40,0xF0,0x89,0x40,0x3E,0x98,0x41,0x60,0x30,0x47,0xA0,0x01,0x40,0x20,0x02,0x40,0x20,0x04,0x40,0x20,0x0C,0x7C,0x20,0x18,0x00,0x20,0x18,0x01,0x20,0x30,0x06,0x30,0x30,0x1E,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"态",6*/
+{0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x20,0x01,0x10,0x20,0x01,0x90,0x20,0x01,0x90,0x11,0x01,0x10,0x08,0x01,0x10,0x08,0x01,0x10,0x23,0x01,0x90,0x32,0x01,0x52,0x2A,0x01,0x3C,0xE6,0x7F,0x1C,0x62,0x61,0x10,0x29,0x01,0xD0,0x11,0x01,0x90,0x70,0x01,0x10,0x0A,0x01,0x10,0x09,0x01,0x90,0x10,0x01,0x90,0x30,0x01,0x10,0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00},/*"率",7*/
+{0x00,0x00,0x00,0x00,0x04,0x08,0x90,0x04,0x04,0x90,0x04,0x03,0x90,0xC4,0x00,0x90,0x7C,0x00,0xFE,0xFF,0x7F,0x90,0x24,0x00,0x90,0xC4,0x00,0x90,0x84,0x01,0x10,0x04,0x00,0x00,0x84,0x00,0x20,0x84,0x00,0x20,0x84,0x00,0x10,0x44,0x00,0xF0,0xFF,0x3F,0x10,0x42,0x20,0x08,0x42,0x20,0x08,0x42,0x20,0x0C,0x21,0x20,0x04,0x21,0x20,0x00,0x30,0x3E,0x00,0x20,0x10,0x00,0x00,0x00},/*"耗",8*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x03,0x40,0x84,0x00,0x40,0x84,0x00,0x40,0x84,0x00,0x40,0x84,0x00,0x40,0x84,0x00,0x40,0x84,0x00,0xFE,0xFF,0x7F,0x40,0x84,0x40,0x40,0x84,0x40,0x40,0x84,0x40,0x40,0x84,0x40,0x40,0x84,0x40,0x40,0x84,0x40,0xC0,0xFF,0x41,0x40,0x00,0x40,0x00,0x00,0x60,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00},/*"电",9*/
+{0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x30,0x00,0x00,0x0C,0xF8,0xFF,0x17,0xF8,0x7F,0x10,0x08,0x00,0x10,0x08,0x08,0x10,0x08,0x08,0x10,0x08,0x08,0x10,0x08,0x08,0x10,0x08,0x08,0x10,0xE8,0xFF,0x1F,0xE8,0xFF,0x1F,0x08,0x08,0x10,0x08,0x08,0x10,0x08,0x48,0x10,0x08,0x88,0x11,0x08,0x08,0x17,0x08,0x08,0x12,0x0C,0x00,0x10,0x08,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00},/*"压",10*/
+{0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0x01,0x04,0x0E,0x3F,0x08,0x80,0x3F,0x38,0x60,0x40,0x30,0x1C,0x40,0x80,0x03,0x20,0x50,0x00,0x18,0x10,0xF4,0x0F,0x10,0xF6,0x01,0x10,0x05,0x00,0xD2,0x04,0x00,0x74,0xF4,0x7F,0x3C,0x14,0x00,0x10,0x02,0x00,0x10,0x02,0x00,0x90,0xF2,0x3F,0x10,0x13,0x20,0x10,0x0E,0x20,0x18,0x00,0x20,0x10,0x00,0x3C,0x00,0x00,0x10,0x00,0x00,0x00},/*"流",11*/
+{0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x24,0x00,0x02,0x24,0xFC,0xFB,0x27,0xFC,0x2B,0x25,0x94,0x2A,0x25,0x94,0x2A,0x25,0x94,0x2A,0x25,0x94,0x2A,0x25,0x94,0xFA,0x3F,0x94,0xFA,0x3F,0x94,0x2A,0x25,0x94,0x2A,0x25,0x94,0x2A,0x25,0x94,0x2A,0x25,0xFC,0xFB,0x27,0x00,0xFA,0x27,0x00,0x02,0x24,0x00,0x02,0x20,0x00,0x03,0x30,0x00,0x02,0x00,0x00,0x00,0x00},/*"量",12*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x06,0x20,0x00,0x06,0x20,0x00,0x02,0x20,0x00,0x02,0xE0,0xFF,0x01,0x20,0x00,0x41,0x20,0x00,0x21,0x20,0x80,0x20,0x30,0x80,0x10,0xA0,0x00,0x08,0x80,0x00,0x06,0x80,0x00,0x03,0x80,0xF0,0x00,0xFE,0x1F,0x10,0x84,0x00,0x10,0x80,0x00,0x20,0x80,0x00,0x60,0x80,0x00,0x30,0x80,0xFF,0x1F,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"功",13*/
+{0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x20,0x01,0x10,0x20,0x01,0x90,0x20,0x01,0x90,0x11,0x01,0x10,0x08,0x01,0x10,0x08,0x01,0x10,0x23,0x01,0x90,0x32,0x01,0x52,0x2A,0x01,0x3C,0xE6,0x7F,0x1C,0x62,0x61,0x10,0x29,0x01,0xD0,0x11,0x01,0x90,0x70,0x01,0x10,0x0A,0x01,0x10,0x09,0x01,0x90,0x10,0x01,0x90,0x30,0x01,0x10,0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00},/*"率",14*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x04,0x00,0x10,0x04,0x02,0x18,0x04,0x02,0x14,0x04,0x02,0x14,0x04,0x02,0x12,0x04,0x02,0x11,0x04,0xE2,0x10,0xE4,0x3F,0x10,0x24,0x12,0x10,0x04,0x22,0x10,0x04,0x42,0x10,0x04,0x82,0x11,0x04,0x82,0x17,0x04,0x02,0x10,0x04,0x00,0x10,0x04,0x00,0x10,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"因",15*/
+{0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x40,0x08,0x01,0x20,0x08,0x01,0x10,0x48,0x81,0x19,0x48,0x99,0x0D,0x48,0x95,0x07,0x48,0x55,0x05,0x48,0xD3,0x20,0x48,0xAB,0x60,0xFE,0xA9,0x7F,0xFE,0x91,0x3F,0x48,0x89,0x00,0x48,0x8D,0x00,0x48,0x85,0x02,0x48,0xE1,0x04,0x48,0xC1,0x0C,0x48,0x81,0x19,0x0C,0x01,0x38,0x08,0x01,0x30,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"素",16*/
+{0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x01,0x01,0x04,0x07,0x3F,0x08,0x80,0x3F,0x18,0x78,0x20,0x00,0x07,0x20,0xC0,0x00,0x20,0x00,0xE0,0x3F,0xF8,0x2F,0x20,0x48,0x24,0x20,0x48,0x24,0x20,0x48,0xE4,0x3F,0x48,0x24,0x20,0x48,0x24,0x20,0x48,0xE4,0x3F,0x48,0x24,0x20,0x48,0x24,0x20,0xFC,0x2F,0x20,0x00,0xE0,0x3F,0x00,0x20,0x20,0x00,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x00},/*"温",17*/
+{0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x01,0x11,0x04,0x87,0x3F,0x18,0xC2,0x01,0x38,0x38,0x00,0x00,0x07,0x20,0xC0,0x00,0x20,0x00,0xC0,0x20,0xF8,0x8F,0x27,0xF8,0x0F,0x22,0x48,0x04,0x20,0x48,0xFC,0x3F,0x48,0x04,0x20,0x48,0x04,0x20,0x48,0x04,0x20,0x48,0xFC,0x3F,0x48,0x04,0x24,0x48,0x04,0x23,0xFC,0x8F,0x21,0x08,0xE0,0x20,0x00,0x60,0x30,0x00,0x00,0x20,0x00,0x00,0x00},/*"湿",18*/
+{0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x18,0x00,0xC0,0x07,0xF0,0xFF,0x00,0x10,0x01,0x40,0x10,0x01,0x40,0x10,0x41,0x40,0x10,0x41,0x20,0x30,0x41,0x20,0xD0,0xDF,0x11,0x12,0x49,0x12,0x1C,0x49,0x0C,0x1C,0x49,0x08,0x10,0x49,0x0C,0x10,0x49,0x12,0xF0,0x5F,0x11,0x50,0xC1,0x30,0x10,0x41,0x20,0x10,0x01,0x20,0x98,0x01,0x60,0x10,0x01,0x20,0x00,0x00,0x20,0x00,0x00,0x00},/*"度",19*/
+{0x00,0x00,0x00,0x00,0x50,0x40,0x40,0x48,0x40,0x44,0x48,0x20,0x78,0x44,0x22,0x50,0xC3,0x13,0xC0,0xE1,0x12,0xFE,0x7F,0x0C,0x40,0x41,0x0C,0x60,0x41,0x06,0x50,0xC6,0x4D,0x4C,0x44,0x38,0x40,0x0C,0x20,0x80,0x03,0x10,0xF0,0x0F,0x18,0x5E,0xF0,0x0C,0x44,0x80,0x07,0x40,0x80,0x07,0x40,0xFC,0x0C,0xC0,0x1F,0x18,0x40,0x00,0x30,0x40,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*"数",20*/
+{0x00,0x00,0x00,0x80,0x40,0x00,0x80,0xC0,0x20,0x80,0x40,0x20,0x80,0x20,0x60,0xFC,0xFF,0x7F,0x88,0x10,0x20,0x80,0x08,0x10,0xC0,0x08,0x0C,0x80,0x84,0x03,0xF8,0xFF,0x00,0xF8,0x09,0x00,0x88,0x88,0x7F,0x88,0x88,0x10,0x88,0x88,0x10,0x88,0x88,0x10,0x88,0xFF,0x10,0x88,0x88,0x10,0x88,0x88,0x10,0xF8,0x89,0x7F,0xF8,0x89,0x3F,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"据",21*/
+{0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x1E,0xF8,0xFF,0x03,0x00,0x11,0x00,0x00,0x11,0x00,0xFE,0x11,0x00,0xFC,0xF1,0x1F,0x00,0xF1,0x4F,0x00,0x01,0x30,0x00,0x01,0x4E,0xF0,0xFF,0x21,0x10,0x01,0x20,0x10,0x03,0x10,0x10,0x3D,0x08,0x08,0xC1,0x04,0x08,0x01,0x03,0x08,0x81,0x07,0x08,0x71,0x0C,0x0C,0x1F,0x18,0x0C,0x03,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*"版",22*/
+{0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x02,0x40,0x00,0x01,0x40,0xC0,0x02,0x40,0x60,0x02,0x40,0x38,0x02,0x40,0x0E,0x02,0xC0,0x03,0x02,0xFE,0xFF,0xFF,0xFC,0xFF,0xFF,0xC0,0x01,0x02,0x40,0x06,0x02,0x40,0x18,0x02,0x40,0x30,0x03,0x40,0xC0,0x02,0x40,0x80,0x01,0x40,0x00,0x03,0x60,0x00,0x07,0x40,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00},/*"本",23*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0xFC,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"日",24*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x20,0x20,0x80,0x10,0x20,0x80,0x08,0xFC,0xFF,0x07,0x20,0x89,0x02,0x20,0x89,0x00,0x20,0x89,0x00,0x20,0x89,0x02,0xFC,0xFF,0x44,0x20,0x80,0x2C,0x20,0x80,0x10,0x00,0x80,0x0C,0x18,0xF0,0x07,0xF8,0xFF,0x00,0x08,0x21,0x00,0x08,0x21,0x10,0x08,0x21,0x20,0x08,0x21,0x20,0xF8,0xFF,0x3F,0xF8,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00},/*"期",25*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x0F,0x10,0x04,0x02,0x10,0x04,0x02,0x10,0x04,0x02,0x10,0x04,0x02,0xF0,0xFF,0x0F,0xF0,0xFF,0x07,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x08,0x00,0x80,0x30,0x00,0x80,0x70,0x10,0x80,0x00,0x20,0x80,0x00,0x20,0x80,0x00,0x60,0xFE,0xFF,0x3F,0x84,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"时",26*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x7F,0x20,0x00,0x00,0x06,0x00,0x00,0x1C,0x00,0x00,0x18,0x00,0x00,0x80,0xFF,0x03,0x88,0x10,0x01,0x88,0x10,0x01,0x88,0x10,0x01,0x88,0x10,0x01,0x88,0x10,0x01,0x88,0xFF,0x03,0x88,0x80,0x03,0x08,0x00,0x10,0x08,0x00,0x20,0x08,0x00,0x60,0x08,0x00,0x70,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"间",27*/
+{0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x02,0x18,0x00,0x02,0x08,0xFC,0xFF,0x0F,0xFC,0xFF,0x07,0x00,0x02,0x04,0x00,0x0A,0x02,0x00,0x0A,0x02,0x00,0x04,0x02,0xF0,0xFF,0x1F,0xE0,0xFF,0x3F,0x00,0x02,0x20,0x00,0x02,0x20,0x02,0x82,0x23,0xFE,0xFF,0x23,0x00,0x81,0x20,0x80,0x80,0x20,0x80,0x80,0x21,0xC0,0xFF,0x21,0x80,0x00,0x20,0x00,0x00,0x3F,0x00,0x00,0x10,0x00,0x00,0x00},/*"地",28*/
+{0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x01,0x0C,0x00,0x01,0x04,0x00,0x01,0x04,0xFE,0xFF,0x03,0x00,0x01,0x02,0x00,0x01,0x21,0x80,0x01,0x21,0x00,0x01,0x20,0x00,0x00,0x20,0x00,0xFF,0x3F,0x00,0x01,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0xFE,0xFF,0x3F,0xFC,0xFF,0x3F,0x00,0x04,0x20,0x00,0x04,0x20,0x00,0x04,0x20,0x00,0x06,0x30,0x00,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"址",29*/
+{0x00,0x00,0x00,0x40,0x00,0x01,0x40,0xC0,0x00,0x40,0x38,0x00,0x40,0x0F,0x00,0xFE,0xFF,0x7F,0x40,0x02,0x00,0x40,0x0C,0x00,0x70,0x18,0x41,0x10,0x00,0x41,0x10,0x00,0x21,0x90,0x7F,0x21,0xFE,0x24,0x11,0xFC,0x24,0x0D,0x90,0xE4,0x07,0x90,0x64,0x01,0x90,0x24,0x07,0xFE,0x24,0x09,0x90,0x24,0x11,0x90,0x7F,0x31,0x90,0x00,0x21,0x10,0x00,0x21,0x00,0x00,0x20,0x00,0x00,0x00},/*"模",30*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x08,0x30,0x40,0x08,0x30,0x40,0x08,0x10,0x40,0x08,0x10,0x40,0x08,0x08,0x40,0xF8,0x0F,0x40,0x08,0x08,0x40,0x08,0x04,0x40,0x08,0x04,0x40,0x08,0x04,0x40,0x00,0x04,0xFE,0x01,0x00,0xFC,0x7F,0x00,0x40,0xE0,0x01,0x40,0x00,0x07,0x44,0x00,0x0C,0x58,0x00,0x18,0x78,0x00,0x30,0x60,0x00,0x30,0x40,0x00,0x7E,0x00,0x00,0x40,0x00,0x00,0x00},/*"式",31*/
+{0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x06,0x00,0x80,0x01,0x00,0xE0,0xFF,0x7F,0x3C,0x00,0x00,0x06,0x10,0x20,0x00,0x10,0x10,0x00,0x10,0x08,0xF8,0x13,0x04,0x08,0x11,0x03,0x08,0xD1,0x01,0x08,0x71,0x00,0x08,0xFF,0x7F,0x08,0x11,0x30,0x08,0x71,0x00,0x08,0x91,0x00,0x08,0x11,0x03,0xF8,0x13,0x04,0x08,0x10,0x18,0x00,0x18,0x18,0x00,0x10,0x00,0x00,0x00,0x00},/*"保",32*/
+{0x00,0x00,0x00,0x00,0x00,0x01,0x10,0x80,0x00,0x10,0x40,0x00,0x10,0x20,0x00,0x10,0x18,0x00,0x10,0xFE,0x7F,0x10,0x03,0x00,0x90,0x41,0x00,0x70,0x40,0x00,0xBE,0x40,0x00,0x94,0x40,0x00,0x90,0x40,0x20,0x90,0x40,0x20,0x90,0x40,0x60,0x90,0xF8,0x3F,0x90,0x4C,0x00,0x90,0x42,0x00,0x90,0x41,0x00,0x90,0x41,0x00,0x18,0x40,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"存",33*/
+{0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x02,0x18,0x04,0x02,0x04,0x18,0x02,0x04,0x30,0xFE,0x03,0x00,0x02,0x04,0x00,0x00,0x08,0x00,0x00,0x18,0x00,0x00,0x10,0xF8,0xFF,0x1F,0x48,0x04,0x36,0x48,0x04,0x32,0x48,0x04,0x31,0x48,0x24,0x31,0x48,0x44,0x30,0x48,0x44,0x30,0x48,0xA4,0x30,0xF8,0xA7,0x31,0x08,0x18,0x33,0x00,0x18,0x36,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00},/*"退",34*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xE0,0x8F,0x3F,0xE0,0x8F,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0xFC,0xFF,0x3F,0xF8,0xFF,0x3F,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0x00,0x08,0x20,0xE0,0x1F,0x20,0x20,0x90,0x7F,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"出",35*/
+};
 
-        case FONT_0806:
-        {
-            tmp.width = 6;
-            tmp.height = 8;
-        }
-        break;
+static inline int utf8_chrlen(uint8_t *str)
+{
+    int len=-1;
+    uint8_t t=((*str)&0x80);
 
-        case FONT_1206:
-        {
-            tmp.width = 6;
-            tmp.height = 12;
+    if(t==0) {
+        len = 1;
+    }
+    else {
+        t = ((*str)&0xf0);
+        if(t==0xc0) {
+            len = 2;
         }
-        break;
-        
-        case FONT_1608:
-        {
-            tmp.width = 8;
-            tmp.height = 16;
+        else if(t==0xe0) {
+            len = 3;
         }
-        break;
-        
-        case FONT_2412:
-        {
-            tmp.width = 12;
-            tmp.height = 24;
+        else if(t==0xf0) {
+            len = 4;
+        }
+        else {
+            len = -1;
         }
-        break;
     }
-    return tmp;
+
+    return len;
+}
+static int utf8_strlen(uint8_t *str)
+{
+    int len = 0;
+    while (*str) {
+        if ((*str & 0x80) == 0) {
+            str++;
+        } else {
+            str++;
+            while ((*str & 0xC0) == 0x80) {
+                str++;
+            }
+        }
+        len++;
+    }
+    return len;
+}
+static int is_chinese(uint8_t *c)
+{
+    if (c[0] >= 0xE0 && c[0] <= 0xEF &&
+        c[1] >= 0x80 && c[1] <= 0xBF &&
+        c[2] >= 0x80 && c[2] <= 0xBF) {
+        return 1;
+    }
+    return 0;
+}
+static int chinese_index(uint8_t *s1, uint8_t *s2)
+{
+    uint8_t *p=s1;
+    int idx=0;
+
+    int chrlen = utf8_chrlen(s2);
+    if (chrlen == 0) {
+        return -1;
+    }
+    
+    while (*p) {
+        if (memcmp(p, s2, chrlen) != 0) {
+            p += chrlen;
+            idx++;
+        } else {
+            return idx;
+        }
+    }
+ 
+    return -1;
 }
 
 
-font_data_t font_data(int font, int c)
+uint8_t* font_next(uint8_t *str)
 {
+    int len = utf8_chrlen(str);
+    if(len<=0) {
+        return (void*)0;
+    }
+    return str+len;
+}
+
+
+font_data_t font_data(int font, uint8_t* c)
+{
+    int idx,chinese=0;
     font_data_t tmp={0};
     
+    chinese = is_chinese(c);
+    if(chinese) {
+        idx = chinese_index((uint8_t*)font_chinese_str, c);
+    }
+    else {
+        idx = c[0];
+    }
+
     switch(font) {
         
-        case FONT_0806:
+        case FONT_08:
         {
-            tmp.data = (uint8_t*)font_0806[c-32];
-            tmp.dlen = 6;
+            if(!chinese) {
+                tmp.data = (uint8_t*)font_0806[idx-32];
+                tmp.dlen = 6;
+                tmp.width = 6;
+                tmp.height = 8;
+            }
         }
         break;
 
-        case FONT_1206:
+        case FONT_12:
         {
-            tmp.data = (uint8_t*)font_1206[c-32];
-            tmp.dlen = 12;
+            if(chinese) {
+                tmp.data = (uint8_t*)font_chinese_1212[idx];
+                tmp.dlen = 24;
+                tmp.width = 12;
+                tmp.height = 12;
+            }
+            else {
+                tmp.data = (uint8_t*)font_1206[idx-32];
+                tmp.dlen = 12;
+                tmp.width = 6;
+                tmp.height = 12;
+            }
         }
         break;
         
-        case FONT_1608:
+        case FONT_16:
         {
-            tmp.data = (uint8_t*)font_1608[c-32];
-            tmp.dlen = 16;
+            if(chinese) {
+                tmp.data = (uint8_t*)font_chinese_1616[idx];
+                tmp.dlen = 32;
+                tmp.width = 16;
+                tmp.height = 16;
+            }
+            else {
+                tmp.data = (uint8_t*)font_1608[idx-32];
+                tmp.dlen = 16;
+                tmp.width = 8;
+                tmp.height = 16;
+            }
         }
         break;
         
-        case FONT_2412:
+        case FONT_24:
         {
-            tmp.data = (uint8_t*)font_2412[c-32];
-            tmp.dlen = 36;
+            if(chinese) {
+                tmp.data = (uint8_t*)font_chinese_2424[idx];
+                tmp.dlen = 72;
+                tmp.width = 24;
+                tmp.height = 24;
+            }
+            else {
+                tmp.data = (uint8_t*)font_2412[idx-32];
+                tmp.dlen = 36;
+                tmp.width = 12;
+                tmp.height = 24;
+            }
         }
         break;
     }

+ 7 - 9
pro/ui/font.h

@@ -4,27 +4,25 @@
 #include <stdint.h>
 
 enum {
-    FONT_0806=0,
-    FONT_1206,
-    FONT_1608,
-    FONT_2412,
+    FONT_08=0,
+    FONT_12,
+    FONT_16,
+    FONT_24,
     
     FONT_MAX
 };
 
+
 typedef struct {
     uint8_t width;
     uint8_t height;
-}font_info_t;
-
-typedef struct {
     uint8_t *data;
     uint32_t dlen;
 }font_data_t;
 
 
-font_info_t font_info(int font);
-font_data_t font_data(int font, int c);
+uint8_t* font_next(uint8_t *str);
+font_data_t font_data(int font, uint8_t* c);
 
 #endif
 

+ 90 - 0
pro/ui/key.c

@@ -0,0 +1,90 @@
+#include "key"
+#include "gpio.h"
+#include "elog.h"
+
+
+#if 1
+    #define LOGD  log_d
+    #define LOGE  log_e
+#else
+    #define LOGD  printf
+    #define LOGE  printf
+#endif
+
+
+#define K1_GPIO             101
+#define K2_GPIO             102
+#define K3_GPIO             103
+
+typedef struct {
+    int      gpio;
+    uint16_t key;
+    uint8_t  active_level;
+}io_info_t;
+static io_info_t io_info[USER_KEY_MAX]={
+    {K1_GPIO, KEY_LEFT,  PRESS_LEVEL},
+    {K2_GPIO, KEY_OK,    PRESS_LEVEL}, 
+    {K3_GPIO, KEY_RIGHT, PRESS_LEVEL};
+};
+typedef struct {
+    int tp;
+    int key;
+    int up;         //0: release  1: press
+    uint64_t ms;
+}key_info_t;
+typedef struct {
+    int        fd;
+    key_info_t k1;
+    key_info_t k2;
+}key_data_t;
+typedef struct {
+    key_data_t key[USER_KEY_MAX];
+}key_handle_t;
+static key_handle_t keyHandle={0};
+
+static uint64_t get_ms(void)
+{
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    return (uint64_t)(tv.tv_sec)*1000 + (uint64_t)(tv.tv_usec)/1000;
+}
+
+static int key_init(key_handle_t *h)
+{
+    int i;
+    for(i=0; i<USER_KEY_MAX; i++) {
+        h->key[i].fd = gpio_init(io_info[i].gpio, GPIO_IN);
+    }
+    return (h->fd<0)?-1:0;
+}
+static int key_deinit(key_handle_t *h)
+{
+    int i;
+    for(i=0; i<USER_KEY_MAX; i++) {
+        gpio_deinit(h->key[i].fd);
+    }
+    return 0;
+}
+static int key_get(key_handle_t *h, key_data_t *k)
+{
+    int r;
+    struct input_event event;
+    
+    r = read(h->fd, &event, sizeof(event));
+    if(r<0) {
+        return -1;
+    }
+    
+    printf("_____ evt.type: %d, value: %d, code: %d\n", event.type, event.value, event.code);
+    switch (event.type) {
+        case EV_KEY:
+        {
+            k->tp = event.type;
+            k->up = (event.value==0)?1:0;
+            k->key = event.code;
+        }
+        break;
+    }
+    
+    return 0;
+}

+ 16 - 0
pro/ui/key.h

@@ -0,0 +1,16 @@
+#ifndef __KEY_Hx__
+#define __KEY_Hx__
+
+#include <sys/time.h>
+#include <linux/input.h>
+
+#define USER_KEY_MAX        3
+#define KEY_LONG_TIME       500
+#define KEY_PRESS_LEVEL     0
+
+int gpio_init(int gpio, int io);
+int gpio_deinit(int fd);
+int gpio_set(int fd, int hl);
+int gpio_get(int fd);
+
+#endif

+ 18 - 73
pro/ui/lcd.c

@@ -14,6 +14,9 @@
 
 //#define USE_FB
 
+#define BK_GPIO             98      //PD2
+#define DC_GPIO             99      //PD3, 96+3=99
+#define RST_GPIO            100     //PD4, 96+4=100
 
 #if 1
     #define LOGD  log_d
@@ -32,8 +35,6 @@
     typedef struct fb_var_screeninfo fb_vinfo_t;
 #else
     #define DEV_PATH        "/dev/spidev1.0"
-    #define DC_GPIO         99      //PD3, 96+3=99
-    #define RST_GPIO        100     //PD4, 96+4=100
 #endif
 
 
@@ -400,11 +401,10 @@ void lcd_refresh(void)
 }
 
 
-void lcd_draw_char(lcd_handle_t *hd, int x, int y, int w, int h, int c, int font, int color, int bgcolor)
+int lcd_draw_char(lcd_handle_t *hd, int x, int y, int w, int h, uint8_t *c, int font, int color, int bgcolor, int vert)
 {
     uint8_t tmp;
     font_data_t fdata;
-    font_info_t finfo=font_info(font);
     int i,j,x0=x,y0=y,x1=x+w,y1=y+h;
     
     fdata = font_data(font, c);
@@ -425,94 +425,39 @@ void lcd_draw_char(lcd_handle_t *hd, int x, int y, int w, int h, int c, int font
         }
         
 #if 0
-        if((y-y0)>=finfo.height) {
+        if((y-y0)>=fdata.height) {
             x++;
             y = y0;
         }
 #else
         x++;
-        if((font!=FONT_0806) && ((x-x0)>=finfo.width)) {
+        if((font!=FONT_08) && ((x-x0)>=fdata.width)) {
             x = x0;
             y0 += 8;
         }
         y = y0;
 #endif
     }
-}
-
-
-static void draw_string(lcd_handle_t *hd, int x, int y, int w, int h, char *str, int font, int color, int bgcolor)
-{
-    char *pstr=str;
-    int xmax,ymax,w2;
-    font_info_t finfo=font_info(font);
-    
-    w2 = finfo.width;
-    xmax = x+w; ymax = y+h;
-    while((*pstr<='~') && (*pstr>=' '))  {      /* 判断是不是非法字符! */
-        if(x >= xmax) {
-            break;
-        }
-        
-        if(x+finfo.width>=xmax) {
-            w2 = xmax-x;
-        }
 
-        lcd_draw_char(hd, x, y, w2, h, *pstr, font, color, bgcolor);
-        x += finfo.width;
-        pstr++;
-    }  
+    return fdata.width;
 }
 
 
-
 void lcd_draw_string(int x, int y, int w, int h, char *str, int font, int color, int bgcolor, int hori, int vert)
 {
-    int  sw;
-    lcd_rect_t rect;
+    int r,xmax=x+w;
+    uint8_t *pstr=(uint8_t*)str;
     lcd_handle_t *h2=&lcdHandle;
-    font_info_t finfo=font_info(font);
-    
-    sw = strlen((char*)str)*finfo.width;
-    if(sw>w) {
-        sw = w;
-    }
-    
-    if(hori==HORIZONTAL_LEFT) {
-        rect.x = x;
-    }
-    else if(hori==HORIZONTAL_RIGHT) {
-        rect.x = x+w-sw;
-    }
-    else if(hori==HORIZONTAL_CENTER) {
-        rect.x = x+(w-sw)/2;
-    }
-    else {
-        return;
-    }
-    
-    if(vert==VERTICAL_TOP) {
-        rect.y = y;
-    }
-    else if(vert==VERTICAL_BOTTOM) {
-        rect.y = y+h-finfo.height;
-    }
-    else if(vert==VERTICAL_CENTER) {
-        rect.y = y+(h-finfo.height)/2;
-    }
-    else {
-        return;
-    }
-    rect.h = finfo.height;
-    
-    if(rect.x+sw>=h2->width) {
-        rect.w = h2->width-rect.x;
-    }
-    else {
-        rect.w = sw;
+
+    while(*pstr)  {      /* 判断是不是非法字符! */
+
+        r = lcd_draw_char(h2, x, y, w, h, pstr, font, color, bgcolor, vert);
+        x += r;
+        pstr = font_next(pstr);
+        if(!pstr || x>=xmax) {
+            break;
+        }
     }
-    
-    draw_string(h2, rect.x, rect.y, rect.w, rect.h, str, font, color, bgcolor);
 }
 
 

+ 21 - 0
pro/ui/led.c

@@ -0,0 +1,21 @@
+#include "led.h"
+#include "gpio.h"
+#include "elog.h"
+#include "common.h"
+
+#if 1
+    #define LOGD  log_d
+    #define LOGE  log_e
+#else
+    #define LOGD  printf
+    #define LOGE  printf
+#endif
+
+
+typedef struct {
+             //0: release  1: press
+    uint64_t ms;
+}led_info_t;
+
+
+

+ 17 - 0
pro/ui/led.h

@@ -0,0 +1,17 @@
+#ifndef __LED_Hx__
+#define __LED_Hx__
+
+typedef struct {
+    int on_ms;
+    int off_ms;
+    int times;
+}led_para_t;
+
+
+int led_init(void);
+int led_deinit(void);
+
+int led_set(led_para_t *red, led_para_t *green);
+
+
+#endif

+ 17 - 53
pro/ui/ui.c

@@ -1,10 +1,9 @@
 #include "ui.h"
 #include "lcd.h"
-#include "gpio.h"
+#include "key.h"
+#include "beep.h"
 #include "thread.h"
-#include <fcntl.h>
-#include <unistd.h>
-#include <linux/input.h>
+
 
 #if 1
     #define LOGD  log_d
@@ -14,67 +13,33 @@
     #define LOGE  printf
 #endif
 
-typedef struct {
-    int tp;
-    int key;
-    int up;         //0: release  1: press
-}key_data_t;
+
 
 typedef struct {
     int fd;
+    
 }ui_handle_t;
 static ui_handle_t uiHandle={0};
 
 
-static int key_init(ui_handle_t *h)
-{
-    h->fd = open("/dev/input/event0", O_RDWR, 0);
-    return (h->fd<0)?-1:0;
-}
-static int key_deinit(ui_handle_t *h)
-{
-    close(h->fd);
-    return 0;
-}
-static int key_get(ui_handle_t *h, key_data_t *k)
-{
-    int r;
-    struct input_event event;
-    
-    r = read(h->fd, &event, sizeof(event));
-    if(r<0) {
-        return -1;
-    }
-    
-    printf("_____ evt.type: %d, value: %d, code: %d\n", event.type, event.value, event.code);
-    switch (event.type) {
-        case EV_KEY:
-        {
-            k->tp = event.type;
-            k->up = (event.value==0)?1:0;
-            k->key = event.code;
-        }
-        break;
-    }
-    
-    return 0;
-}
+
 static int menu_init(ui_handle_t *h)
 { 
-    key_init(h);
+    //key_init(h);
     lcd_init(LCD_WIDTH,LCD_HEIGHT,LCD_COLOR);
     
     lcd_fill(0);
-    //lcd_draw_string(10, 10,  80, 30, "Smart; Hello!", FONT_0806, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
-    //lcd_draw_string(10, 30,  80, 30, "Voltage: 22.4V", FONT_0806, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
-    lcd_draw_string(10, 30, 80, 30, "Voltage: 22.4V", FONT_1206, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    //lcd_draw_string(10, 10,  80, 30, "Smart 123456789", FONT_08, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    lcd_draw_string(10, 10,  80, 30, "输出: 12.0V", FONT_12, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    //lcd_draw_string(10, 40,  80, 30, "输出入通道: 12.0V", FONT_16, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    //lcd_draw_string(10, 30, 80, 30, "Voltage: 22.4V", FONT_12, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
     lcd_refresh();
     
     return 0;
 }
 static int menu_deinit(ui_handle_t *h)
 {
-    key_deinit(h);
+    //key_deinit(h);
     lcd_deinit();
     
     return 0;
@@ -82,14 +47,13 @@ static int menu_deinit(ui_handle_t *h)
 static int menu_handle(ui_handle_t *h)
 {
     int r;
-    key_data_t kd;
     
-    r = key_get(h, &kd);
+    //r = key_get(h, &kd);
     if(r==0) {
-        switch(kd.key) {
-            case KEY_LEFT:
-            break;
-        }
+        //switch(kd.key) {
+        //    case KEY_LEFT:
+        //    break;
+        //}
     }
     
     return 0;