【沁恒微CH32V307评估板试用体验】u8g2移植,点亮SSD1306屏,SW IIC接口 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

刘泽文 关注 私信
[文章]

【沁恒微CH32V307评估板试用体验】u8g2移植,点亮SSD1306屏,SW IIC接口

声明:本次使用软件IIC(就是使用IO口翻动来模拟IIC协议),因此不使用硬件IIC的任何函数及接口,选用I2C1接口是为了下一篇文章硬件IIC驱动时不用重新接线。

0. 前言

本次u8g2的移植应用于所有单色屏,对标于彩屏的lvgl库,只不过,u8g2多了屏幕的驱动部分,而lvgl库只是GUI库,不包含屏幕底层驱动部分。因此,两个相差不是很大,移植,也只是简单移植所有接口,使得u8g2库能调用当前MCU的IO口,官方的移植文档可参考wiki

1.沁恒官网下载IO口描述:

CH32V307手册下载地址

本次我们驱动IIC接口的SSD1306屏幕,需要使用CH32V307的I2C1接口。从手册中可以看到,I2C1接口的对应关系如下,请按照下表接线:

CH32V307接口 IO功能 SSD1306屏幕接口
GND GND
VCC 3.3V VCC
PB6 I2C1-SCL SCL
PB7 I2C1-SDA SDA

接线后如图:

接线.jpg

2.u8g2下载链接

github链接 下载命令git clone https://github.com/olikraus/u8g2.git

gitee链接 下载命令git clone https://gitee.com/liuzewen/u8g2.git

从上面挑选一个链接下载代码,代码结构如下:

u8g2-dir-source-code.png

我们本次只使用csrc目录下的源码。

3. 开始移植

3.1 首先,我们下载评估板的例程:链接,将其解压,并复制GPIO的例子,命名为U8g2,也可不修改,如图:

复制GPIO项目.png

3.2 复制完成后,打开U8g2目录,将里面的文件夹命名为U8g2-ssd1306,也可不修改,如图:

修改u8g2项目名.png

3.3 在U8g2-ssd1306项目下新建u8g2目录,并将我们下载的u8g2/csrc下的所有文件拷贝进新建的u8g2目录,操作如图:

拷贝u8g2源码.png

3.4 接着使用MounRiver Studio IDE打开此项目,并点击项目属性,如图:

项目属性.png

在里面添加/${ProjName}/u8g2目录,如图:

添加u8g2编译目录.png

应用后,你的目录里面就会多出我们刚才新建的u8g2目录啦

3.5 移植u8g2的接口部分
  • 添加头文件:

#include "u8g2.h"

  • 例化一个u8g2驱动:

u8g2_t u8g2;

  • 初始化接口,当屏幕刷新时,CH32_gpio_and_delay函数会被调用,在此函数中,你可以控制CH32V307的IO口翻动:

u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, CH32_gpio_and_delay);

  • CH32_gpio_and_delay函数如下:
