STM32 0.96英寸OLED显示屏集成驱动库 (十分易用)

日常在使用STM32做设计时,0.96寸的OLED屏幕是十分常用的显示组件,售价便宜,128*64的像素大小,也能够显示相对较多的内容。

在使用以往的设计库过程中,总结了几点原生库的不足之处。

(1)库文件的IIC驱动函数是共用的标准IIC驱动,若是在同一工程中,使用了多个IIC设备的驱动库,且这些IIC驱动都是独自编写的,则会导致IIC驱动函数重名而无法通过编译,但是只保留其中一份,又可能导致需要对其他库驱动进行修改。增加了工作量,而初学者可能难以从众多驱动代码中完成准确修改。

(2)原先的显示屏初始化文件,引脚没有独立定义,如果所设定的引脚被占用了,则需要在代码中逐一对引脚的初始化以及调用进行修改,这是较为常见的,因为在使用多传感器进行设计时,十分容易出现需要规避引脚的需求。 

(3)OLED屏幕在显示ASCII字符时,可以直接调用函数传入字符串,直接显示一大段的内容。但是显示中文时,只能够一个一个显示,并且中文的文字是根据其在字模数组中的位置去写入的,这就到导致了通过看代码无法确定该中文字符究竟是哪个字。修改调试就需要频繁查看字模表,非常不方便。

OLED_ShowCN(i*16+0,2,5,0);  // 显示“周”字
unsigned char F16x16[] =
{

0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x82,0xFE,0x00,0x00,0x00,
0x80,0x60,0x1F,0x00,0x00,0x1E,0x12,0x12,0x12,0x1E,0x40,0x80,0x7F,0x00,0x00,0x00,/*"周",0*/

}

针对上面的问题,对对驱动库做了一定的增强,主要的改进内容如下,这些改进主要是面向初学者所设定的,需要能够直接调用函数库就实现显示,所以该库则是尽可能简化需要修改的内容,以便做到快速复用。主要改进的内容如下:
(1)IIC引脚宏定义,通过修改总线、时钟、引脚。可直接修改OLED接入STM32的引脚位置。


//修改以下六处,SCL与SDA
#define  OLED_SCL_CLK        RCC_APB2Periph_GPIOB // SCL
#define  OLED_SCL_PORT       GPIOB
#define  OLED_SCL_PIN        GPIO_Pin_12

#define  OLED_SDA_CLK        RCC_APB2Periph_GPIOB // SDA
#define  OLED_SDA_PORT       GPIOB
#define  OLED_SDA_PIN        GPIO_Pin_13

(2)独立IIC驱动,防止与其他库文件发生干扰。以下面两个函数为例,前缀添加OLED。


//函数体
void OLED_I2C_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(OLED_SCL_CLK|OLED_SDA_CLK, ENABLE);
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   //开漏输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Pin = OLED_SCL_PIN;
 	GPIO_Init(OLED_SCL_PORT, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = OLED_SDA_PIN;
 	GPIO_Init(OLED_SDA_PORT, &GPIO_InitStructure);
	OLED_W_SCL(1);
	OLED_W_SDA(1);
}

/**
  * @brief  I2C开始
  * @param  无
  * @retval 无
  */
void OLED_I2C_Start(void)
{
	OLED_W_SDA(1);
	OLED_W_SCL(1);
	OLED_W_SDA(0);
	OLED_W_SCL(0);
}

(3)中英文直接显示,通过调用一个显示函数,可以实现中文、英文、数字、符号等所有字符的同一显示,不需要单独调用中文显示函数去显示一个个的字符。

OLED_Show16(1,1,"你好123abc"); // 在第一行第一列开始显示“你好123abc”

        中英文直接显示的原理是通过对字符串的每个字符长度进行判断,若小于128,则表明为ASCII,若是大于128,则为中文字符,随后分别从其字模表中去查询字模数据,此流程无需输入中文字模在的位置。但是中文的字模还是需要使用字模工具去提取的,随后将其放置在代码中即可,无需考虑前后顺序。取字模的格式为阴码、列行式、逆向、十六进制数、输出索引、C51格式。

        该库只有OLED.C,OLED.h两个文件,具有较高的移植性和易用性。在使用时修改以下内容即可。

(1)C文件头部的引脚

(2)中文字模表

如需库文件可私信回复获取OLED资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值