OLED显示汉字(SPI,7针OLED,汉字字模,STM32学习笔记)

目录

1.取字模 

打开设置

 设置为如下格式

设置字体和宽高

输入你想取的汉字

生成字模后放到文件中    

2.工程文件方面

字模库

OLED_ShowCHINESE

OLED_SetCursor

OLED_WriteData

OLED_SPI_Init

3.最后结果显现:


1.取字模 

(取字模软件  这边采用PCtolLCD2002) 

百度网盘链接:https://pan.baidu.com/s/177YK6uLoMjWYIwV6rO5CmA?pwd=sipr 
提取码:sipr   

(连接如果失效 请+Q 1125343257)

打开设置

 设置为如下格式

 (必须是C51)

设置字体和宽高

输入你想取的汉字

 

生成字模后放到文件中    

比如自建一个font.h文件放入数组中

下面是显示汉字的代码(适用于SPI 7针0.96寸OLED)

2.工程文件方面

字模库

const u8  IloveYou[][16]=
{
	
{0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00},
{0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00},/*"我",0*/
/* (16 X 16 , 宋体 )*/

{0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00},
{0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00},/*"爱",1*/
/* (16 X 16 , 宋体 )*/

{0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00},
{0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00},/*"你",2*/
/* (16 X 16 , 宋体 )*/

OLED_ShowCHINESE

(select选择字模库,可以删去)

/*显示汉字*/
/**************************************
*   函 数 名: OLED_ShowCHINESE
*   功能说明: 显示汉字
*   形    参:Line 起始行位置
*   形    参:Column 起始列位置
*   形    参:num字模库的下标位置
*   形    参:select 第几个字模库  1 ASCALL   2  HZ  常用汉字   3 额外
*   返 回 值: 无
*************************************/
void OLED_ShowCHINESE(uint8_t Line, uint8_t Column, uint8_t Num,uint8_t select)
{
	
	uint8_t i;
	uint8_t wide = 16;//字宽
	
	OLED_SetCursor(( Line - 1 ) * 2, ( Column - 1 )* wide);		//参数1:把光标设置在第几页. 参数2:把光标设置在第几列
	
	if(select ==1)//ASCALL库
	{
		for (i = 0; i < wide; i++)
		{
			OLED_WriteData(ASCALL[2*Num][i]);			//显示上半部分内容
		}
		OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
		for (i = 0; i < wide ; i++)
		{ 
			OLED_WriteData(ASCALL[2*Num][i+wide]);		//显示下半部分内容
		}
	}
	else if(select ==2)//汉字库
	{
		for (i = 0; i < wide; i++)
		{
			OLED_WriteData(HZ[2*Num][i]);			//显示上半部分内容
		}
		OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
		for (i = 0; i < wide ; i++)
		{ 
			OLED_WriteData(HZ[2*Num][i+wide]);		//显示下半部分内容
		}
	}
	else if(select ==3)//额外
	{
		for (i = 0; i < wide; i++)
		{
			OLED_WriteData(IloveYou[2*Num][i]);			//显示上半部分内容
		}
		OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
		for (i = 0; i < wide ; i++)
		{ 
			OLED_WriteData(IloveYou[2*Num][i+wide]);		//显示下半部分内容
		}
	}
}

其中需要几个代码

OLED_SetCursor

/*OLED设置光标位置*/
/**************************************
*   函 数 名: OLED_SetCursor
*   功能说明: OLED写命令
*   形    参: Y 以左上角为原点,向下方向的坐标,范围:0~7
			  X 以左上角为原点,向右方向的坐标,范围:0~127
*   返 回 值: 无
*************************************/
void OLED_SetCursor(uint8_t Y, uint8_t X)
{
	OLED_WriteCommand(0xB0 | Y);					//设置Y位置
	OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));	//设置X位置高4位
	OLED_WriteCommand(0x00 | (X & 0x0F));			//设置X位置低4位
}

OLED_WriteData

/*OLED写数据*/
/**************************************
*   函 数 名: OLED_WriteData
*   功能说明: OLED写命令
*   形    参: Data 要写入的数据
*   返 回 值: 无
*************************************/
void OLED_WriteData(uint8_t Data)
{
	OLED_W_CS(0);
	OLED_W_DC(1);
	OLED_SPI_SendByte(Data);
	OLED_W_CS(1);
}

OLED_SPI_Init

/*引脚配置*/
#define OLED_D0_Pin			GPIO_Pin_12
#define OLED_D0_Port		GPIOB
#define OLED_D1_Pin			GPIO_Pin_13
#define OLED_D1_Port		GPIOB
#define OLED_RES_Pin		GPIO_Pin_14
#define OLED_RES_Port		GPIOB
#define OLED_DC_Pin			GPIO_Pin_15
#define OLED_DC_Port		GPIOB
#define OLED_CS_Pin			GPIO_Pin_8
#define OLED_CS_Port		GPIOA

//初始化置高
#define OLED_W_D0(x)		GPIO_WriteBit(GPIOB, OLED_D0_Pin, (BitAction)(x))
#define OLED_W_D1(x)		GPIO_WriteBit(GPIOB, OLED_D1_Pin, (BitAction)(x))
#define OLED_W_RES(x)		GPIO_WriteBit(GPIOB, OLED_RES_Pin, (BitAction)(x))
#define OLED_W_DC(x)		GPIO_WriteBit(GPIOB, OLED_DC_Pin, (BitAction)(x))
#define OLED_W_CS(x)		GPIO_WriteBit(GPIOA, OLED_CS_Pin, (BitAction)(x))

/*SPI引脚初始化*/
/**************************************
*   函 数 名: OLED_SPI_Init
*   功能说明: SPI引脚初始化
*   形    参: 无
*   返 回 值: 无
*************************************/
void OLED_SPI_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Pin = OLED_D0_Pin;
 	GPIO_Init(OLED_D0_Port, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = OLED_D1_Pin;
 	GPIO_Init(OLED_D1_Port, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = OLED_RES_Pin;
 	GPIO_Init(OLED_RES_Port, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = OLED_DC_Pin;
 	GPIO_Init(OLED_DC_Port, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = OLED_CS_Pin;
 	GPIO_Init(OLED_CS_Port, &GPIO_InitStructure);
	
	OLED_W_D0(1);
	OLED_W_D1(1);
	OLED_W_RES(1);
	OLED_W_DC(1);
	OLED_W_CS(1);
}

3.最后结果显现:

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值