目录
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);
}