STM32HAL库驱动I2C协议的OLED屏幕

STM32HAL库驱动I2C协议的OLED屏幕

前情提要: https://lyphix.im/?p=312

1.cubeIDE概览

接上文:当我们点击Open Project之后,会自动跳转到cubeIDE,我们打开main文件,如图

左侧是项目结构,很好理解,Src是.c文件,Inc是.h文件

如果你发现你的文件结构跟我不一样,存在一个CORE文件夹,那是在MX中结构选择了advance

adv的结构如图

平时编程中最常使用的注释快捷键是ctrl+7

如果直接在IDE中打开ioc文件,可以直接调整,也十分方便

2.移植OLED驱动

1.oled.c文件

起名oled.c 后缀需要自己打,不要忘了
写注释是个好习惯

接下来添加以下代码,我从oled给的例程中修改得到:

#include "stm32f1xx_hal.h"
#include "oled.h"
#include "oledfont.h"
#include "main.h"

I2C_HandleTypeDef hi2c1;
void WriteCmd(unsigned char I2C_Command)//写命令
 {

		HAL_I2C_Mem_Write(&hi2c1,OLED0561_ADD,COM,I2C_MEMADD_SIZE_8BIT,&I2C_Command,1,100);

 }

void WriteDat(unsigned char I2C_Data)//写数据

 {

		HAL_I2C_Mem_Write(&hi2c1,OLED0561_ADD,DAT,I2C_MEMADD_SIZE_8BIT,&I2C_Data,1,100);

  }

	void OLED_Init(void)
{
	HAL_Delay(100); //这里的延时很重要

	WriteCmd(0xAE); //display off
	WriteCmd(0x20);	//Set Memory Addressing Mode
	WriteCmd(0x10);	//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
	WriteCmd(0xb0);	//Set Page Start Address for Page Addressing Mode,0-7
	WriteCmd(0xc8);	//Set COM Output Scan Direction
	WriteCmd(0x00); //---set low column address
	WriteCmd(0x10); //---set high column address
	WriteCmd(0x40); //--set start line address
	WriteCmd(0x81); //--set contrast control register
	WriteCmd(0xff); //亮度调节 0x00~0xff
	WriteCmd(0xa1); //--set segment re-map 0 to 127
	WriteCmd(0xa6); //--set normal display
	WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
	WriteCmd(0x3F); //
	WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
	WriteCmd(0xd3); //-set display offset
	WriteCmd(0x00); //-not offset
	WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
	WriteCmd(0xf0); //--set divide ratio
	WriteCmd(0xd9); //--set pre-charge period
	WriteCmd(0x22); //
	WriteCmd(0xda); //--set com pins hardware configuration
	WriteCmd(0x12);
	WriteCmd(0xdb); //--set vcomh
	WriteCmd(0x20); //0x20,0.77xVcc
	WriteCmd(0x8d); //--set DC-DC enable
	WriteCmd(0x14); //
	WriteCmd(0xaf); //--turn on oled panel
}

void OLED_SetPos(unsigned char x, unsigned char y) //设置起始点坐标
{
	WriteCmd(0xb0+y);
	WriteCmd(((x&0xf0)>>4)|0x10);
	WriteCmd((x&0x0f)|0x01);
}

void OLED_Fill(unsigned char fill_Data)//全屏填充
{
	unsigned char m,n;
	for(m=0;m<8;m++)
	{
		WriteCmd(0xb0+m);		//page0-page1
		WriteCmd(0x00);		//low column start address
		WriteCmd(0x10);		//high column start address
		for(n=0;n<128;n++)
			{
				WriteDat(fill_Data);
			}
	}
}


void OLED_CLS(void)//清屏
{
	OLED_Fill(0x00);
}

void OLED_ON(void)
{
	WriteCmd(0X8D);  //设置电荷泵
	WriteCmd(0X14);  //开启电荷泵
	WriteCmd(0XAF);  //OLED唤醒
}

void OLED_OFF(void)
{
	WriteCmd(0X8D);  //设置电荷泵
	WriteCmd(0X10);  //关闭电荷泵
	WriteCmd(0XAE);  //OLED休眠
}


// Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
{
	unsigned char c = 0,i = 0,j = 0;
	switch(TextSize)
	{
		case 1:
		{
			while(ch[j] != '\0')
			{
				c = ch[j] - 32;
				if(x > 126)
				{
					x = 0;
					y++;
				}
				OLED_SetPos(x,y);
				for(i=0;i<6;i++)
					WriteDat(F6x8[c][i]);
				x += 6;
				j++;
			}
		}break;
		case 2:
		{
			while(ch[j] != '\0')
			{
				c = ch[j] - 32;
				if(x > 120)
				{
					x = 0;
					y++;
				}
				OLED_SetPos(x,y);
				for(i=0;i<8;i++)
					WriteDat(F8X16[c*16+i]);
				OLED_SetPos(x,y+1);
				for(i=0;i<8;i++)
					WriteDat(F8X16[c*16+i+8]);
				x += 8;
				j++;
			}
		}break;
	}
}


// Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在.h中的索引
// Description    : 显示ASCII_8x16.h中的汉字,16*16点阵
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
{
	unsigned char wm=0;
	unsigned int  adder=32*N;
	OLED_SetPos(x , y);
	for(wm = 0;wm < 16;wm++)
	{
		WriteDat(F16x16[adder]);
		adder += 1;
	}
	OLED_SetPos(x,y + 1);
	for(wm = 0;wm < 16;wm++)
	{
		WriteDat(F16x16[adder]);
		adder += 1;
	}
}



// Parameters     : x0,y0 -- 起始点坐标(x0:0~127, y0:0~7); x1,y1 -- 起点对角线(结束点)的坐标(x1:1~128,y1:1~8)
// Description    : 显示BMP位图
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
{
	unsigned int j=0;
	unsigned char x,y;

  if(y1%8==0)
		y = y1/8;
  else
		y = y1/8 + 1;
	for(y=y0;y<y1;y++)
	{
		OLED_SetPos(x0,y);
    for(x=x0;x<x1;x++)
		{
			WriteDat(BMP[j++]);
		}
	}
}






void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
{
	unsigned char c=0,i=0;
		c=chr-' ';//得到偏移后的值
		if(x>128-1){x=0;y=y+2;}
		if(Char_Size ==16)
			{
			OLED_SetPos(x,y);
			for(i=0;i<8;i++)
			WriteDat(F8X16[c*16+i]);
			OLED_SetPos(x,y+1);
			for(i=0;i<8;i++)
			WriteDat(F8X16[c*16+i+8]);
			}
			else {
				OLED_SetPos(x,y);
				for(i=0;i<6;i++)
				WriteDat(F6x8[c][i]);

			}
}
u32 oled_pow(u8 m,u8 n)
{
	u32 result=1;
	while(n--)result*=m;
	return result;
}


//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式	0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
{
	u8 t,temp;
	u8 enshow=0;
	for(t=0;t<len;t++)
	{
		temp=(num/oled_pow(10,len-t-1))%10;
		if(enshow==0&&t<(len-1))
		{
			if(temp==0)
			{
				OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
				continue;
			}else enshow=1;

		}
	 	OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
	}
}

2.oled.h文件

步骤和.c区别不大,记得选的是header file选项,直接放代码,添加在define和endif中间

#include "stm32f1xx_hal_i2c.h"

 #define u8 uint8_t
 #define u32 uint32_t

#define OLED0561_ADD	0x78  // OLED的I2C地址(禁止修改)
#define COM				0x00  // OLED 指令(禁止修改)
#define DAT 			0x40  // OLED 数据(禁止修改)

void WriteCmd(unsigned char I2C_Command);//写命令
void WriteDat(unsigned char I2C_Data);//写数据
void OLED_Init(void);//初始化
void OLED_SetPos(unsigned char x, unsigned char y);
void OLED_Fill(unsigned char fill_Data);//全屏填充
void OLED_CLS(void);
void OLED_ON(void);
void OLED_OFF(void);
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize);//显示字符串
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N);//显示汉字
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);//显示图片

void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
u32 oled_pow(u8 m,u8 n);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);//size2(16|12)
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size);

3.字体头文件oledfont.h

该头文件储存了字模,使.c文件可以打印出来,操作步骤同上

