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~7X 以左上角为原点,向右方向的坐标,范围: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.最后结果显现:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部