江科大stm32 | OLED显示汉字

1.引言

项目源码、取模软件在以下地址:

https://gitee.com/hee-hee-not-bald/stm32_learning.git

硬件介绍

4针口的OLED

取模软件

下面这个.exe

打开后

显示效果

2.取模软件使用

设置

(1)字宽 20 ;字高 16;取消勾选"等比缩放"

(2)内部设置

点击这个齿轮

配置以下

生成字模

(1)在红色框中输入想要显示的中文,点击"生成字模"

(2)复制绿色框中显示对应中文的数组

具体为以下:

【这是多行多组的写法,此写法keil运行会乱码】

复制代码
{0x00,0x40,0x44,0x44,0xC4,0xE4,0x64,0x5E,0x54,0xE4,0x54,0x54,0x5E,0x56,0xD4,0xC4},
{0x44,0x44,0x40,0x00,0x00,0x00,0x40,0x40,0x5F,0x5A,0x5B,0x5B,0x5B,0x7F,0x5B,0x5B},
{0x5B,0x5B,0x5A,0x5F,0x40,0x40,0x00,0x00},/*"董",0*/
{0x00,0x00,0x84,0x84,0x84,0xFC,0xCC,0xCC,0xCC,0xCC,0xFC,0x84,0x84,0x84,0x7C,0x84},
{0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x1C,0x12,0x12,0x12,0x12,0x1E,0x00},
{0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x00},/*"哥",1*/
{0x00,0x00,0x40,0x40,0x50,0x48,0x48,0x48,0x48,0xFE,0x8A,0x48,0x48,0x48,0x48,0x48},
{0x40,0x40,0x00,0x00,0x00,0x80,0x40,0x20,0x1C,0x0F,0x10,0x10,0x20,0x3F,0x44,0x44},
{0x44,0x44,0x44,0x42,0x40,0x40,0x00,0x00},/*"走",2*/
{0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x80,0x40,0xB0,0x9C,0x96,0x90,0x90,0x90,0x90},
{0x10,0x10,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x0F,0x00,0x00,0x70,0x48,0x44},
{0x42,0x41,0x41,0x40,0x40,0x78,0x00,0x00},/*"吃",3*/
{0x00,0x80,0x60,0x1C,0x96,0x10,0x30,0x10,0x10,0xFC,0x24,0xC4,0x24,0x24,0x24,0xA4},
{0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x10,0x48,0x24,0x18,0x47,0x40,0x21},
{0x16,0x08,0x14,0x23,0x60,0x40,0x40,0x00},/*"饭",4*/

(3)易错:将刚刚复制 多行多组的数组 传给ai,帮我们转成 单行连续

复制代码
    /* "董",0 */
    {0x00,0x40,0x44,0x44,0xC4,0xE4,0x64,0x5E,0x54,0xE4,0x54,0x54,0x5E,0x56,0xD4,0xC4,
     0x44,0x44,0x40,0x00,0x00,0x00,0x40,0x40,0x5F,0x5A,0x5B,0x5B,0x5B,0x7F,0x5B,0x5B,
     0x5B,0x5B,0x5A,0x5F,0x40,0x40,0x00,0x00},

    /* "哥",1 */
    {0x00,0x00,0x84,0x84,0x84,0xFC,0xCC,0xCC,0xCC,0xCC,0xFC,0x84,0x84,0x84,0x7C,0x84,
     0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x1C,0x12,0x12,0x12,0x12,0x1E,0x00,
     0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x00},

    /* "走",2 */
    {0x00,0x00,0x40,0x40,0x50,0x48,0x48,0x48,0x48,0xFE,0x8A,0x48,0x48,0x48,0x48,0x48,
     0x40,0x40,0x00,0x00,0x00,0x80,0x40,0x20,0x1C,0x0F,0x10,0x10,0x20,0x3F,0x44,0x44,
     0x44,0x44,0x44,0x42,0x40,0x40,0x00,0x00},

    /* "吃",3 */
    {0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x80,0x40,0xB0,0x9C,0x96,0x90,0x90,0x90,0x90,
     0x10,0x10,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x0F,0x00,0x00,0x70,0x48,0x44,
     0x42,0x41,0x41,0x40,0x40,0x78,0x00,0x00},

    /* "饭",4 */
    {0x00,0x80,0x60,0x1C,0x96,0x10,0x30,0x10,0x10,0xFC,0x24,0xC4,0x24,0x24,0x24,0xA4,
     0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x10,0x48,0x24,0x18,0x47,0x40,0x21,
     0x16,0x08,0x14,0x23,0x60,0x40,0x40,0x00},

