STM32F1_OLED

自发光液晶—OLED

1、 概要

在这里插入图片描述
本文章将BS1接VCC,BS2接GND,即用IIC通信方式来驱动显示OLED液晶屏。在上文中我们将IIC部分重点的函数已经进行解释,现在主要讲解OLED的驱动方式,6乘8点阵、8乘16点阵这两组字模如何运用,如何向OLED写入字符、数字、字符串并显示,如何设置初始的显示坐标等。

基础知识:
STM32F1_OLED_第1张图片
STM32F1_OLED_第2张图片

**2、代码解析 **

1)设置坐标函数

/* 坐标设置,定义OLED的页地址
	00—0F是列地址的低四位,10—1F是高四位。
	x&0xf0,保留列的高四位,>>4,将高四位的地址移到低四位,|0x10,表示的是列的高四位地址。
	x&0x0f,表示的是列的低四位地址。*/ 
/* 通过下面这个函数我们可以设置OLED的页数和列数*/
void OLED_Set_Pos(unsigned char x, unsigned char y) 
{ 		
	OLED_WR_Byte(0xb0+y,OLED_CMD);  //输入命令,设置第几页,若y = 2,则0xb0+2 = 176+2 = 178 = 0xb2,即选择的是第三页
	/*列的高四位和低四位可以相加,所得到的数就是选择的列数*/
	OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);  //  例如 x = 2,0000 0010 & 1111 0000 = 0000 0000 | 0001 0000 = 0001 0000 = 0x10;
	OLED_WR_Byte((x&0x0f),OLED_CMD); 			//              0000 0010 & 0000 1111 = 0000 0010 = 0x02;
												//  将列的高四位和低四位相加,即可得到所画的列数,高四位中的第五位为1,不理,
												//  所以当x = 2 , y = 2时, 0x00 + 0x02 = 0x02 = 0000 0010,即选中的为第三列
	/*综上所述,输入的参数,设置的是对应的是(y)页数和(x)列数*/
} 

2)显示字符函数

/* 在指定位置显示一个字符,包括部分字符
	x:0~127
	y:0~63			 
	size:选择字体 16/12*/
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
{      	
	unsigned char c=0,i=0;	
	c=chr-' ';//得到偏移后的值  可从字模中得到,第一个为' ',减去即可得到相应的字符			
	if(x>Max_Column-1){x=0;y=y+2;}  //Max_Column:最大列:128; x:设置列数; y:设置页数
	if(Char_Size ==16)  //此时需要两页的同一列,8*16的点阵
	{
		OLED_Set_Pos(x,y);	 //若 x = y = 2,则设置的为第3页的第3列,  注意:每一页只有八行
		for(i=0;i<8;i++)     
		OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);   //通过i的递增,循环画点,此时将第2页第2列的8行都写入了数据
		OLED_Set_Pos(x,y+1);   //由于画点的数目行数不够,此时需要第3页的第2列来续画点
		for(i=0;i<8;i++)	   
		OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);   //接着画完,直到第16个点结束
	}
	else 
	{	
		OLED_Set_Pos(x,y);  //6*8的点阵,不需要其他的页来续画
		for(i=0;i<6;i++)
		OLED_WR_Byte(F6x8[c][i],OLED_DATA);	  //二维数组,c控制第几行,i控制第几列,故不需要其他的操作即可画完
	}
}

3)显示数字函数

/* 显示2个数字
	x,y :起点坐标	 
	len :数字的位数
	size:字体大小
	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

4)显示字符串函数

void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{
	unsigned char j=0;
	while (chr[j]!='\0')  //判断字符串是否结束
	{		
		OLED_ShowChar(x,y,chr[j],Char_Size); // 一个一个画字符
		x+=8;   //x 设置的是列,一个字符的大小为8*16,即行16列8,每次显示为一个后,都需要向高列移8列
		if(x>120){x=0;y+=2;} // 最高为128列,超过的话则需要重新从零列开始,由于此时需要别的页数来续画,避免重叠,需要 y += 2。
		j++; //循环画字符串
	}
}

**3、注意 **

OLED液晶能够显示字符、图形、汉字等,而相对应的模组我们可以通过取模软件来得到,就可以实现对OLED的随心创作显示。

你可能感兴趣的:(STM32F1,模块)