其中F16x16是中文字模,使用字模软件取模自行修改
BMP同理
// ------------------  ASCII字模的数据表 ------------------------ //
    // 码表从0x20~0x7e                                                //
    // 字库:  纵向取模下高位// (调用时要减512)
    // -------------------------------------------------------------- //

    	unsigned char F16x16[] =
    {

    		0x42,0x62,0x52,0x4A,0xC6,0x42,0x52,0x62,0xC2,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00,
    		0x40,0xC4,0x44,0x44,0x7F,0x24,0x24,0x24,0x20,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,//到0
    		/* (16 X 16 , 宋体 )*/

    		0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    		0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x00,//人1
    		/* (16 X 16 , 宋体 )*/

    		0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,
    		0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//开2
    		/* (16 X 16 , 宋体 )*/
    };

    /************************************6*8的点阵************************************/
    const unsigned char F6x8[][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,// 0
    	0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
    	0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
    	0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
    	0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
    	0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
    	0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
    	0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
    	0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
    	0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
    	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,// A
    	0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
    	0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
    	0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
    	0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
    	0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
    	0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
    	0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
    	0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
    	0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
    	0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
    	0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
    	0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
    	0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
    	0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
    	0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
    	0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
    	0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
    	0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
    	0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
    	0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
    	0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
    	0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
    	0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
    	0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
    	0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
    	0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
    	0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
    	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,// a
    	0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
    	0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
    	0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
    	0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
    	0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
    	0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
    	0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
    	0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
    	0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
    	0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
    	0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
    	0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
    	0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
    	0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
    	0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
    	0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
    	0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
    	0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
    	0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
    	0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
    	0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
    	0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
    	0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
    	0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
    	0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
    	0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
    };
    /****************************************8*16的点阵************************************/
    const unsigned char F8X16[]=
    {
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
      0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
      0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
      0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
      0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
      0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
      0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
      0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
      0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
      0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
      0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
      0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
      0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
      0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
      0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
      0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
      0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
      0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
      0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
      0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
      0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
      0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
      0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
      0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
      0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
      0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
      0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
      0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
      0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
      0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
      0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
      0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
      0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
      0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
      0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
      0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
      0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
      0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
      0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
      0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
      0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
      0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
      0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
      0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
      0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
      0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
      0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
      0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
      0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
      0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
      0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
      0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
      0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
      0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
      0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
      0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
      0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
      0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
      0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
      0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
      0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
      0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
      0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
      0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
      0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
      0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
      0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
      0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
      0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
      0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
      0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
      0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
      0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
      0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
      0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
      0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
      0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
      0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
      0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
      0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
      0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
      0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
      0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
      0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
      0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
      0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
      0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
      0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
      0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
    };

    unsigned char BMP1[] =
    {

    };

4.取模软件的使用

各个厂家给的取模软件应该都是这个,但是我们需要修改匹配stm32的数据格式

如图修改

输入你想要的字模,生成,复制粘贴进文档即可。

下面的字模代码就是生成的,替换进F16xF16,一会我就在OLED上打印这句话

 输(0) 入(1) 你(2) 想(3) 要(4) 的(5) 字(6) 模(7)

0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,
0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00,//输0
/* (16 X 16 , 宋体 )*/

0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,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 , 宋体 )*/

0x00,0x08,0x88,0x68,0xFF,0x48,0x88,0x00,0xFE,0x52,0x52,0x52,0xFE,0x00,0x00,0x00,
0x40,0x31,0x00,0x00,0x3B,0x40,0x40,0x44,0x5B,0x42,0x42,0x72,0x03,0x08,0x30,0x00,//想3
/* (16 X 16 , 宋体 )*/

0x00,0x02,0xF2,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0xF2,0x02,0x00,0x00,
0x00,0x02,0x82,0x92,0x9A,0x56,0x63,0x22,0x32,0x4A,0x46,0x42,0x82,0x02,0x00,0x00,//要4
/* (16 X 16 , 宋体 )*/

0x00,0xF8,0x0C,0x0B,0x08,0x08,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x43,0x80,0x40,0x3F,0x00,0x00,//的5
/* (16 X 16 , 宋体 )*/

0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0x26,0xA4,0x64,0x24,0x04,0x04,0x14,0x0C,0x00,
0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,//字6
/* (16 X 16 , 宋体 )*/

0x10,0x10,0xD0,0xFF,0x90,0x14,0xE4,0xAF,0xA4,0xA4,0xA4,0xAF,0xE4,0x04,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x89,0x4B,0x2A,0x1A,0x0E,0x1A,0x2A,0x4B,0x88,0x80,0x00,//模7
/* (16 X 16 , 宋体 )*/

5.main.c文件

首先我们声明一下,然后添加oled初始化函数

代码一定要写在USER BEGIN和USER END之间,否则重新生成工程时会覆盖掉

void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize);
void OLED_Init(void);
void OLED_CLS(void);
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N);


  OLED_Init();
  OLED_CLS();
  OLED_ShowCN(0,0,0);
  OLED_ShowCN(16,0,1);
  OLED_ShowCN(32,0,2);
  OLED_ShowCN(48,0,3);
  OLED_ShowCN(64,0,4);
  OLED_ShowCN(80,0,5);
  OLED_ShowCN(96,0,6);
  OLED_ShowCN(112,0,7);

3.编译烧录

先编译,之后运行调试

检查烧录器设置,我用的是st-link,使用swd

点击ok,烧录至单片机,OLED随即打印出刚设定的字符

示波器中也可以观察到

下一篇文章将介绍如何移植串口协议的北斗GPS模块

Tags:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code