3.代码

在 OLED.c 文件中添加显示中文函数 OLED_ShowCN

(注意:此时的字宽是20)

复制代码
//显示中文
void OLED_ShowCN(uint8_t Line, uint8_t Column, uint8_t Num)  
{      	
	uint8_t i;
	uint8_t wide=20;//字宽
	
	OLED_SetCursor((Line-1)*2, (Column-1)*wide);		//参数1:把光标设置在第几页. 参数2:把光标设置在第几列
	for (i = 0; i < wide; i++)
	{
		OLED_WriteData(OLED_F10x16[Num][i]);			//显示上半部分内容
	}
	
	OLED_SetCursor((Line-1)*2+1,(Column-1)*wide);		
	for (i = 0; i < wide; i++)
	{
		OLED_WriteData(OLED_F10x16[Num][i+wide]);		//显示下半部分内容
	}
 
}

在 OLED_Font.h 文件中添加显示对应中文的字模数组

注意[40]

这里我的设置是字宽 20 ;字高 16,所以是40

若字宽 16 ;字高 16,应对应是32

复制代码
//对应中文的数组
const uint8_t OLED_F10x16[][40]=
{ 
    /* "董",0 */
    {0x00,0x40,0x44,0x44,0xC4,0xE4,0x64,0x5E,0x54,0xE4,0x54,0x54,0x5E,0x56,0xD4,0xC4,
     0x44,0x44,0x40,0x00,0x00,0x00,0x40,0x40,0x5F,0x5A,0x5B,0x5B,0x5B,0x7F,0x5B,0x5B,
     0x5B,0x5B,0x5A,0x5F,0x40,0x40,0x00,0x00},

    /* "哥",1 */
    {0x00,0x00,0x84,0x84,0x84,0xFC,0xCC,0xCC,0xCC,0xCC,0xFC,0x84,0x84,0x84,0x7C,0x84,
     0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x1C,0x12,0x12,0x12,0x12,0x1E,0x00,
     0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x00},

    /* "走",2 */
    {0x00,0x00,0x40,0x40,0x50,0x48,0x48,0x48,0x48,0xFE,0x8A,0x48,0x48,0x48,0x48,0x48,
     0x40,0x40,0x00,0x00,0x00,0x80,0x40,0x20,0x1C,0x0F,0x10,0x10,0x20,0x3F,0x44,0x44,
     0x44,0x44,0x44,0x42,0x40,0x40,0x00,0x00},

    /* "吃",3 */
    {0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x80,0x40,0xB0,0x9C,0x96,0x90,0x90,0x90,0x90,
     0x10,0x10,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x0F,0x00,0x00,0x70,0x48,0x44,
     0x42,0x41,0x41,0x40,0x40,0x78,0x00,0x00},

    /* "饭",4 */
    {0x00,0x80,0x60,0x1C,0x96,0x10,0x30,0x10,0x10,0xFC,0x24,0xC4,0x24,0x24,0x24,0xA4,
     0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x10,0x48,0x24,0x18,0x47,0x40,0x21,
     0x16,0x08,0x14,0x23,0x60,0x40,0x40,0x00},
     	  
 };
相关推荐
来自晴朗的明天3 小时前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
钰珠AIOT3 小时前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠3 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠14 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200517 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT18 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen19 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠21 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_21 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件