目录

前言

一、OLED简介

二、驱动代码

1.驱动文件

2.驱动函数的使用

三、OLED使用示例

1.显示字符

2.显示图片


前言

        本期我们接着学习stm32,不过本期的主角是oled屏幕,这个屏幕大家都听说过吧,在硬件上是经常用到的屏幕,相较于我们去写其他编程的时候硬件编程不能去进行printf来去打印我们想看的相关数据,这时候我们可以去用到这个显示屏来实现printf这个功能,也是其用处之一。学过51单片机的应该都用过这个显示屏的了,不过在stm32上的用法跟51是有点不一样的,但总体上是差不多的,本期我们就来去通过这个oled显示屏来去显示我们要实现的项目。

一、OLED简介

OLED Organic Light Emitting Diode ):有机发光二极管
OLED 显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点
0.96 OLED 模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
供电: 3~5.5V ,通信协议: I2C/SPI ,分辨率: 128*64

 硬件电路:

二、驱动代码

1.驱动文件

OLED的驱动代码我分为了三份,分别是OLED.h 、OLED.c、OLED_Font.h 这里我们看OLED.h文件即可,此屏幕的全部功能都在这个头文件里边,本期的全部代码以及相关的取模软件我已经上传到了资源绑定这里,可自行下载,也可以在百度网盘下载。

链接:https://pan.baidu.com/s/1yq5HwFcvqHVBlBTqzlQYxg?pwd=8985 
提取码:8985

OLED.h :用于存放OLED屏幕的功能函数

OLED.c :用于编写OLED屏幕功能的函数

OLED_Font.h:用于存放OLED要显示的数据的字模

OLED.h功能如下:

#ifndef __OLED_H
#define __OLED_H
#include "stm32f10x.h"                  // Device header


void OLED_Init(void);//初始化
void OLED_Clear(void);//清屏
void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);//显示一个字符
void OLED_ShowString(uint8_t Line, uint8_t Column, char *String);//显示字符串
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//显示十进制数字
void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);//显示有符号十进制数字
void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//显示十六进制数字
void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//显示二进制数字
void OLED_ShowCHinese(u8 Line,u8 Column,u8 no);//显示汉字
void OLED_BMP(int i);//显示分辨率128*64 的图片

#endif

2.驱动函数的使用

        这里我们把这个OLED屏幕分为四行十六列,也就是要显示的东西放到指定的行和列就行了。

        不过对于汉字和图片的显示就不同了,汉字是分为上半和下半部分的,对于汉字的显示我这里分的更加细节一点,汉字是可以在8行显示的,但高度是跟这些字符一致的,也就是其他字符只能在1234这几行显示,而汉字是可以在01234567 这指定的行显示。

        对于图片的话,图片是基本上覆盖整个屏幕的,所以void OLED_BMP(int i); 这个函数的i就是表示第几张图片的意思,图片是放到一个数值来存储的。

三、OLED使用示例

对于工程的创建,我们只需要把这三个文件放入到hardware这个文件夹就行了。

接线图:

 这里我们先看到接线图,有两个是接电压和GND的,另外两个就是驱动的,其中SCL是接GPIOB口的8号引脚,SDA是接GPIOB口的9号引脚。

1.显示字符

先看结果:

main.c代码: 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"

uint8_t i;

int main(void)
{	
	OLED_Init();
	Key_init();
	OLED_ShowString(1,1,"ikun");
	OLED_ShowSignedNum(2,1,-45,2);

	OLED_ShowSignedNum(3,1,45,2);
    OLED_ShowCHinese(6, 0, 0);							//西
	OLED_ShowCHinese(6, 16, 1); 						//安
	
	while(1){

	}
}

2.显示图片

先看效果:

main.c代码:

(这里说明一下,我的图片是有17张的,我这里就是每隔3秒换一张图片,如果你想用自己的图片的话去用图片取模软件弄一下就行了)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"

uint8_t i;

int main(void)
{	
	OLED_Init();
	while(1){
		if(i>16)
			i=0;
		OLED_BMP(i);
		Delay_ms(3000);
		i++;
	}
}

以上就是本期的全部内容了,我们下次见!

每日壁纸:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