uint8_t CH32_gpio_and_delay(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr) { switch (msg) { case U8X8_MSG_DELAY_100NANO: // delay arg_int * 100 nano seconds __NOP(); break; case U8X8_MSG_DELAY_10MICRO: // delay arg_int * 10 micro seconds for (uint16_t n = 0; n < 320; n++) { __NOP(); } break; case U8X8_MSG_DELAY_MILLI: // delay arg_int * 1 milli second Delay_Ms(1); break; case U8X8_MSG_DELAY_I2C: // arg_int is the I2C speed in 100KHz, e.g. 4 = // 400 KHz delay_us(5); break; // arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us case U8X8_MSG_GPIO_I2C_CLOCK: // arg_int=0: Output low at I2C clock pin if (arg_int == 1) // arg_int=1: Input dir with pullup high for I2C clock pin GPIO_WriteBit(GPIOB, SCL_Pin, 1); else if (arg_int == 0) GPIO_WriteBit(GPIOB, SCL_Pin, 0); break; case U8X8_MSG_GPIO_I2C_DATA: // arg_int=0: Output low at I2C data pin if (arg_int == 1) // arg_int=1: Input dir with pullup high for I2C data pin GPIO_WriteBit(GPIOB, SDA_Pin, 1); else if (arg_int == 0) GPIO_WriteBit(GPIOB, SDA_Pin, 0); break; case U8X8_MSG_GPIO_MENU_SELECT: u8x8_SetGPIOResult(u8x8, /* get menu select pin state */ 0); break; case U8X8_MSG_GPIO_MENU_NEXT: u8x8_SetGPIOResult(u8x8, /* get menu next pin state */ 0); break; case U8X8_MSG_GPIO_MENU_PREV: u8x8_SetGPIOResult(u8x8, /* get menu prev pin state */ 0); break; case U8X8_MSG_GPIO_MENU_HOME: u8x8_SetGPIOResult(u8x8, /* get menu home pin state */ 0); break; default: u8x8_SetGPIOResult(u8x8, 1); // default return value break; } return 1; }

4. 最后,附上工程的代码:

5. 效果图:

使用的图片数组为工具转化,请参考我另一篇文章:【《Arduino》开发 之 用 u8g2 库 给 0.96寸OLED 刷bmp图片,OLED图片取模】

效果图.gif

6. 总结:

本次粗略用u8g2点亮了SSD1306的屏幕,但是,使用的SW IIC接口实现不了高刷新率,下次,我们采用HW IIC来驱动,相信效果一定会更赞。

回帖(1)

刘泽文

2022-7-2 18:19:09
  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name          : main.c
  3. * Author             : WCH
  4. * Version            : V1.0.0
  5. * Date               : 2021/06/06
  6. * Description        : Main program body.
  7. * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
  8. * SPDX-License-Identifier: Apache-2.0
  9. *******************************************************************************/

  10. /*
  11. *@Note
  12. GPIO例程:
  13. PA0推挽输出。

  14. */

  15. #include "debug.h"
  16. #include "u8g2.h"

  17. /* Global define */
  18. void delay_us(uint32_t time);
  19. uint8_t CH32_gpio_and_delay(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr);
  20. /* Global Variable */

  21. #define SCL_Pin GPIO_Pin_6
  22. #define SDA_Pin GPIO_Pin_7

  23. //爱心眼睛
  24. const static unsigned char FACE_Love[] = {
  25.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  26.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  27.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  28.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  29.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  30.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  31.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  32.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  33.     0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00,
  34.     0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
  35.     0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
  36.     0xC0, 0x07, 0x00, 0x00, 0x1F, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0x00,
  37.     0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0x00,
  38.     0xE0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00,
  39.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00,
  40.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  41.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  42.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  43.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  44.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  45.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  46.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  47.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  48.     0x38, 0xE0, 0x07, 0x3F, 0xE0, 0x00, 0x0C, 0xF0, 0x81, 0x0F, 0x30, 0x00,
  49.     0x38, 0xF0, 0x8B, 0x5F, 0xE0, 0x00, 0x0C, 0xF8, 0xC2, 0x1F, 0x30, 0x00,
  50.     0x38, 0xF8, 0xD7, 0xBF, 0xE0, 0x00, 0x0C, 0xFC, 0xE5, 0x2F, 0x30, 0x00,
  51.     0x38, 0xF8, 0xFF, 0xBF, 0xE0, 0x00, 0x0C, 0xFE, 0xFF, 0x5F, 0x30, 0x00,
  52.     0x38, 0xFC, 0xFF, 0x7F, 0xE0, 0x00, 0x0C, 0xFE, 0xFF, 0x5F, 0x30, 0x00,
  53.     0x38, 0xFC, 0xFF, 0xFF, 0xE1, 0x00, 0x0C, 0xFE, 0xFF, 0x7F, 0x30, 0x00,
  54.     0x38, 0xFC, 0xFF, 0xFF, 0xE1, 0x00, 0x0C, 0xFE, 0xFF, 0x7F, 0x30, 0x00,
  55.     0x38, 0xFC, 0xFF, 0xFF, 0xE1, 0x00, 0x0C, 0xFE, 0xFF, 0x7F, 0x30, 0x00,
  56.     0x38, 0xF8, 0xFF, 0xFF, 0xE0, 0x00, 0x0C, 0xFE, 0xFF, 0x7F, 0x30, 0x00,
  57.     0x38, 0xF8, 0xFF, 0xFF, 0xE0, 0x00, 0x0C, 0xFE, 0xFF, 0x7F, 0x30, 0x00,
  58.     0x38, 0xF8, 0xFF, 0xFF, 0xE0, 0x00, 0x0C, 0xFC, 0xFF, 0x3F, 0x30, 0x00,
  59.     0x38, 0xF0, 0xFF, 0x7F, 0xE0, 0x00, 0x0C, 0xF8, 0xFF, 0x1F, 0x30, 0x00,
  60.     0x38, 0xC0, 0xFF, 0x1F, 0xE0, 0x00, 0x0C, 0xF0, 0xFF, 0x0F, 0x30, 0x00,
  61.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xE0, 0xFF, 0x07, 0x30, 0x00,
  62.     0x38, 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x0C, 0xC0, 0xFF, 0x03, 0x30, 0x00,
  63.     0x38, 0x00, 0xFE, 0x03, 0xE0, 0x00, 0x0C, 0x80, 0xFF, 0x01, 0x30, 0x00,
  64.     0x38, 0x00, 0xFC, 0x01, 0xE0, 0x00, 0x0C, 0x00, 0x7E, 0x00, 0x30, 0x00,
  65.     0x38, 0x00, 0xF8, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0x30, 0x00,
  66.     0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00,
  67.     0x38, 0x00, 0x20, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  68.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  69.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  70.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  71.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  72.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  73.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x00,
  74.     0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00,
  75.     0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00,
  76.     0xC0, 0x03, 0x00, 0x00, 0x1E, 0x00, 0xF0, 0x01, 0x00, 0x80, 0x0F, 0x00,
  77.     0x80, 0x1F, 0x00, 0xC0, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0xE0, 0x07, 0x00,
  78.     0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
  79.     0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
  80.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  81.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  82.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  84.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  85.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  86.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  87.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  89. };
  90. //睁眼
  91. const static unsigned char FACE_Neutral[] = {
  92.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  93.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  94.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  95.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  96.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  97.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  98.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  99.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  100.     0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00,
  101.     0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
  102.     0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
  103.     0xC0, 0x07, 0x00, 0x00, 0x1F, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0x00,
  104.     0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0x00,
  105.     0xE0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00,
  106.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00,
  107.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  108.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  109.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  110.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  111.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  112.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  113.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  114.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  115.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  116.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  117.     0x38, 0x00, 0x84, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x41, 0x00, 0x30, 0x00,
  118.     0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x38, 0x01, 0x30, 0x00,
  119.     0x38, 0x00, 0xFC, 0x01, 0xE0, 0x00, 0x0C, 0x00, 0x7F, 0x00, 0x30, 0x00,
  120.     0x38, 0x00, 0xFE, 0x03, 0xE0, 0x00, 0x0C, 0xA0, 0xFF, 0x05, 0x30, 0x00,
  121.     0x38, 0x00, 0x7F, 0x06, 0xE0, 0x00, 0x0C, 0x80, 0x3F, 0x01, 0x30, 0x00,
  122.     0x38, 0x40, 0x7F, 0x17, 0xE0, 0x00, 0x0C, 0xC0, 0xDF, 0x03, 0x30, 0x00,
  123.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xD0, 0xFF, 0x0B, 0x30, 0x00,
  124.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xC0, 0xFF, 0x03, 0x30, 0x00,
  125.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xD0, 0xFF, 0x0B, 0x30, 0x00,
  126.     0x38, 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x0C, 0xC0, 0xFF, 0x03, 0x30, 0x00,
  127.     0x38, 0x40, 0xFF, 0x17, 0xE0, 0x00, 0x0C, 0x80, 0xFF, 0x01, 0x30, 0x00,
  128.     0x38, 0x00, 0xFE, 0x03, 0xE0, 0x00, 0x0C, 0xA0, 0xFF, 0x05, 0x30, 0x00,
  129.     0x38, 0x00, 0xFC, 0x01, 0xE0, 0x00, 0x0C, 0x00, 0xFF, 0x00, 0x30, 0x00,
  130.     0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0x0C, 0x80, 0x3C, 0x01, 0x30, 0x00,
  131.     0x38, 0x00, 0x84, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x42, 0x00, 0x30, 0x00,
  132.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  133.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  134.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  135.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  136.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  137.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  138.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  139.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  140.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x00,
  141.     0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00,
  142.     0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00,
  143.     0xC0, 0x03, 0x00, 0x00, 0x1E, 0x00, 0xF0, 0x01, 0x00, 0x80, 0x0F, 0x00,
  144.     0x80, 0x1F, 0x00, 0xC0, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0xE0, 0x07, 0x00,
  145.     0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
  146.     0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
  147.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  148.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  149.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  150.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  151.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  152.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  153.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  154.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  155.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  156. };
  157. //闭眼
  158. const static unsigned char FACE_Tired_middle[] = {
  159.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  160.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  161.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  162.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  163.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  164.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  165.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  166.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  167.     0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00,
  168.     0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
  169.     0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
  170.     0xC0, 0x07, 0x00, 0x00, 0x1F, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x07, 0x00,
  171.     0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0x00,
  172.     0xE0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00,
  173.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00,
  174.     0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  175.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  176.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00,
  177.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  178.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  179.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  180.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  181.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  182.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  183.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  184.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  185.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  186.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  187.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  188.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  189.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  190.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  191.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  192.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  193.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  194.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  195.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x30, 0x00,
  196.     0x38, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x38, 0x00,
  197.     0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00,
  198.     0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00,
  199.     0x38, 0x40, 0xFF, 0x17, 0xE0, 0x00, 0x1C, 0xD0, 0xDF, 0x0B, 0x38, 0x00,
  200.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xC0, 0xFF, 0x0B, 0x30, 0x00,
  201.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xD0, 0xFF, 0x03, 0x30, 0x00,
  202.     0x38, 0x80, 0xFF, 0x0F, 0xE0, 0x00, 0x0C, 0xD0, 0xFF, 0x0B, 0x30, 0x00,
  203.     0x38, 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x0C, 0xC0, 0xFF, 0x03, 0x30, 0x00,
  204.     0x38, 0x40, 0xFF, 0x17, 0xE0, 0x00, 0x0C, 0x80, 0xFF, 0x01, 0x30, 0x00,
  205.     0x38, 0x00, 0xFE, 0x03, 0xE0, 0x00, 0x1C, 0xA0, 0xFF, 0x05, 0x38, 0x00,
  206.     0x70, 0x00, 0xFC, 0x01, 0x70, 0x00, 0x1C, 0x00, 0xFF, 0x00, 0x38, 0x00,
  207.     0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x3C, 0x80, 0x3C, 0x01, 0x3C, 0x00,
  208.     0xF0, 0x00, 0x84, 0x00, 0x78, 0x00, 0x38, 0x00, 0x42, 0x00, 0x1C, 0x00,
  209.     0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00,
  210.     0xC0, 0x03, 0x00, 0x00, 0x1E, 0x00, 0xF0, 0x01, 0x00, 0x80, 0x0F, 0x00,
  211.     0x80, 0x1F, 0x00, 0xC0, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0xE0, 0x07, 0x00,
  212.     0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
  213.     0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
  214.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  215.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  216.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  217.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  218.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  219.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  220.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  221.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  222.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  223. };

  224. #define bitmap_width 64
  225. #define bitmap_height 16
  226. static unsigned char bitmap[] = {
  227.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  228.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  229.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  230.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  231.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  232.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  233.     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
  234.     0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  235.     0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
  236.     0x00, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
  237.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  238.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
  239.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  240.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
  241.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  242.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  243.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  244.     0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  245.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  246.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
  247.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  248.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  249.     0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
  250.     0x07, 0xE0, 0xFF, 0x0F, 0x80, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
  251.     0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0xFF, 0x8F, 0x83, 0xFE, 0x3F, 0x00,
  252.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x38, 0xE3, 0x8D,
  253.     0x83, 0x8E, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
  254.     0x0F, 0x38, 0xE3, 0x8D, 0x83, 0x8E, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
  255.     0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0xE3, 0x9D, 0xC3, 0x80, 0x3F, 0x00,
  256.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0xFF, 0x9D,
  257.     0xC3, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  258.     0x00, 0x7C, 0xFF, 0x18, 0xC3, 0x8E, 0x38, 0x00, 0x00, 0x80, 0x00, 0x00,
  259.     0x00, 0x00, 0x00, 0x02, 0x0E, 0x1C, 0xE0, 0x1F, 0xC3, 0x8E, 0x38, 0x00,
  260.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x1C, 0xE0, 0x1F,
  261.     0xC3, 0x8E, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  262.     0x0F, 0xFC, 0xE0, 0x38, 0xE3, 0xFC, 0x3F, 0x84, 0x00, 0x00, 0x00, 0x00,
  263.     0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0xE0, 0x38, 0xE0, 0xF8, 0x3F, 0x80,
  264.     0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  265.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  266.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  267.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  268.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  269.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  270.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
  271.     0x00, 0x00, 0x03, 0x87, 0x39, 0xC7, 0x1F, 0x07, 0xF8, 0x7E, 0x3F, 0x83,
  272.     0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x39, 0xC7, 0x1F, 0x07,
  273.     0xFC, 0x7E, 0x3F, 0xC7, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87,
  274.     0xB9, 0xC7, 0x1B, 0x07, 0x1C, 0x70, 0x39, 0xC7, 0x1C, 0x00, 0x00, 0x00,
  275.     0x00, 0x08, 0x03, 0x87, 0xB8, 0xEE, 0x1B, 0x07, 0x1C, 0x70, 0x39, 0xC7,
  276.     0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0xB8, 0xEE, 0x3B, 0x87,
  277.     0x1C, 0x7E, 0x3F, 0xC3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87,
  278.     0xF8, 0xEE, 0x3B, 0x87, 0x1C, 0x7E, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x00,
  279.     0x00, 0x00, 0x03, 0x87, 0x78, 0xEE, 0x31, 0x87, 0x1C, 0x70, 0x39, 0xC0,
  280.     0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x78, 0xEE, 0x3F, 0x87,
  281.     0x1C, 0x70, 0x39, 0xC7, 0x0E, 0x00, 0x00, 0x08, 0x08, 0x00, 0x03, 0x87,
  282.     0x78, 0xEE, 0x3F, 0x87, 0x1C, 0x70, 0x39, 0xC7, 0x0E, 0x00, 0x00, 0x00,
  283.     0x00, 0x00, 0x03, 0x87, 0x38, 0x7C, 0x71, 0xC7, 0xFC, 0x7F, 0x39, 0xC7,
  284.     0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x87, 0x38, 0x7C, 0x71, 0xC7,
  285.     0xF8, 0x7F, 0x39, 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  286.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  287.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  288.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  289.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  290.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  291.     0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
  292.     0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x02, 0x08, 0x00, 0x00,
  293.     0x08, 0x20, 0x0F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0,
  294.     0x01, 0x10, 0x00, 0xE0, 0x04, 0x40, 0x1F, 0x80, 0x38, 0x00, 0x00, 0x00,
  295.     0x00, 0x80, 0x06, 0xD8, 0x03, 0xF8, 0x01, 0xF0, 0x0F, 0xE0, 0x36, 0xC0,
  296.     0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x07, 0xFC, 0x02, 0x48,
  297.     0x1F, 0xF0, 0x3F, 0xC0, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8,
  298.     0x0E, 0xEE, 0x03, 0xF8, 0x3B, 0xB8, 0x3F, 0xC0, 0xFE, 0x00, 0x00, 0x00,
  299.     0x00, 0x00, 0x01, 0x20, 0x0B, 0xFA, 0x01, 0x50, 0x2F, 0xE8, 0x09, 0x00,
  300.     0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xD0, 0x09, 0x12, 0x02, 0xA8,
  301.     0x24, 0x48, 0x16, 0x80, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x28,
  302.     0x03, 0x18, 0x00, 0x00, 0x0C, 0x60, 0x29, 0x40, 0x00, 0x00, 0x00, 0x00,
  303.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  304.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  305.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
  306.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  307.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  308.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
  309.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
  310.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  311.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  312.     0x00, 0x00, 0x00, 0x00
  313. };

  314. /*********************************************************************
  315. * @fn      GPIO_Toggle_INIT
  316. *
  317. * [url=home.php?mod=space&uid=2666770]@Brief[/url]   Initializes GPIOA.0
  318. *
  319. * [url=home.php?mod=space&uid=1141835]@Return[/url]  none
  320. */
  321. void GPIO_Toggle_INIT(void)
  322. {
  323.     GPIO_InitTypeDef GPIO_InitStructure = {0};

  324.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  325.     GPIO_InitStructure.GPIO_Pin = SCL_Pin|SDA_Pin;
  326.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  327.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  328.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  329. }

  330. /*********************************************************************
  331. * @fn      main
  332. *
  333. * @brief   Main program.
  334. *
  335. * @return  none
  336. */
  337. int main(void)
  338. {
  339.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  340.     Delay_Init();
  341.     USART_Printf_Init(115200);
  342.     printf("SystemClk:%drn", SystemCoreClock);

  343.     printf("GPIO Toggle TESTrn");
  344.     GPIO_Toggle_INIT();

  345.     u8g2_t u8g2; // a structure which will contain all the data for one display
  346.     u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, CH32_gpio_and_delay); // init u8g2 structure
  347.     u8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in
  348.     // sleep mode after this,
  349.     u8g2_SetPowerSave(&u8g2, 0);

  350.     u8g2_FirstPage(&u8g2);
  351.     do {
  352.         u8g2_DrawXBMP(&u8g2, 20, 0, 89, 64, FACE_Neutral);
  353.     } while (u8g2_NextPage(&u8g2));
  354.     Delay_Ms(400);
  355.     u8g2_FirstPage(&u8g2);
  356.     do {
  357.         u8g2_DrawXBMP(&u8g2, 20, 0, 89, 64, FACE_Tired_middle);
  358.     } while (u8g2_NextPage(&u8g2));
  359.     Delay_Ms(100);
  360.     u8g2_FirstPage(&u8g2);
  361.     do {
  362.         u8g2_DrawXBMP(&u8g2, 20, 0, 89, 64, FACE_Neutral);
  363.     } while (u8g2_NextPage(&u8g2));
  364.     Delay_Ms(400);
  365.     u8g2_FirstPage(&u8g2);
  366.     do {
  367.         u8g2_DrawXBMP(&u8g2, 20, 0, 89, 64, FACE_Tired_middle);
  368.     } while (u8g2_NextPage(&u8g2));
  369.     Delay_Ms(100);
  370.     u8g2_FirstPage(&u8g2);
  371.     do {
  372.         u8g2_DrawXBMP(&u8g2, 20, 0, 89, 64, FACE_Neutral);
  373.     } while (u8g2_NextPage(&u8g2));
  374.     Delay_Ms(400);
  375.     u8g2_FirstPage(&u8g2);
  376.     do {
  377.         u8g2_DrawXBMP(&u8g2, 20, 0, 89, 64, FACE_Love);
  378.     } while (u8g2_NextPage(&u8g2));
  379.     Delay_Ms(1000);

  380.     u8g2_FirstPage(&u8g2);

  381.     do {
  382.         u8g2_ClearBuffer(&u8g2);
  383.         u8g2_SetDrawColor(&u8g2, 1);
  384.         u8g2_SetBitmapMode(&u8g2, 1);
  385.         u8g2_DrawBitmap(&u8g2, 0, 0, bitmap_height, bitmap_width, bitmap);
  386.     } while (u8g2_NextPage(&u8g2));

  387.     while(1)
  388.     {
  389.         static int x = 30, y = 10;
  390.         u8g2_ClearBuffer(&u8g2);
  391. //        u8g2_SetFont(&u8g2, u8g2_font_wqy16_t_chinese1);
  392.         u8g2_SetFont(&u8g2, u8g2_font_9x18B_mf);

  393.         u8g2_DrawCircle(&u8g2, 64, 32, 30, U8G2_DRAW_ALL);
  394.         u8g2_DrawCircle(&u8g2, 32, 32, 30, U8G2_DRAW_ALL);
  395.         u8g2_DrawCircle(&u8g2, 96, 32, 30, U8G2_DRAW_ALL);

  396.         u8g2_DrawStr(&u8g2, x, y, "liuzewen");
  397.         if (x >= 70) {
  398.             x = y = 0;
  399.         } else {
  400.             x++;
  401.             y++;
  402.         }

  403.         u8g2_SendBuffer(&u8g2);
  404.     }
  405. }

  406. /* USER CODE BEGIN 4 */
  407. void delay_us(uint32_t time)
  408. {
  409.     uint32_t i = 8 * time;
  410.     while (i--)
  411.         ;
  412. }

  413. uint8_t CH32_gpio_and_delay(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr)
  414. {
  415.     switch (msg) {
  416.     case U8X8_MSG_DELAY_100NANO: // delay arg_int * 100 nano seconds
  417.         __NOP();
  418.         break;
  419.     case U8X8_MSG_DELAY_10MICRO: // delay arg_int * 10 micro seconds
  420.         for (uint16_t n = 0; n < 320; n++) {
  421.             __NOP();
  422.         }
  423.         break;
  424.     case U8X8_MSG_DELAY_MILLI: // delay arg_int * 1 milli second
  425.         Delay_Ms(1);
  426.         break;
  427.     case U8X8_MSG_DELAY_I2C: // arg_int is the I2C speed in 100KHz, e.g. 4 =
  428.         // 400 KHz
  429.         delay_us(5);
  430.         break; // arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us
  431.     case U8X8_MSG_GPIO_I2C_CLOCK: // arg_int=0: Output low at I2C clock pin
  432.         if (arg_int == 1) // arg_int=1: Input dir with pullup high for I2C clock pin
  433.             GPIO_WriteBit(GPIOB, SCL_Pin, 1);
  434.         else if (arg_int == 0)
  435.             GPIO_WriteBit(GPIOB, SCL_Pin, 0);
  436.         break;
  437.     case U8X8_MSG_GPIO_I2C_DATA: // arg_int=0: Output low at I2C data pin
  438.         if (arg_int == 1) // arg_int=1: Input dir with pullup high for I2C data pin
  439.             GPIO_WriteBit(GPIOB, SDA_Pin, 1);
  440.         else if (arg_int == 0)
  441.             GPIO_WriteBit(GPIOB, SDA_Pin, 0);
  442.         break;
  443.     case U8X8_MSG_GPIO_MENU_SELECT:
  444.         u8x8_SetGPIOResult(u8x8, /* get menu select pin state */ 0);
  445.         break;
  446.     case U8X8_MSG_GPIO_MENU_NEXT:
  447.         u8x8_SetGPIOResult(u8x8, /* get menu next pin state */ 0);
  448.         break;
  449.     case U8X8_MSG_GPIO_MENU_PREV:
  450.         u8x8_SetGPIOResult(u8x8, /* get menu prev pin state */ 0);
  451.         break;
  452.     case U8X8_MSG_GPIO_MENU_HOME:
  453.         u8x8_SetGPIOResult(u8x8, /* get menu home pin state */ 0);
  454.         break;
  455.     default:
  456.         u8x8_SetGPIOResult(u8x8, 1); // default return value
  457.         break;
  458.     }
  459.     return 1;
  460. }

更多回帖

×
发帖