一、内部时钟源
1、创建项目
File → New → STM32 project 选择STM32F103C8T6单片机,命名TIM
2、配置单片机
1.打开USART1,方便我们与电脑连接查看数据
开启UART1并开启中断。
2、设置时钟源
开启外部高速晶振 将时钟频率设置为72MHz 设置调试模式 打开定时器并且设置分频器和重装值
3、代码部分
1.查看定时器的重装计数值
启动定时器功能,计数器开始计数。
HAL_TIM_Base_Start ( & htim4) ;
定义变量来存放计数值。
int counter = 0 ;
通过串口发送到电脑端,方便查看。
# include <stdio.h>
# include <string.h>
counter = __HAL_TIM_GET_COUNTER ( & htim4) ;
char message[ 20 ] ; sprintf ( message, "counter: %d" , counter) ; HAL_UART_Transmit ( & huart1, ( uint8_t * ) message, strlen ( message) , HAL_MAX_DELAY) ; HAL_Delay ( 99 ) ;
编译下载程序,串口助手成功接收到数据,因为主程序有延迟100ms函数,串口助手每隔100ms接收一次数据,计数值刚好相隔100个数,证明此程序正常。
2.定时器中断
开启定时器4的中断功能 将启动定时器的函数改成中断模式的函数。
HAL_TIM_Base_Start_IT ( & htim4) ;
重写回调函数,计数器每次计数完成会产生一次时间更新,调用一次回调函数,对其重写。
stm32f1xx_hal_tim.c中复制回调函数名,在main.c中进行重写。
char data[ ] = "hello!" ;
void HAL_TIM_PeriodElapsedCallback ( TIM_HandleTypeDef * htim) { if ( htim = & htim4) { HAL_UART_Transmit_IT ( & huart1, ( uint8_t * ) data, 6 ) ; }
}
将上个流程中循环语句中的代码删除,因为使用了回调函数,不需要那些。再编译下载,发现两次收到的数据相隔1秒,测试成功。
二、外部时钟源
1、创建项目
File → New → STM32 project 选择STM32F103C8T6单片机,命名TIM_ExternalClock
2、配置单片机
1. 配置定时器
ETR引脚有两种路径进入触发控制器,直接进入(模式2)和通过触发器进入(模式1) 因为TIM3、TIM4并没有引出外部触发器ETR引脚,所以这次我们使用TIM2定时器。
2. 配置IIC来驱动OLED显示
开启IIC2功能 项目管理,为每个外设创建一个头文件和源文件,然后保存生成代码。
3、代码部分
1. 0.96寸4引脚OLED显示模块
字库和屏幕的驱动的头文件,添加到项目的Core → Inc 里。
# ifndef __FONT_H
# define __FONT_H
# include "stdint.h"
# include "string.h"
typedef struct ASCIIFont { uint8_t h; uint8_t w; uint8_t * chars;
} ASCIIFont; extern const ASCIIFont afont8x6;
extern const ASCIIFont afont12x6;
extern const ASCIIFont afont16x8;
extern const ASCIIFont afont24x12;
typedef struct Font { uint8_t h; uint8_t w; const uint8_t * chars; uint8_t len; const ASCIIFont * ascii;
} Font; extern const Font font16x16;
typedef struct Image { uint8_t w; uint8_t h; const uint8_t * data;
} Image; extern const Image bilibiliImg; # endif
# ifndef __OLED_H__
# define __OLED_H__ # include "font.h"
# include "main.h"
# include "string.h" typedef enum { OLED_COLOR_NORMAL = 0 , OLED_COLOR_REVERSED
} OLED_ColorMode; void OLED_Init ( ) ;
void OLED_DisPlay_On ( ) ;
void OLED_DisPlay_Off ( ) ; void OLED_NewFrame ( ) ;
void OLED_ShowFrame ( ) ;
void OLED_SetPixel ( uint8_t x, uint8_t y, OLED_ColorMode color) ; void OLED_DrawLine ( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, OLED_ColorMode color) ;
void OLED_DrawRectangle ( uint8_t x, uint8_t y, uint8_t w, uint8_t h, OLED_ColorMode color) ;
void OLED_DrawFilledRectangle ( uint8_t x, uint8_t y, uint8_t w, uint8_t h, OLED_ColorMode color) ;
void OLED_DrawTriangle ( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t x3, uint8_t y3, OLED_ColorMode color) ;
void OLED_DrawFilledTriangle ( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t x3, uint8_t y3, OLED_ColorMode color) ;
void OLED_DrawCircle ( uint8_t x, uint8_t y, uint8_t r, OLED_ColorMode color) ;
void OLED_DrawFilledCircle ( uint8_t x, uint8_t y, uint8_t r, OLED_ColorMode color) ;
void OLED_DrawEllipse ( uint8_t x, uint8_t y, uint8_t a, uint8_t b, OLED_ColorMode color) ;
void OLED_DrawImage ( uint8_t x, uint8_t y, const Image * img, OLED_ColorMode color) ; void OLED_PrintASCIIChar ( uint8_t x, uint8_t y, char ch, const ASCIIFont * font, OLED_ColorMode color) ;
void OLED_PrintASCIIString ( uint8_t x, uint8_t y, char * str, const ASCIIFont * font, OLED_ColorMode color) ;
void OLED_PrintString ( uint8_t x, uint8_t y, char * str, const Font * font, OLED_ColorMode color) ; # endif
字库和屏幕的驱动的源文件,添加到项目的Core → Src 里。
# include "font.h"
const unsigned char ascii_8x6[ ] [ 6 ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x2f , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x07 , 0x00 , 0x07 , 0x00 } , { 0x00 , 0x14 , 0x7f , 0x14 , 0x7f , 0x14 } , { 0x00 , 0x24 , 0x2a , 0x7f , 0x2a , 0x12 } , { 0x00 , 0x62 , 0x64 , 0x08 , 0x13 , 0x23 } , { 0x00 , 0x36 , 0x49 , 0x55 , 0x22 , 0x50 } , { 0x00 , 0x00 , 0x05 , 0x03 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x1c , 0x22 , 0x41 , 0x00 } , { 0x00 , 0x00 , 0x41 , 0x22 , 0x1c , 0x00 } , { 0x00 , 0x14 , 0x08 , 0x3E , 0x08 , 0x14 } , { 0x00 , 0x08 , 0x08 , 0x3E , 0x08 , 0x08 } , { 0x00 , 0x00 , 0x00 , 0xA0 , 0x60 , 0x00 } , { 0x00 , 0x08 , 0x08 , 0x08 , 0x08 , 0x08 } , { 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x00 } , { 0x00 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 } , { 0x00 , 0x3E , 0x51 , 0x49 , 0x45 , 0x3E } , { 0x00 , 0x00 , 0x42 , 0x7F , 0x40 , 0x00 } , { 0x00 , 0x42 , 0x61 , 0x51 , 0x49 , 0x46 } , { 0x00 , 0x21 , 0x41 , 0x45 , 0x4B , 0x31 } , { 0x00 , 0x18 , 0x14 , 0x12 , 0x7F , 0x10 } , { 0x00 , 0x27 , 0x45 , 0x45 , 0x45 , 0x39 } , { 0x00 , 0x3C , 0x4A , 0x49 , 0x49 , 0x30 } , { 0x00 , 0x01 , 0x71 , 0x09 , 0x05 , 0x03 } , { 0x00 , 0x36 , 0x49 , 0x49 , 0x49 , 0x36 } , { 0x00 , 0x06 , 0x49 , 0x49 , 0x29 , 0x1E } , { 0x00 , 0x00 , 0x36 , 0x36 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x56 , 0x36 , 0x00 , 0x00 } , { 0x00 , 0x08 , 0x14 , 0x22 , 0x41 , 0x00 } , { 0x00 , 0x14 , 0x14 , 0x14 , 0x14 , 0x14 } , { 0x00 , 0x00 , 0x41 , 0x22 , 0x14 , 0x08 } , { 0x00 , 0x02 , 0x01 , 0x51 , 0x09 , 0x06 } , { 0x00 , 0x32 , 0x49 , 0x59 , 0x51 , 0x3E } , { 0x00 , 0x7C , 0x12 , 0x11 , 0x12 , 0x7C } , { 0x00 , 0x7F , 0x49 , 0x49 , 0x49 , 0x36 } , { 0x00 , 0x3E , 0x41 , 0x41 , 0x41 , 0x22 } , { 0x00 , 0x7F , 0x41 , 0x41 , 0x22 , 0x1C } , { 0x00 , 0x7F , 0x49 , 0x49 , 0x49 , 0x41 } , { 0x00 , 0x7F , 0x09 , 0x09 , 0x09 , 0x01 } , { 0x00 , 0x3E , 0x41 , 0x49 , 0x49 , 0x7A } , { 0x00 , 0x7F , 0x08 , 0x08 , 0x08 , 0x7F } , { 0x00 , 0x00 , 0x41 , 0x7F , 0x41 , 0x00 } , { 0x00 , 0x20 , 0x40 , 0x41 , 0x3F , 0x01 } , { 0x00 , 0x7F , 0x08 , 0x14 , 0x22 , 0x41 } , { 0x00 , 0x7F , 0x40 , 0x40 , 0x40 , 0x40 } , { 0x00 , 0x7F , 0x02 , 0x0C , 0x02 , 0x7F } , { 0x00 , 0x7F , 0x04 , 0x08 , 0x10 , 0x7F } , { 0x00 , 0x3E , 0x41 , 0x41 , 0x41 , 0x3E } , { 0x00 , 0x7F , 0x09 , 0x09 , 0x09 , 0x06 } , { 0x00 , 0x3E , 0x41 , 0x51 , 0x21 , 0x5E } , { 0x00 , 0x7F , 0x09 , 0x19 , 0x29 , 0x46 } , { 0x00 , 0x46 , 0x49 , 0x49 , 0x49 , 0x31 } , { 0x00 , 0x01 , 0x01 , 0x7F , 0x01 , 0x01 } , { 0x00 , 0x3F , 0x40 , 0x40 , 0x40 , 0x3F } , { 0x00 , 0x1F , 0x20 , 0x40 , 0x20 , 0x1F } , { 0x00 , 0x3F , 0x40 , 0x38 , 0x40 , 0x3F } , { 0x00 , 0x63 , 0x14 , 0x08 , 0x14 , 0x63 } , { 0x00 , 0x07 , 0x08 , 0x70 , 0x08 , 0x07 } , { 0x00 , 0x61 , 0x51 , 0x49 , 0x45 , 0x43 } , { 0x00 , 0x00 , 0x7F , 0x41 , 0x41 , 0x00 } , { 0x00 , 0x55 , 0x2A , 0x55 , 0x2A , 0x55 } , { 0x00 , 0x00 , 0x41 , 0x41 , 0x7F , 0x00 } , { 0x00 , 0x04 , 0x02 , 0x01 , 0x02 , 0x04 } , { 0x00 , 0x40 , 0x40 , 0x40 , 0x40 , 0x40 } , { 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x00 } , { 0x00 , 0x20 , 0x54 , 0x54 , 0x54 , 0x78 } , { 0x00 , 0x7F , 0x48 , 0x44 , 0x44 , 0x38 } , { 0x00 , 0x38 , 0x44 , 0x44 , 0x44 , 0x20 } , { 0x00 , 0x38 , 0x44 , 0x44 , 0x48 , 0x7F } , { 0x00 , 0x38 , 0x54 , 0x54 , 0x54 , 0x18 } , { 0x00 , 0x08 , 0x7E , 0x09 , 0x01 , 0x02 } , { 0x00 , 0x18 , 0xA4 , 0xA4 , 0xA4 , 0x7C } , { 0x00 , 0x7F , 0x08 , 0x04 , 0x04 , 0x78 } , { 0x00 , 0x00 , 0x44 , 0x7D , 0x40 , 0x00 } , { 0x00 , 0x40 , 0x80 , 0x84 , 0x7D , 0x00 } , { 0x00 , 0x7F , 0x10 , 0x28 , 0x44 , 0x00 } , { 0x00 , 0x00 , 0x41 , 0x7F , 0x40 , 0x00 } , { 0x00 , 0x7C , 0x04 , 0x18 , 0x04 , 0x78 } , { 0x00 , 0x7C , 0x08 , 0x04 , 0x04 , 0x78 } , { 0x00 , 0x38 , 0x44 , 0x44 , 0x44 , 0x38 } , { 0x00 , 0xFC , 0x24 , 0x24 , 0x24 , 0x18 } , { 0x00 , 0x18 , 0x24 , 0x24 , 0x18 , 0xFC } , { 0x00 , 0x7C , 0x08 , 0x04 , 0x04 , 0x08 } , { 0x00 , 0x48 , 0x54 , 0x54 , 0x54 , 0x20 } , { 0x00 , 0x04 , 0x3F , 0x44 , 0x40 , 0x20 } , { 0x00 , 0x3C , 0x40 , 0x40 , 0x20 , 0x7C } , { 0x00 , 0x1C , 0x20 , 0x40 , 0x20 , 0x1C } , { 0x00 , 0x3C , 0x40 , 0x30 , 0x40 , 0x3C } , { 0x00 , 0x44 , 0x28 , 0x10 , 0x28 , 0x44 } , { 0x00 , 0x1C , 0xA0 , 0xA0 , 0xA0 , 0x7C } , { 0x00 , 0x44 , 0x64 , 0x54 , 0x4C , 0x44 } , { 0x14 , 0x14 , 0x14 , 0x14 , 0x14 , 0x14 } ,
} ; const ASCIIFont afont8x6 = { 8 , 6 , ( unsigned char * ) ascii_8x6} ; const unsigned char ascii_12x6[ ] [ 12 ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x0C , 0x02 , 0x0C , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x90 , 0xD0 , 0xBC , 0xD0 , 0xBC , 0x90 , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 , 0x00 } , { 0x18 , 0x24 , 0xFE , 0x44 , 0x8C , 0x00 , 0x03 , 0x02 , 0x07 , 0x02 , 0x01 , 0x00 } , { 0x18 , 0x24 , 0xD8 , 0xB0 , 0x4C , 0x80 , 0x00 , 0x03 , 0x00 , 0x01 , 0x02 , 0x01 } , { 0xC0 , 0x38 , 0xE4 , 0x38 , 0xE0 , 0x00 , 0x01 , 0x02 , 0x02 , 0x01 , 0x02 , 0x02 } , { 0x08 , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xF8 , 0x04 , 0x02 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 } , { 0x00 , 0x02 , 0x04 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x04 , 0x02 , 0x01 , 0x00 , 0x00 } , { 0x90 , 0x60 , 0xF8 , 0x60 , 0x90 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 } , { 0x20 , 0x20 , 0xFC , 0x20 , 0x20 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x80 , 0x60 , 0x1C , 0x02 , 0x00 , 0x04 , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0xF8 , 0x04 , 0x04 , 0x04 , 0xF8 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x00 , 0x08 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 } , { 0x18 , 0x84 , 0x44 , 0x24 , 0x18 , 0x00 , 0x03 , 0x02 , 0x02 , 0x02 , 0x02 , 0x00 } , { 0x08 , 0x04 , 0x24 , 0x24 , 0xD8 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x40 , 0xB0 , 0x88 , 0xFC , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x02 , 0x00 } , { 0x3C , 0x24 , 0x24 , 0x24 , 0xC4 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0xF8 , 0x24 , 0x24 , 0x2C , 0xC0 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x0C , 0x04 , 0xE4 , 0x1C , 0x04 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 } , { 0xD8 , 0x24 , 0x24 , 0x24 , 0xD8 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x38 , 0x44 , 0x44 , 0x44 , 0xF8 , 0x00 , 0x00 , 0x03 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x00 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x20 , 0x50 , 0x88 , 0x04 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 } , { 0x90 , 0x90 , 0x90 , 0x90 , 0x90 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x02 , 0x04 , 0x88 , 0x50 , 0x20 , 0x00 , 0x02 , 0x01 , 0x00 , 0x00 , 0x00 } , { 0x18 , 0x04 , 0xC4 , 0x24 , 0x18 , 0x00 , 0x00 , 0x00 , 0x02 , 0x00 , 0x00 , 0x00 } , { 0xF8 , 0x04 , 0xE4 , 0x94 , 0xF8 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0xE0 , 0x9C , 0xF0 , 0x80 , 0x00 , 0x02 , 0x03 , 0x00 , 0x00 , 0x03 , 0x02 } , { 0x04 , 0xFC , 0x24 , 0x24 , 0xD8 , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0xF8 , 0x04 , 0x04 , 0x04 , 0x0C , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x04 , 0xFC , 0x04 , 0x04 , 0xF8 , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x04 , 0xFC , 0x24 , 0x74 , 0x0C , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x03 , 0x00 } , { 0x04 , 0xFC , 0x24 , 0x74 , 0x0C , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 , 0x00 } , { 0xF0 , 0x08 , 0x04 , 0x44 , 0xCC , 0x40 , 0x00 , 0x01 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x04 , 0xFC , 0x20 , 0x20 , 0xFC , 0x04 , 0x02 , 0x03 , 0x00 , 0x00 , 0x03 , 0x02 } , { 0x04 , 0x04 , 0xFC , 0x04 , 0x04 , 0x00 , 0x02 , 0x02 , 0x03 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0x04 , 0x04 , 0xFC , 0x04 , 0x04 , 0x06 , 0x04 , 0x04 , 0x03 , 0x00 , 0x00 } , { 0x04 , 0xFC , 0x24 , 0xD0 , 0x0C , 0x04 , 0x02 , 0x03 , 0x02 , 0x00 , 0x03 , 0x02 } , { 0x04 , 0xFC , 0x04 , 0x00 , 0x00 , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x02 , 0x03 } , { 0xFC , 0x3C , 0xC0 , 0x3C , 0xFC , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 } , { 0x04 , 0xFC , 0x30 , 0xC4 , 0xFC , 0x04 , 0x02 , 0x03 , 0x02 , 0x00 , 0x03 , 0x00 } , { 0xF8 , 0x04 , 0x04 , 0x04 , 0xF8 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x04 , 0xFC , 0x24 , 0x24 , 0x18 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 , 0x00 } , { 0xF8 , 0x84 , 0x84 , 0x04 , 0xF8 , 0x00 , 0x01 , 0x02 , 0x02 , 0x07 , 0x05 , 0x00 } , { 0x04 , 0xFC , 0x24 , 0x64 , 0x98 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x03 , 0x02 } , { 0x18 , 0x24 , 0x24 , 0x44 , 0x8C , 0x00 , 0x03 , 0x02 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x0C , 0x04 , 0xFC , 0x04 , 0x0C , 0x00 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 } , { 0x04 , 0xFC , 0x00 , 0x00 , 0xFC , 0x04 , 0x00 , 0x01 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x04 , 0x7C , 0x80 , 0xE0 , 0x1C , 0x04 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 } , { 0x1C , 0xE0 , 0x3C , 0xE0 , 0x1C , 0x00 , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 , 0x00 } , { 0x04 , 0x9C , 0x60 , 0x9C , 0x04 , 0x00 , 0x02 , 0x03 , 0x00 , 0x03 , 0x02 , 0x00 } , { 0x04 , 0x1C , 0xE0 , 0x1C , 0x04 , 0x00 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 } , { 0x0C , 0x84 , 0x64 , 0x1C , 0x04 , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x03 , 0x00 } , { 0x00 , 0x00 , 0xFE , 0x02 , 0x02 , 0x00 , 0x00 , 0x00 , 0x07 , 0x04 , 0x04 , 0x00 } , { 0x00 , 0x0E , 0x30 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x00 } , { 0x00 , 0x02 , 0x02 , 0xFE , 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x07 , 0x00 , 0x00 } , { 0x00 , 0x04 , 0x02 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x08 , 0x08 , 0x08 , 0x08 , 0x08 } , { 0x00 , 0x00 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x40 , 0xA0 , 0xA0 , 0xC0 , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x03 , 0x02 } , { 0x04 , 0xFC , 0x20 , 0x20 , 0xC0 , 0x00 , 0x00 , 0x03 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x00 , 0xC0 , 0x20 , 0x20 , 0x60 , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0xC0 , 0x20 , 0x24 , 0xFC , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x03 , 0x02 } , { 0x00 , 0xC0 , 0xA0 , 0xA0 , 0xC0 , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0x20 , 0xF8 , 0x24 , 0x24 , 0x04 , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0x40 , 0xA0 , 0xA0 , 0x60 , 0x20 , 0x00 , 0x07 , 0x0A , 0x0A , 0x0A , 0x04 } , { 0x04 , 0xFC , 0x20 , 0x20 , 0xC0 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x03 , 0x02 } , { 0x00 , 0x20 , 0xE4 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x20 , 0xE4 , 0x00 , 0x00 , 0x08 , 0x08 , 0x08 , 0x07 , 0x00 , 0x00 } , { 0x04 , 0xFC , 0x80 , 0xE0 , 0x20 , 0x20 , 0x02 , 0x03 , 0x02 , 0x00 , 0x03 , 0x02 } , { 0x04 , 0x04 , 0xFC , 0x00 , 0x00 , 0x00 , 0x02 , 0x02 , 0x03 , 0x02 , 0x02 , 0x00 } , { 0xE0 , 0x20 , 0xE0 , 0x20 , 0xC0 , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 } , { 0x20 , 0xE0 , 0x20 , 0x20 , 0xC0 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x03 , 0x02 } , { 0x00 , 0xC0 , 0x20 , 0x20 , 0xC0 , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x01 , 0x00 } , { 0x20 , 0xE0 , 0x20 , 0x20 , 0xC0 , 0x00 , 0x08 , 0x0F , 0x0A , 0x02 , 0x01 , 0x00 } , { 0x00 , 0xC0 , 0x20 , 0x20 , 0xE0 , 0x00 , 0x00 , 0x01 , 0x02 , 0x0A , 0x0F , 0x08 } , { 0x20 , 0xE0 , 0x40 , 0x20 , 0x20 , 0x00 , 0x02 , 0x03 , 0x02 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x60 , 0xA0 , 0xA0 , 0x20 , 0x00 , 0x00 , 0x02 , 0x02 , 0x02 , 0x03 , 0x00 } , { 0x00 , 0x20 , 0xF8 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x00 } , { 0x20 , 0xE0 , 0x00 , 0x20 , 0xE0 , 0x00 , 0x00 , 0x01 , 0x02 , 0x02 , 0x03 , 0x02 } , { 0x20 , 0xE0 , 0x20 , 0x80 , 0x60 , 0x20 , 0x00 , 0x00 , 0x03 , 0x01 , 0x00 , 0x00 } , { 0x60 , 0x80 , 0xE0 , 0x80 , 0x60 , 0x00 , 0x00 , 0x03 , 0x00 , 0x03 , 0x00 , 0x00 } , { 0x20 , 0x60 , 0x80 , 0x60 , 0x20 , 0x00 , 0x02 , 0x03 , 0x00 , 0x03 , 0x02 , 0x00 } , { 0x20 , 0xE0 , 0x20 , 0x80 , 0x60 , 0x20 , 0x08 , 0x08 , 0x07 , 0x01 , 0x00 , 0x00 } , { 0x00 , 0x20 , 0xA0 , 0x60 , 0x20 , 0x00 , 0x00 , 0x02 , 0x03 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0x00 , 0x20 , 0xDE , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x04 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x00 , 0x00 } , { 0x00 , 0x02 , 0xDE , 0x20 , 0x00 , 0x00 , 0x00 , 0x04 , 0x07 , 0x00 , 0x00 , 0x00 } , { 0x02 , 0x01 , 0x02 , 0x04 , 0x04 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
} ; const ASCIIFont afont12x6 = { 12 , 6 , ( unsigned char * ) ascii_12x6} ; const unsigned char ascii_16x8[ ] [ 16 ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x33 , 0x30 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x10 , 0x0C , 0x06 , 0x10 , 0x0C , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x40 , 0xC0 , 0x78 , 0x40 , 0xC0 , 0x78 , 0x40 , 0x00 , 0x04 , 0x3F , 0x04 , 0x04 , 0x3F , 0x04 , 0x04 , 0x00 } , { 0x00 , 0x70 , 0x88 , 0xFC , 0x08 , 0x30 , 0x00 , 0x00 , 0x00 , 0x18 , 0x20 , 0xFF , 0x21 , 0x1E , 0x00 , 0x00 } , { 0xF0 , 0x08 , 0xF0 , 0x00 , 0xE0 , 0x18 , 0x00 , 0x00 , 0x00 , 0x21 , 0x1C , 0x03 , 0x1E , 0x21 , 0x1E , 0x00 } , { 0x00 , 0xF0 , 0x08 , 0x88 , 0x70 , 0x00 , 0x00 , 0x00 , 0x1E , 0x21 , 0x23 , 0x24 , 0x19 , 0x27 , 0x21 , 0x10 } , { 0x10 , 0x16 , 0x0E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xE0 , 0x18 , 0x04 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x18 , 0x20 , 0x40 , 0x00 } , { 0x00 , 0x02 , 0x04 , 0x18 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x20 , 0x18 , 0x07 , 0x00 , 0x00 , 0x00 } , { 0x40 , 0x40 , 0x80 , 0xF0 , 0x80 , 0x40 , 0x40 , 0x00 , 0x02 , 0x02 , 0x01 , 0x0F , 0x01 , 0x02 , 0x02 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x1F , 0x01 , 0x01 , 0x01 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0xB0 , 0x70 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x60 , 0x18 , 0x04 , 0x00 , 0x60 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0xE0 , 0x10 , 0x08 , 0x08 , 0x10 , 0xE0 , 0x00 , 0x00 , 0x0F , 0x10 , 0x20 , 0x20 , 0x10 , 0x0F , 0x00 } , { 0x00 , 0x10 , 0x10 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x20 , 0x3F , 0x20 , 0x20 , 0x00 , 0x00 } , { 0x00 , 0x70 , 0x08 , 0x08 , 0x08 , 0x88 , 0x70 , 0x00 , 0x00 , 0x30 , 0x28 , 0x24 , 0x22 , 0x21 , 0x30 , 0x00 } , { 0x00 , 0x30 , 0x08 , 0x88 , 0x88 , 0x48 , 0x30 , 0x00 , 0x00 , 0x18 , 0x20 , 0x20 , 0x20 , 0x11 , 0x0E , 0x00 } , { 0x00 , 0x00 , 0xC0 , 0x20 , 0x10 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x07 , 0x04 , 0x24 , 0x24 , 0x3F , 0x24 , 0x00 } , { 0x00 , 0xF8 , 0x08 , 0x88 , 0x88 , 0x08 , 0x08 , 0x00 , 0x00 , 0x19 , 0x21 , 0x20 , 0x20 , 0x11 , 0x0E , 0x00 } , { 0x00 , 0xE0 , 0x10 , 0x88 , 0x88 , 0x18 , 0x00 , 0x00 , 0x00 , 0x0F , 0x11 , 0x20 , 0x20 , 0x11 , 0x0E , 0x00 } , { 0x00 , 0x38 , 0x08 , 0x08 , 0xC8 , 0x38 , 0x08 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x70 , 0x88 , 0x08 , 0x08 , 0x88 , 0x70 , 0x00 , 0x00 , 0x1C , 0x22 , 0x21 , 0x21 , 0x22 , 0x1C , 0x00 } , { 0x00 , 0xE0 , 0x10 , 0x08 , 0x08 , 0x10 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x31 , 0x22 , 0x22 , 0x11 , 0x0F , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xC0 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0x40 , 0x20 , 0x10 , 0x08 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x00 } , { 0x40 , 0x40 , 0x40 , 0x40 , 0x40 , 0x40 , 0x40 , 0x00 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x00 } , { 0x00 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x00 , 0x00 , 0x00 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x01 , 0x00 } , { 0x00 , 0x70 , 0x48 , 0x08 , 0x08 , 0x08 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x36 , 0x01 , 0x00 , 0x00 } , { 0xC0 , 0x30 , 0xC8 , 0x28 , 0xE8 , 0x10 , 0xE0 , 0x00 , 0x07 , 0x18 , 0x27 , 0x24 , 0x23 , 0x14 , 0x0B , 0x00 } , { 0x00 , 0x00 , 0xC0 , 0x38 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x20 , 0x3C , 0x23 , 0x02 , 0x02 , 0x27 , 0x38 , 0x20 } , { 0x08 , 0xF8 , 0x88 , 0x88 , 0x88 , 0x70 , 0x00 , 0x00 , 0x20 , 0x3F , 0x20 , 0x20 , 0x20 , 0x11 , 0x0E , 0x00 } , { 0xC0 , 0x30 , 0x08 , 0x08 , 0x08 , 0x08 , 0x38 , 0x00 , 0x07 , 0x18 , 0x20 , 0x20 , 0x20 , 0x10 , 0x08 , 0x00 } , { 0x08 , 0xF8 , 0x08 , 0x08 , 0x08 , 0x10 , 0xE0 , 0x00 , 0x20 , 0x3F , 0x20 , 0x20 , 0x20 , 0x10 , 0x0F , 0x00 } , { 0x08 , 0xF8 , 0x88 , 0x88 , 0xE8 , 0x08 , 0x10 , 0x00 , 0x20 , 0x3F , 0x20 , 0x20 , 0x23 , 0x20 , 0x18 , 0x00 } , { 0x08 , 0xF8 , 0x88 , 0x88 , 0xE8 , 0x08 , 0x10 , 0x00 , 0x20 , 0x3F , 0x20 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 } , { 0xC0 , 0x30 , 0x08 , 0x08 , 0x08 , 0x38 , 0x00 , 0x00 , 0x07 , 0x18 , 0x20 , 0x20 , 0x22 , 0x1E , 0x02 , 0x00 } , { 0x08 , 0xF8 , 0x08 , 0x00 , 0x00 , 0x08 , 0xF8 , 0x08 , 0x20 , 0x3F , 0x21 , 0x01 , 0x01 , 0x21 , 0x3F , 0x20 } , { 0x00 , 0x08 , 0x08 , 0xF8 , 0x08 , 0x08 , 0x00 , 0x00 , 0x00 , 0x20 , 0x20 , 0x3F , 0x20 , 0x20 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x08 , 0x08 , 0xF8 , 0x08 , 0x08 , 0x00 , 0xC0 , 0x80 , 0x80 , 0x80 , 0x7F , 0x00 , 0x00 , 0x00 } , { 0x08 , 0xF8 , 0x88 , 0xC0 , 0x28 , 0x18 , 0x08 , 0x00 , 0x20 , 0x3F , 0x20 , 0x01 , 0x26 , 0x38 , 0x20 , 0x00 } , { 0x08 , 0xF8 , 0x08 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x3F , 0x20 , 0x20 , 0x20 , 0x20 , 0x30 , 0x00 } , { 0x08 , 0xF8 , 0xF8 , 0x00 , 0xF8 , 0xF8 , 0x08 , 0x00 , 0x20 , 0x3F , 0x00 , 0x3F , 0x00 , 0x3F , 0x20 , 0x00 } , { 0x08 , 0xF8 , 0x30 , 0xC0 , 0x00 , 0x08 , 0xF8 , 0x08 , 0x20 , 0x3F , 0x20 , 0x00 , 0x07 , 0x18 , 0x3F , 0x00 } , { 0xE0 , 0x10 , 0x08 , 0x08 , 0x08 , 0x10 , 0xE0 , 0x00 , 0x0F , 0x10 , 0x20 , 0x20 , 0x20 , 0x10 , 0x0F , 0x00 } , { 0x08 , 0xF8 , 0x08 , 0x08 , 0x08 , 0x08 , 0xF0 , 0x00 , 0x20 , 0x3F , 0x21 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 } , { 0xE0 , 0x10 , 0x08 , 0x08 , 0x08 , 0x10 , 0xE0 , 0x00 , 0x0F , 0x18 , 0x24 , 0x24 , 0x38 , 0x50 , 0x4F , 0x00 } , { 0x08 , 0xF8 , 0x88 , 0x88 , 0x88 , 0x88 , 0x70 , 0x00 , 0x20 , 0x3F , 0x20 , 0x00 , 0x03 , 0x0C , 0x30 , 0x20 } , { 0x00 , 0x70 , 0x88 , 0x08 , 0x08 , 0x08 , 0x38 , 0x00 , 0x00 , 0x38 , 0x20 , 0x21 , 0x21 , 0x22 , 0x1C , 0x00 } , { 0x18 , 0x08 , 0x08 , 0xF8 , 0x08 , 0x08 , 0x18 , 0x00 , 0x00 , 0x00 , 0x20 , 0x3F , 0x20 , 0x00 , 0x00 , 0x00 } , { 0x08 , 0xF8 , 0x08 , 0x00 , 0x00 , 0x08 , 0xF8 , 0x08 , 0x00 , 0x1F , 0x20 , 0x20 , 0x20 , 0x20 , 0x1F , 0x00 } , { 0x08 , 0x78 , 0x88 , 0x00 , 0x00 , 0xC8 , 0x38 , 0x08 , 0x00 , 0x00 , 0x07 , 0x38 , 0x0E , 0x01 , 0x00 , 0x00 } , { 0xF8 , 0x08 , 0x00 , 0xF8 , 0x00 , 0x08 , 0xF8 , 0x00 , 0x03 , 0x3C , 0x07 , 0x00 , 0x07 , 0x3C , 0x03 , 0x00 } , { 0x08 , 0x18 , 0x68 , 0x80 , 0x80 , 0x68 , 0x18 , 0x08 , 0x20 , 0x30 , 0x2C , 0x03 , 0x03 , 0x2C , 0x30 , 0x20 } , { 0x08 , 0x38 , 0xC8 , 0x00 , 0xC8 , 0x38 , 0x08 , 0x00 , 0x00 , 0x00 , 0x20 , 0x3F , 0x20 , 0x00 , 0x00 , 0x00 } , { 0x10 , 0x08 , 0x08 , 0x08 , 0xC8 , 0x38 , 0x08 , 0x00 , 0x20 , 0x38 , 0x26 , 0x21 , 0x20 , 0x20 , 0x18 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xFE , 0x02 , 0x02 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0x40 , 0x40 , 0x40 , 0x00 } , { 0x00 , 0x0C , 0x30 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x06 , 0x38 , 0xC0 , 0x00 } , { 0x00 , 0x02 , 0x02 , 0x02 , 0xFE , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x40 , 0x40 , 0x7F , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x04 , 0x02 , 0x02 , 0x02 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 } , { 0x00 , 0x02 , 0x02 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x19 , 0x24 , 0x22 , 0x22 , 0x22 , 0x3F , 0x20 } , { 0x08 , 0xF8 , 0x00 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0x11 , 0x20 , 0x20 , 0x11 , 0x0E , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x0E , 0x11 , 0x20 , 0x20 , 0x20 , 0x11 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x88 , 0xF8 , 0x00 , 0x00 , 0x0E , 0x11 , 0x20 , 0x20 , 0x10 , 0x3F , 0x20 } , { 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x1F , 0x22 , 0x22 , 0x22 , 0x22 , 0x13 , 0x00 } , { 0x00 , 0x80 , 0x80 , 0xF0 , 0x88 , 0x88 , 0x88 , 0x18 , 0x00 , 0x20 , 0x20 , 0x3F , 0x20 , 0x20 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x6B , 0x94 , 0x94 , 0x94 , 0x93 , 0x60 , 0x00 } , { 0x08 , 0xF8 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x20 , 0x3F , 0x21 , 0x00 , 0x00 , 0x20 , 0x3F , 0x20 } , { 0x00 , 0x80 , 0x98 , 0x98 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x20 , 0x3F , 0x20 , 0x20 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x80 , 0x98 , 0x98 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x80 , 0x80 , 0x80 , 0x7F , 0x00 , 0x00 } , { 0x08 , 0xF8 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x20 , 0x3F , 0x24 , 0x02 , 0x2D , 0x30 , 0x20 , 0x00 } , { 0x00 , 0x08 , 0x08 , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x20 , 0x3F , 0x20 , 0x20 , 0x00 , 0x00 } , { 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x20 , 0x3F , 0x20 , 0x00 , 0x3F , 0x20 , 0x00 , 0x3F } , { 0x80 , 0x80 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x20 , 0x3F , 0x21 , 0x00 , 0x00 , 0x20 , 0x3F , 0x20 } , { 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x1F , 0x20 , 0x20 , 0x20 , 0x20 , 0x1F , 0x00 } , { 0x80 , 0x80 , 0x00 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x80 , 0xFF , 0xA1 , 0x20 , 0x20 , 0x11 , 0x0E , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x0E , 0x11 , 0x20 , 0x20 , 0xA0 , 0xFF , 0x80 } , { 0x80 , 0x80 , 0x80 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x20 , 0x20 , 0x3F , 0x21 , 0x20 , 0x00 , 0x01 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x33 , 0x24 , 0x24 , 0x24 , 0x24 , 0x19 , 0x00 } , { 0x00 , 0x80 , 0x80 , 0xE0 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0x20 , 0x20 , 0x00 , 0x00 } , { 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x00 , 0x00 , 0x1F , 0x20 , 0x20 , 0x20 , 0x10 , 0x3F , 0x20 } , { 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x01 , 0x0E , 0x30 , 0x08 , 0x06 , 0x01 , 0x00 } , { 0x80 , 0x80 , 0x00 , 0x80 , 0x00 , 0x80 , 0x80 , 0x80 , 0x0F , 0x30 , 0x0C , 0x03 , 0x0C , 0x30 , 0x0F , 0x00 } , { 0x00 , 0x80 , 0x80 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x20 , 0x31 , 0x2E , 0x0E , 0x31 , 0x20 , 0x00 } , { 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x81 , 0x8E , 0x70 , 0x18 , 0x06 , 0x01 , 0x00 } , { 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 , 0x21 , 0x30 , 0x2C , 0x22 , 0x21 , 0x30 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x7C , 0x02 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0x40 , 0x40 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x02 , 0x02 , 0x7C , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x40 , 0x3F , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x06 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
} ; const ASCIIFont afont16x8 = { 16 , 8 , ( unsigned char * ) ascii_16x8} ; const unsigned char ascii_24x12[ ] [ 36 ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xF0 , 0xF0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x7F , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1C , 0x1C , 0x1C , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0x60 , 0x30 , 0x1C , 0x8C , 0x60 , 0x30 , 0x1C , 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x86 , 0xE6 , 0x9F , 0x86 , 0x86 , 0x86 , 0x86 , 0xE6 , 0x9F , 0x86 , 0x00 , 0x00 , 0x01 , 0x1F , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x1F , 0x01 , 0x01 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0xF8 , 0x20 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x07 , 0x0C , 0x18 , 0xFF , 0x70 , 0xE1 , 0x81 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x0F , 0x10 , 0x10 , 0x7F , 0x10 , 0x0F , 0x07 , 0x00 , 0x00 } , { 0x80 , 0x60 , 0x20 , 0x60 , 0x80 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x0F , 0x30 , 0x20 , 0x30 , 0x9F , 0x70 , 0xDC , 0x37 , 0x10 , 0x30 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x10 , 0x0E , 0x03 , 0x00 , 0x07 , 0x18 , 0x10 , 0x18 , 0x07 , 0x00 } , { 0x00 , 0x00 , 0xC0 , 0x20 , 0x20 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0xE0 , 0x1F , 0x38 , 0xE8 , 0x87 , 0x03 , 0xC4 , 0x3C , 0x04 , 0x00 , 0x00 , 0x07 , 0x0F , 0x18 , 0x10 , 0x10 , 0x0B , 0x07 , 0x0D , 0x10 , 0x10 , 0x08 , 0x00 } , { 0x00 , 0x80 , 0x8C , 0x4C , 0x38 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0xE0 , 0x30 , 0x08 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFE , 0xFF , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x18 , 0x20 , 0x40 , 0x00 } , { 0x00 , 0x04 , 0x08 , 0x30 , 0xE0 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF , 0xFE , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x20 , 0x18 , 0x0F , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x42 , 0x66 , 0x66 , 0x3C , 0x18 , 0xFF , 0x18 , 0x3C , 0x66 , 0x66 , 0x42 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x8C , 0x4C , 0x38 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1C , 0x1C , 0x1C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x38 , 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x70 , 0x1C , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x60 , 0x38 , 0x0E , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0xFE , 0xFF , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF , 0xFE , 0x00 , 0x00 , 0x01 , 0x07 , 0x0E , 0x18 , 0x10 , 0x10 , 0x18 , 0x0E , 0x07 , 0x01 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0xC0 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 } , { 0x00 , 0x80 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0x03 , 0x03 , 0x00 , 0x80 , 0x40 , 0x20 , 0x38 , 0x1F , 0x07 , 0x00 , 0x00 , 0x00 , 0x1C , 0x1A , 0x19 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x1F , 0x00 , 0x00 } , { 0x00 , 0x80 , 0xC0 , 0x20 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x03 , 0x00 , 0x10 , 0x10 , 0x18 , 0x2F , 0xE7 , 0x80 , 0x00 , 0x00 , 0x00 , 0x07 , 0x0F , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x0F , 0x07 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0xE0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0xB0 , 0x88 , 0x86 , 0x81 , 0x80 , 0xFF , 0xFF , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x00 } , { 0x00 , 0x00 , 0xE0 , 0x60 , 0x60 , 0x60 , 0x60 , 0x60 , 0x60 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0x10 , 0x08 , 0x08 , 0x08 , 0x18 , 0xF0 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x07 , 0x0B , 0x10 , 0x10 , 0x10 , 0x10 , 0x1C , 0x0F , 0x03 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x40 , 0x20 , 0x20 , 0x20 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x00 , 0xFC , 0xFF , 0x21 , 0x10 , 0x08 , 0x08 , 0x08 , 0x18 , 0xF0 , 0xE0 , 0x00 , 0x00 , 0x01 , 0x07 , 0x0C , 0x18 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0F , 0x03 , 0x00 } , { 0x00 , 0x00 , 0xC0 , 0xE0 , 0x60 , 0x60 , 0x60 , 0x60 , 0x60 , 0xE0 , 0x60 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x18 , 0x07 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1F , 0x1F , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x87 , 0xEF , 0x2C , 0x18 , 0x18 , 0x30 , 0x30 , 0x68 , 0xCF , 0x83 , 0x00 , 0x00 , 0x07 , 0x0F , 0x08 , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x0F , 0x07 , 0x00 } , { 0x00 , 0x00 , 0xC0 , 0xC0 , 0x20 , 0x20 , 0x20 , 0x20 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0x1F , 0x3F , 0x60 , 0x40 , 0x40 , 0x40 , 0x20 , 0x10 , 0xFF , 0xFE , 0x00 , 0x00 , 0x00 , 0x0C , 0x1C , 0x10 , 0x10 , 0x10 , 0x08 , 0x0F , 0x03 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0E , 0x0E , 0x0E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1C , 0x1C , 0x1C , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0C , 0x0C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x58 , 0x38 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x40 , 0x20 , 0x10 , 0x00 , 0x00 , 0x00 , 0x10 , 0x28 , 0x44 , 0x82 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x84 , 0x84 , 0x84 , 0x84 , 0x84 , 0x84 , 0x84 , 0x84 , 0x84 , 0x84 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x10 , 0x20 , 0x40 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x82 , 0x44 , 0x28 , 0x10 , 0x00 , 0x00 , 0x00 , 0x10 , 0x08 , 0x04 , 0x02 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0xC0 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x30 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x03 , 0x03 , 0x00 , 0x00 , 0xF0 , 0x10 , 0x08 , 0x0C , 0x07 , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1C , 0x1C , 0x1C , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0xC0 , 0x40 , 0x60 , 0x20 , 0x20 , 0x20 , 0x40 , 0xC0 , 0x00 , 0x00 , 0xFC , 0xFF , 0x01 , 0xF0 , 0x0E , 0x03 , 0xC1 , 0xFE , 0x03 , 0x80 , 0x7F , 0x00 , 0x01 , 0x07 , 0x0E , 0x08 , 0x11 , 0x11 , 0x10 , 0x11 , 0x09 , 0x04 , 0x02 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0xE0 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x7C , 0x43 , 0x40 , 0x47 , 0x7F , 0xF8 , 0x80 , 0x00 , 0x00 , 0x10 , 0x18 , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x13 , 0x1F , 0x1C , 0x10 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x2F , 0xE7 , 0x80 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x0F , 0x07 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0xE0 , 0x00 , 0x00 , 0xFC , 0xFF , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x01 , 0x07 , 0x0E , 0x18 , 0x10 , 0x10 , 0x10 , 0x08 , 0x04 , 0x03 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 0x40 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0xFF , 0xFE , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x18 , 0x08 , 0x0E , 0x07 , 0x01 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0x80 , 0x00 , 0x00 , 0xFF , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 , 0x7C , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x06 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0x60 , 0x80 , 0x00 , 0x00 , 0xFF , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 , 0x7C , 0x00 , 0x00 , 0x01 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0x20 , 0x40 , 0xE0 , 0x00 , 0x00 , 0x00 , 0xFC , 0xFF , 0x01 , 0x00 , 0x00 , 0x40 , 0x40 , 0xC0 , 0xC1 , 0x40 , 0x40 , 0x00 , 0x01 , 0x07 , 0x0E , 0x18 , 0x10 , 0x10 , 0x10 , 0x0F , 0x0F , 0x00 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0xFF , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0xFF , 0xFF , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 } , { 0x00 , 0x00 , 0x20 , 0x20 , 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x20 , 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x60 , 0xE0 , 0x80 , 0x80 , 0x80 , 0xC0 , 0x7F , 0x3F , 0x00 , 0x00 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x20 , 0xA0 , 0x60 , 0x20 , 0x20 , 0x00 , 0x00 , 0xFF , 0xFF , 0x30 , 0x18 , 0x7C , 0xE3 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x01 , 0x13 , 0x1F , 0x1C , 0x18 , 0x10 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x06 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0xFF , 0x01 , 0x3F , 0xFE , 0xC0 , 0xE0 , 0x1E , 0x01 , 0xFF , 0xFF , 0x00 , 0x10 , 0x1F , 0x10 , 0x00 , 0x03 , 0x1F , 0x03 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 } , { 0x20 , 0xE0 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0xE0 , 0x20 , 0x00 , 0xFF , 0x00 , 0x03 , 0x07 , 0x1C , 0x78 , 0xE0 , 0x80 , 0x00 , 0xFF , 0x00 , 0x10 , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x1F , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0xFE , 0xFF , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFE , 0x00 , 0x00 , 0x01 , 0x07 , 0x0E , 0x18 , 0x10 , 0x10 , 0x18 , 0x0C , 0x07 , 0x01 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0xFF , 0xFF , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x30 , 0x1F , 0x0F , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0x00 , 0xFE , 0xFF , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFE , 0x00 , 0x00 , 0x01 , 0x07 , 0x0E , 0x11 , 0x11 , 0x13 , 0x3C , 0x7C , 0x67 , 0x21 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x60 , 0xC0 , 0x80 , 0x00 , 0x00 , 0xFF , 0xFF , 0x10 , 0x10 , 0x30 , 0xF0 , 0xD0 , 0x08 , 0x0F , 0x07 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x1C , 0x10 , 0x10 } , { 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0x20 , 0x20 , 0x40 , 0x40 , 0xE0 , 0x00 , 0x00 , 0x07 , 0x0F , 0x0C , 0x18 , 0x18 , 0x30 , 0x30 , 0x60 , 0xE0 , 0x81 , 0x00 , 0x00 , 0x1F , 0x0C , 0x08 , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x0F , 0x07 , 0x00 } , { 0x80 , 0x60 , 0x20 , 0x20 , 0x20 , 0xE0 , 0xE0 , 0x20 , 0x20 , 0x20 , 0x60 , 0x80 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0xE0 , 0x20 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x07 , 0x0F , 0x18 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x07 , 0x00 } , { 0x20 , 0x60 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00 , 0x20 , 0xE0 , 0x60 , 0x20 , 0x00 , 0x00 , 0x07 , 0x7F , 0xF8 , 0x80 , 0x00 , 0x80 , 0x7C , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x07 , 0x1F , 0x1C , 0x07 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x20 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x20 , 0xE0 , 0x20 , 0x00 , 0x07 , 0xFF , 0xF8 , 0xE0 , 0x1F , 0xFF , 0xFC , 0xE0 , 0x1F , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x1F , 0x03 , 0x00 , 0x01 , 0x1F , 0x03 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x20 , 0x60 , 0xE0 , 0xA0 , 0x00 , 0x00 , 0x20 , 0xE0 , 0x60 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x8F , 0x7C , 0xF8 , 0xC6 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x18 , 0x1E , 0x13 , 0x00 , 0x01 , 0x17 , 0x1F , 0x18 , 0x10 , 0x00 } , { 0x20 , 0x60 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00 , 0x20 , 0xE0 , 0x60 , 0x20 , 0x00 , 0x00 , 0x01 , 0x07 , 0x3E , 0xF8 , 0xE0 , 0x18 , 0x07 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x80 , 0x60 , 0x20 , 0x20 , 0x20 , 0x20 , 0xA0 , 0xE0 , 0xE0 , 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0xF0 , 0x3E , 0x0F , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1C , 0x1F , 0x17 , 0x10 , 0x10 , 0x10 , 0x10 , 0x18 , 0x06 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFC , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F , 0x40 , 0x40 , 0x40 , 0x40 , 0x40 , 0x00 } , { 0x00 , 0x00 , 0x10 , 0xE0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x1C , 0x60 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x0C , 0x70 , 0x80 , 0x00 } , { 0x00 , 0x00 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x40 , 0x40 , 0x40 , 0x40 , 0x7F , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x10 , 0x08 , 0x0C , 0x04 , 0x0C , 0x08 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 } , { 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x08 , 0x08 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x98 , 0xD8 , 0x44 , 0x64 , 0x24 , 0x24 , 0xFC , 0xF8 , 0x00 , 0x00 , 0x00 , 0x0F , 0x1F , 0x18 , 0x10 , 0x10 , 0x10 , 0x08 , 0x1F , 0x1F , 0x10 , 0x18 } , { 0x00 , 0x20 , 0xE0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x18 , 0x08 , 0x04 , 0x04 , 0x0C , 0xF8 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x1F , 0x0F , 0x18 , 0x10 , 0x10 , 0x10 , 0x18 , 0x0F , 0x03 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0xF8 , 0x18 , 0x04 , 0x04 , 0x04 , 0x3C , 0x38 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x0C , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x06 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0xE0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0xE0 , 0xF8 , 0x1C , 0x04 , 0x04 , 0x04 , 0x08 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x18 , 0x10 , 0x10 , 0x10 , 0x08 , 0x1F , 0x0F , 0x08 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0xF8 , 0x48 , 0x44 , 0x44 , 0x44 , 0x4C , 0x78 , 0x70 , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x0C , 0x18 , 0x10 , 0x10 , 0x10 , 0x08 , 0x04 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0xC0 , 0x60 , 0x20 , 0x20 , 0xE0 , 0xC0 , 0x00 , 0x00 , 0x04 , 0x04 , 0x04 , 0xFF , 0xFF , 0x04 , 0x04 , 0x04 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x70 , 0xF8 , 0x8C , 0x04 , 0x04 , 0x8C , 0xF8 , 0x74 , 0x04 , 0x0C , 0x00 , 0x70 , 0x76 , 0xCF , 0x8D , 0x8D , 0x8D , 0x89 , 0xC8 , 0x78 , 0x70 , 0x00 } , { 0x00 , 0x20 , 0xE0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x08 , 0x04 , 0x04 , 0x04 , 0xFC , 0xF8 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x04 , 0xFC , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x04 , 0xFC , 0xFC , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0xC0 , 0x80 , 0x80 , 0xC0 , 0x7F , 0x3F , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x20 , 0xE0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x80 , 0xC0 , 0xF4 , 0x1C , 0x04 , 0x04 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x11 , 0x00 , 0x03 , 0x1F , 0x1C , 0x10 , 0x10 , 0x00 } , { 0x00 , 0x00 , 0x20 , 0x20 , 0x20 , 0xE0 , 0xF0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0xFC , 0xFC , 0x08 , 0x04 , 0xFC , 0xFC , 0x08 , 0x04 , 0xFC , 0xFC , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x1F , 0x1F , 0x10 , 0x00 , 0x1F , 0x1F , 0x10 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0xFC , 0xFC , 0x08 , 0x08 , 0x04 , 0x04 , 0xFC , 0xF8 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 , 0x00 , 0x10 , 0x1F , 0x1F , 0x10 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0xF0 , 0x18 , 0x0C , 0x04 , 0x04 , 0x0C , 0x18 , 0xF0 , 0xE0 , 0x00 , 0x00 , 0x03 , 0x0F , 0x0C , 0x10 , 0x10 , 0x10 , 0x10 , 0x0C , 0x0F , 0x03 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0xFC , 0xFC , 0x08 , 0x04 , 0x04 , 0x04 , 0x0C , 0xF8 , 0xF0 , 0x00 , 0x00 , 0x80 , 0xFF , 0xFF , 0x88 , 0x90 , 0x10 , 0x10 , 0x1C , 0x0F , 0x03 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xE0 , 0xF8 , 0x1C , 0x04 , 0x04 , 0x04 , 0x08 , 0xF8 , 0xFC , 0x00 , 0x00 , 0x00 , 0x03 , 0x0F , 0x18 , 0x10 , 0x10 , 0x90 , 0x88 , 0xFF , 0xFF , 0x80 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x04 , 0xFC , 0xFC , 0x10 , 0x08 , 0x04 , 0x04 , 0x0C , 0x0C , 0x00 , 0x10 , 0x10 , 0x10 , 0x1F , 0x1F , 0x10 , 0x10 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x78 , 0xCC , 0xC4 , 0x84 , 0x84 , 0x84 , 0x0C , 0x1C , 0x00 , 0x00 , 0x00 , 0x1E , 0x18 , 0x10 , 0x10 , 0x10 , 0x11 , 0x19 , 0x0F , 0x06 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x04 , 0xFF , 0xFF , 0x04 , 0x04 , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x1F , 0x10 , 0x10 , 0x10 , 0x0C , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0xFC , 0xFE , 0x00 , 0x00 , 0x00 , 0x04 , 0xFC , 0xFE , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F , 0x1F , 0x18 , 0x10 , 0x10 , 0x08 , 0x1F , 0x0F , 0x08 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x0C , 0x3C , 0xFC , 0xC4 , 0x00 , 0x00 , 0xC4 , 0x3C , 0x0C , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x0F , 0x1E , 0x0E , 0x01 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x3C , 0xFC , 0xC4 , 0x00 , 0xE4 , 0x7C , 0xFC , 0x84 , 0x80 , 0x7C , 0x04 , 0x00 , 0x00 , 0x07 , 0x1F , 0x07 , 0x00 , 0x00 , 0x07 , 0x1F , 0x07 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x04 , 0x1C , 0x7C , 0xE4 , 0xC0 , 0x34 , 0x1C , 0x04 , 0x04 , 0x00 , 0x00 , 0x10 , 0x10 , 0x1C , 0x16 , 0x01 , 0x13 , 0x1F , 0x1C , 0x18 , 0x10 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x04 , 0x0C , 0x3C , 0xFC , 0xC4 , 0x00 , 0xC4 , 0x3C , 0x04 , 0x04 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x80 , 0xC1 , 0x37 , 0x0E , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1C , 0x04 , 0x04 , 0xC4 , 0xF4 , 0x7C , 0x1C , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x1C , 0x1F , 0x17 , 0x11 , 0x10 , 0x10 , 0x18 , 0x0E , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xF8 , 0x0C , 0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x28 , 0xEF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3F , 0x60 , 0x40 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x00 , 0x04 , 0x0C , 0xF8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF , 0x28 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x60 , 0x3F , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } , { 0x00 , 0x18 , 0x06 , 0x02 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x20 , 0x30 , 0x08 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
} ; const ASCIIFont afont24x12 = { 24 , 12 , ( unsigned char * ) ascii_24x12} ; const uint8_t zh16x16[ ] [ 36 ] = {
{ 0xe6 , 0xac , 0xa1 , 0x00 , 0x00 , 0x02 , 0x0c , 0x80 , 0x60 , 0x80 , 0x40 , 0x30 , 0x0f , 0xc8 , 0x08 , 0x08 , 0x28 , 0x18 , 0x00 , 0x00 , 0x02 , 0x02 , 0x7e , 0x01 , 0x80 , 0x40 , 0x20 , 0x18 , 0x06 , 0x01 , 0x06 , 0x18 , 0x20 , 0x40 , 0x80 , 0x00 , } ,
{ 0xe6 , 0x95 , 0xb0 , 0x00 , 0x90 , 0x52 , 0x34 , 0x10 , 0xff , 0x10 , 0x34 , 0x52 , 0x80 , 0x70 , 0x8f , 0x08 , 0x08 , 0xf8 , 0x08 , 0x00 , 0x82 , 0x9a , 0x56 , 0x63 , 0x22 , 0x52 , 0x8e , 0x00 , 0x80 , 0x40 , 0x33 , 0x0c , 0x33 , 0x40 , 0x80 , 0x00 , }
} ;
const Font font16x16 = { . w = 16 , . h = 16 , . chars = ( const uint8_t * ) zh16x16, . len = sizeof ( zh16x16) / 36 , . ascii = & afont16x8} ; const uint8_t bilibiliData[ ] = {
0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x86 , 0x8f , 0x9f , 0xbf , 0xff , 0xfc , 0xf8 , 0xf8 , 0xe0 , 0xe0 , 0xc0 , 0x80 ,
0x80 , 0x80 , 0x80 , 0x80 , 0xc0 , 0xe0 , 0xe0 , 0xf8 , 0xf8 , 0xfc , 0xfe , 0xbf , 0x9f , 0x8f , 0x86 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x80 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0xf8 , 0xfe , 0xff , 0xff , 0xff , 0xff , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f ,
0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f ,
0xff , 0xff , 0xff , 0xfe , 0xfc , 0xf8 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0x00 , 0x00 , 0x00 , 0xe0 , 0xe0 , 0xf0 , 0xf0 , 0xf0 , 0xf0 , 0xf8 , 0xf8 , 0xf8 ,
0xf8 , 0xf8 , 0xf8 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xf8 , 0xf8 , 0xf8 , 0xf8 , 0xf8 , 0xf8 , 0xf0 , 0xf0 , 0xf0 , 0xf0 , 0xe0 ,
0x20 , 0x00 , 0x00 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x00 , 0x00 , 0x80 , 0xc0 , 0xc0 , 0x80 , 0x00 , 0x00 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 ,
0x01 , 0x03 , 0x03 , 0x00 , 0x00 , 0x00 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x07 , 0x07 , 0x07 , 0x07 , 0x07 , 0x03 , 0x07 , 0x07 , 0x07 , 0x07 , 0x07 , 0x03 , 0x01 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0x01 , 0x07 , 0x07 , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f ,
0x1f , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f ,
0x1f , 0x1f , 0x7f , 0xff , 0xff , 0xff , 0xff , 0xff , 0x7f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x1f , 0x07 , 0x07 , 0x03 ,
} ;
const Image bilibiliImg = { 51 , 48 , bilibiliData} ;
# include "oled.h"
# include "i2c.h"
# include <math.h>
# include <stdlib.h>
# define OLED_ADDRESS 0x78
# define OLED_PAGE 8
# define OLED_ROW 8 * OLED_PAGE
# define OLED_COLUMN 128
uint8_t OLED_GRAM[ OLED_PAGE] [ OLED_COLUMN] ;
void OLED_Send ( uint8_t * data, uint8_t len)
{ HAL_I2C_Master_Transmit ( & hi2c2, OLED_ADDRESS, data, len, HAL_MAX_DELAY) ;
}
void OLED_SendCmd ( uint8_t cmd)
{ static uint8_t sendBuffer[ 2 ] = { 0 } ; sendBuffer[ 1 ] = cmd; OLED_Send ( sendBuffer, 2 ) ;
}
void OLED_Init ( )
{ HAL_Delay ( 20 ) ; OLED_SendCmd ( 0xAE ) ; OLED_SendCmd ( 0x20 ) ; OLED_SendCmd ( 0x10 ) ; OLED_SendCmd ( 0xB0 ) ; OLED_SendCmd ( 0xC8 ) ; OLED_SendCmd ( 0x00 ) ; OLED_SendCmd ( 0x10 ) ; OLED_SendCmd ( 0x40 ) ; OLED_SendCmd ( 0x81 ) ; OLED_SendCmd ( 0xDF ) ; OLED_SendCmd ( 0xA1 ) ; OLED_SendCmd ( 0xA6 ) ; OLED_SendCmd ( 0xA8 ) ; OLED_SendCmd ( 0x3F ) ; OLED_SendCmd ( 0xA4 ) ; OLED_SendCmd ( 0xD3 ) ; OLED_SendCmd ( 0x00 ) ; OLED_SendCmd ( 0xD5 ) ; OLED_SendCmd ( 0xF0 ) ; OLED_SendCmd ( 0xD9 ) ; OLED_SendCmd ( 0x22 ) ; OLED_SendCmd ( 0xDA ) ; OLED_SendCmd ( 0x12 ) ; OLED_SendCmd ( 0xDB ) ; OLED_SendCmd ( 0x20 ) ; OLED_SendCmd ( 0x8D ) ; OLED_SendCmd ( 0x14 ) ; OLED_NewFrame ( ) ; OLED_ShowFrame ( ) ; OLED_SendCmd ( 0xAF ) ;
}
void OLED_DisPlay_On ( )
{ OLED_SendCmd ( 0x8D ) ; OLED_SendCmd ( 0x14 ) ; OLED_SendCmd ( 0xAF ) ;
}
void OLED_DisPlay_Off ( )
{ OLED_SendCmd ( 0x8D ) ; OLED_SendCmd ( 0x10 ) ; OLED_SendCmd ( 0xAE ) ;
}
void OLED_SetColorMode ( OLED_ColorMode mode)
{ if ( mode == OLED_COLOR_NORMAL) { OLED_SendCmd ( 0xA6 ) ; } if ( mode == OLED_COLOR_REVERSED) { OLED_SendCmd ( 0xA7 ) ; }
}
void OLED_NewFrame ( )
{ memset ( OLED_GRAM, 0 , sizeof ( OLED_GRAM) ) ;
}
void OLED_ShowFrame ( )
{ static uint8_t sendBuffer[ OLED_COLUMN + 1 ] ; sendBuffer[ 0 ] = 0x40 ; for ( uint8_t i = 0 ; i < OLED_PAGE; i++ ) { OLED_SendCmd ( 0xB0 + i) ; OLED_SendCmd ( 0x00 ) ; OLED_SendCmd ( 0x10 ) ; memcpy ( sendBuffer + 1 , OLED_GRAM[ i] , OLED_COLUMN) ; OLED_Send ( sendBuffer, OLED_COLUMN + 1 ) ; }
}
void OLED_SetPixel ( uint8_t x, uint8_t y, OLED_ColorMode color)
{ if ( x >= OLED_COLUMN || y >= OLED_ROW) return ; if ( ! color) { OLED_GRAM[ y / 8 ] [ x] |= 1 << ( y % 8 ) ; } else { OLED_GRAM[ y / 8 ] [ x] &= ~ ( 1 << ( y % 8 ) ) ; }
}
void OLED_SetByte_Fine ( uint8_t page, uint8_t column, uint8_t data, uint8_t start, uint8_t end, OLED_ColorMode color)
{ static uint8_t temp; if ( page >= OLED_PAGE || column >= OLED_COLUMN) return ; if ( color) data = ~ data; temp = data | ( 0xff << ( end + 1 ) ) | ( 0xff >> ( 8 - start) ) ; OLED_GRAM[ page] [ column] &= temp; temp = data & ~ ( 0xff << ( end + 1 ) ) & ~ ( 0xff >> ( 8 - start) ) ; OLED_GRAM[ page] [ column] |= temp;
}
void OLED_SetByte ( uint8_t page, uint8_t column, uint8_t data, OLED_ColorMode color)
{ if ( page >= OLED_PAGE || column >= OLED_COLUMN) return ; if ( color) data = ~ data; OLED_GRAM[ page] [ column] = data;
}
void OLED_SetBits_Fine ( uint8_t x, uint8_t y, uint8_t data, uint8_t len, OLED_ColorMode color)
{ uint8_t page = y / 8 ; uint8_t bit = y % 8 ; if ( bit + len > 8 ) { OLED_SetByte_Fine ( page, x, data << bit, bit, 7 , color) ; OLED_SetByte_Fine ( page + 1 , x, data >> ( 8 - bit) , 0 , len + bit - 1 - 8 , color) ; } else { OLED_SetByte_Fine ( page, x, data << bit, bit, bit + len - 1 , color) ; }
}
void OLED_SetBits ( uint8_t x, uint8_t y, uint8_t data, OLED_ColorMode color)
{ uint8_t page = y / 8 ; uint8_t bit = y % 8 ; OLED_SetByte_Fine ( page, x, data << bit, bit, 7 , color) ; if ( bit) { OLED_SetByte_Fine ( page + 1 , x, data >> ( 8 - bit) , 0 , bit - 1 , color) ; }
}
void OLED_SetBlock ( uint8_t x, uint8_t y, const uint8_t * data, uint8_t w, uint8_t h, OLED_ColorMode color)
{ uint8_t fullRow = h / 8 ; uint8_t partBit = h % 8 ; for ( uint8_t i = 0 ; i < w; i++ ) { for ( uint8_t j = 0 ; j < fullRow; j++ ) { OLED_SetBits ( x + i, y + j * 8 , data[ i + j * w] , color) ; } } if ( partBit) { uint16_t fullNum = w * fullRow; for ( uint8_t i = 0 ; i < w; i++ ) { OLED_SetBits_Fine ( x + i, y + ( fullRow * 8 ) , data[ fullNum + i] , partBit, color) ; } }
}
void OLED_DrawLine ( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, OLED_ColorMode color)
{ static uint8_t temp = 0 ; if ( x1 == x2) { if ( y1 > y2) { temp = y1; y1 = y2; y2 = temp; } for ( uint8_t y = y1; y <= y2; y++ ) { OLED_SetPixel ( x1, y, color) ; } } else if ( y1 == y2) { if ( x1 > x2) { temp = x1; x1 = x2; x2 = temp; } for ( uint8_t x = x1; x <= x2; x++ ) { OLED_SetPixel ( x, y1, color) ; } } else { int16_t dx = x2 - x1; int16_t dy = y2 - y1; int16_t ux = ( ( dx > 0 ) << 1 ) - 1 ; int16_t uy = ( ( dy > 0 ) << 1 ) - 1 ; int16_t x = x1, y = y1, eps = 0 ; dx = abs ( dx) ; dy = abs ( dy) ; if ( dx > dy) { for ( x = x1; x != x2; x += ux) { OLED_SetPixel ( x, y, color) ; eps += dy; if ( ( eps << 1 ) >= dx) { y += uy; eps -= dx; } } } else { for ( y = y1; y != y2; y += uy) { OLED_SetPixel ( x, y, color) ; eps += dx; if ( ( eps << 1 ) >= dy) { x += ux; eps -= dy; } } } }
}
void OLED_DrawRectangle ( uint8_t x, uint8_t y, uint8_t w, uint8_t h, OLED_ColorMode color)
{ OLED_DrawLine ( x, y, x + w, y, color) ; OLED_DrawLine ( x, y + h, x + w, y + h, color) ; OLED_DrawLine ( x, y, x, y + h, color) ; OLED_DrawLine ( x + w, y, x + w, y + h, color) ;
}
void OLED_DrawFilledRectangle ( uint8_t x, uint8_t y, uint8_t w, uint8_t h, OLED_ColorMode color)
{ for ( uint8_t i = 0 ; i < h; i++ ) { OLED_DrawLine ( x, y + i, x + w, y + i, color) ; }
}
void OLED_DrawTriangle ( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t x3, uint8_t y3, OLED_ColorMode color)
{ OLED_DrawLine ( x1, y1, x2, y2, color) ; OLED_DrawLine ( x2, y2, x3, y3, color) ; OLED_DrawLine ( x3, y3, x1, y1, color) ;
}
void OLED_DrawFilledTriangle ( uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t x3, uint8_t y3, OLED_ColorMode color)
{ uint8_t a = 0 , b = 0 , y = 0 , last = 0 ; if ( y1 > y2) { a = y2; b = y1; } else { a = y1; b = y2; } y = a; for ( ; y <= b; y++ ) { if ( y <= y3) { OLED_DrawLine ( x1 + ( y - y1) * ( x2 - x1) / ( y2 - y1) , y, x1 + ( y - y1) * ( x3 - x1) / ( y3 - y1) , y, color) ; } else { last = y - 1 ; break ; } } for ( ; y <= b; y++ ) { OLED_DrawLine ( x2 + ( y - y2) * ( x3 - x2) / ( y3 - y2) , y, x1 + ( y - last) * ( x3 - x1) / ( y3 - last) , y, color) ; }
}
void OLED_DrawCircle ( uint8_t x, uint8_t y, uint8_t r, OLED_ColorMode color)
{ int16_t a = 0 , b = r, di = 3 - ( r << 1 ) ; while ( a <= b) { OLED_SetPixel ( x - b, y - a, color) ; OLED_SetPixel ( x + b, y - a, color) ; OLED_SetPixel ( x - a, y + b, color) ; OLED_SetPixel ( x - b, y - a, color) ; OLED_SetPixel ( x - a, y - b, color) ; OLED_SetPixel ( x + b, y + a, color) ; OLED_SetPixel ( x + a, y - b, color) ; OLED_SetPixel ( x + a, y + b, color) ; OLED_SetPixel ( x - b, y + a, color) ; a++ ; if ( di < 0 ) { di += 4 * a + 6 ; } else { di += 10 + 4 * ( a - b) ; b-- ; } OLED_SetPixel ( x + a, y + b, color) ; }
}
void OLED_DrawFilledCircle ( uint8_t x, uint8_t y, uint8_t r, OLED_ColorMode color)
{ int16_t a = 0 , b = r, di = 3 - ( r << 1 ) ; while ( a <= b) { for ( int16_t i = x - b; i <= x + b; i++ ) { OLED_SetPixel ( i, y + a, color) ; OLED_SetPixel ( i, y - a, color) ; } for ( int16_t i = x - a; i <= x + a; i++ ) { OLED_SetPixel ( i, y + b, color) ; OLED_SetPixel ( i, y - b, color) ; } a++ ; if ( di < 0 ) { di += 4 * a + 6 ; } else { di += 10 + 4 * ( a - b) ; b-- ; } }
}
void OLED_DrawEllipse ( uint8_t x, uint8_t y, uint8_t a, uint8_t b, OLED_ColorMode color)
{ int xpos = 0 , ypos = b; int a2 = a * a, b2 = b * b; int d = b2 + a2 * ( 0.25 - b) ; while ( a2 * ypos > b2 * xpos) { OLED_SetPixel ( x + xpos, y + ypos, color) ; OLED_SetPixel ( x - xpos, y + ypos, color) ; OLED_SetPixel ( x + xpos, y - ypos, color) ; OLED_SetPixel ( x - xpos, y - ypos, color) ; if ( d < 0 ) { d = d + b2 * ( ( xpos << 1 ) + 3 ) ; xpos += 1 ; } else { d = d + b2 * ( ( xpos << 1 ) + 3 ) + a2 * ( - ( ypos << 1 ) + 2 ) ; xpos += 1 , ypos -= 1 ; } } d = b2 * ( xpos + 0.5 ) * ( xpos + 0.5 ) + a2 * ( ypos - 1 ) * ( ypos - 1 ) - a2 * b2; while ( ypos > 0 ) { OLED_SetPixel ( x + xpos, y + ypos, color) ; OLED_SetPixel ( x - xpos, y + ypos, color) ; OLED_SetPixel ( x + xpos, y - ypos, color) ; OLED_SetPixel ( x - xpos, y - ypos, color) ; if ( d < 0 ) { d = d + b2 * ( ( xpos << 1 ) + 2 ) + a2 * ( - ( ypos << 1 ) + 3 ) ; xpos += 1 , ypos -= 1 ; } else { d = d + a2 * ( - ( ypos << 1 ) + 3 ) ; ypos -= 1 ; } }
}
void OLED_DrawImage ( uint8_t x, uint8_t y, const Image * img, OLED_ColorMode color)
{ OLED_SetBlock ( x, y, img-> data, img-> w, img-> h, color) ;
}
void OLED_PrintASCIIChar ( uint8_t x, uint8_t y, char ch, const ASCIIFont * font, OLED_ColorMode color)
{ OLED_SetBlock ( x, y, font-> chars + ( ch - ' ' ) * ( ( ( font-> h + 7 ) / 8 ) * font-> w) , font-> w, font-> h, color) ;
}
void OLED_PrintASCIIString ( uint8_t x, uint8_t y, char * str, const ASCIIFont * font, OLED_ColorMode color)
{ uint8_t x0 = x; while ( * str) { OLED_PrintASCIIChar ( x0, y, * str, font, color) ; x0 += font-> w; str++ ; }
}
uint8_t _OLED_GetUTF8Len ( char * string)
{ if ( ( string[ 0 ] & 0x80 ) == 0x00 ) { return 1 ; } else if ( ( string[ 0 ] & 0xE0 ) == 0xC0 ) { return 2 ; } else if ( ( string[ 0 ] & 0xF0 ) == 0xE0 ) { return 3 ; } else if ( ( string[ 0 ] & 0xF8 ) == 0xF0 ) { return 4 ; } return 0 ;
}
void OLED_PrintString ( uint8_t x, uint8_t y, char * str, const Font * font, OLED_ColorMode color)
{ uint16_t i = 0 ; uint8_t oneLen = ( ( ( font-> h + 7 ) / 8 ) * font-> w) + 4 ; uint8_t found; uint8_t utf8Len; uint8_t * head; while ( str[ i] ) { found = 0 ; utf8Len = _OLED_GetUTF8Len ( str + i) ; if ( utf8Len == 0 ) break ; for ( uint8_t j = 0 ; j < font-> len; j++ ) { head = ( uint8_t * ) ( font-> chars) + ( j * oneLen) ; if ( memcmp ( str + i, head, utf8Len) == 0 ) { OLED_SetBlock ( x, y, head + 4 , font-> w, font-> h, color) ; x += font-> w; i += utf8Len; found = 1 ; break ; } } if ( found == 0 ) { if ( utf8Len == 1 ) { OLED_PrintASCIIChar ( x, y, str[ i] , font-> ascii, color) ; x += font-> ascii-> w; i += utf8Len; } else { OLED_PrintASCIIChar ( x, y, ' ' , font-> ascii, color) ; x += font-> ascii-> w; i += utf8Len; } } }
}
2. 主程序部分
再main.c中添加OLED的头文件和stdio.h文件
# include "oled.h"
# include <stdio.h>
OLED_Init ( ) ; HAL_TIM_Base_Start ( & htim2) ; int counter = 0 ; char message[ 20 ] ; while ( 1 ) { OLED_NewFrame ( ) ; counter = __HAL_TIM_GET_COUNTER ( & htim2) ; sprintf ( message, "次数: %d" , counter) ; OLED_PrintString ( 0 , 0 , message, & font16x16, OLED_COLOR_NORMAL) ; OLED_ShowFrame ( ) ; HAL_Delay ( 200 ) ; }
当在PA0引脚接一个开关,按动开关,我们发现记录的次数是跳动上涨的,这是因为我们没有使用输入滤波器,我们将滤波器设置成16,保存代码,编译下载,发现不会跳动上涨,而是正常1个数1个数的上涨。
3、外部始种模式1
在模式配置中修改成这样,保存编译下载,还是一样,成功