使用OLED显示一张图片

重要叠甲声明: 各位学嵌入式的前辈们,我知道这个项目非常简单,没有技术含量,但这个是面向外行的,所以求轻喷!

器件清单:

  • 0.96寸OLED一个(I2C驱动,如下图。确保上面的接口有四个,分别是VCC、GND、SCL、SDA)
    在这里插入图片描述

  • 一个单片机(任何单片机都可以,只要确保你能使用这个单片机成功运行点灯程序),为方便这里采用STM32F103C8T6最小系统板

  • 一个底板(可选,只要确保单片机和OLED屏幕正确连接就可以)

步骤

1.画出要显示的图片

特别注意!上文所采用的屏幕分辨率是128x64,所以这里新建图片是分辨率也选择128x64。此外这个屏幕只有黑白两色,所以画的时候也注意使用黑白两色进行绘制。
在这里插入图片描述

随手画了一个,大概是这样。
在这里插入图片描述

2.使用python将该图片转换为C语言的数组

为执行该程序,确保您已经安装了python,并且安装了pillow库。

from PIL import Image # 导入PIL模块,这是python用于处理图像的模块
img = Image.open("D:\\pic\\pic.png") # 打开图片。确保在此处将图片路径换为上一步画出来的图片的路径!!
f = open("D:\\pic\\pic.h", "w") # 这是生成的C语言数组。确保将此处的路径换成您希望它出现的位置!

f.write("#include<stdint.h>"+"\n"+"uint8_t pic[8][128] = {") # C语言数组的格式

list = [] # 创建一个空列表,用于存放图片对应的数据

for i in range(0,64):
	line = []
	for j in range(0,128):
		# 获取某一点的像素值
		pix = img.getpixel((j,i))
		# 如果是黑色就写入0,如果是白色就写入1
		if(pix[0] < 128 ):
			line.append(0)
		else:
			line.append(1)
	list.append(line)

# 将上一部分得到的python列表转换为OLED能识别的数组
for i in range(0,8):
	f.write("{")
	for j in range(0,128):
		a = list[i*8+0][j]+list[i*8+1][j]*2+list[i*8+2][j]*4+list[i*8+3][j]*8+list[i*8+4][j]*16+list[i*8+5][j]*32+list[i*8+6][j]*64+list[i*8+7][j]*128
		f.write(str(a))
		if j!=127:
			f.write(",")
	f.write("}")
	if i!=7:
		f.write(",")

f.write("};")

搭建STM32开发环境

这一步的目标:安装一个软件,该软件可以把您的C语言源代码转换为单片机可以识别的程序。
这里网上有现成的教程,我就不赘述了。贴上两个链接:
环境搭建

创建工程

打开cubeMX,选择单片机型号为stm32f103c8t6。将PB8和PB9两个端口配置为GPIO_Output模式。在Project Manager选项卡中将Toolchain/IDE配置为MDK-ARM。点击右上角的GENERATE CODE生成初始化代码。
在这里插入图片描述
在这里插入图片描述

编辑工程

OLED驱动文件选用江协科技的:
OLED驱动
打开刚刚生成的工程,将OLED的驱动文件和刚刚用python生成的C头文件统统加入工程。
将OLED.c中这两个函数的原型加入到OLED.h中,这样就可以在主函数中调用这两个函数了。
在这里插入图片描述
在这里插入图片描述

打开main.c,将OLED.h和OLED.c这两个文件包含进去:

#include "OLED.h"
#include "pic.h"

在主函数的while(1){}代码之前加入如下代码:

OLED_Init();//初始化OLED显示屏
//绘制图案
for(i=0;i<8;i++)
{
	for(j=0;j<128;j++)
	{
		OLED_SetCursor(i,j);
		OLED_WriteData(pic[i][j]);
	}
}

项目编译及下载

点击build按钮编译项目。然后使用stlink将单片机连接至电脑并点击"load"按钮。

结果

将单片机与OLED正确连接(参考下图)并按单片机上的复位按钮。我这里没有实物,所以使用仿真软件来代替一下。
在这里插入图片描述

尾声

如果您在没有开发经验的情况下跟着该博客做到了这里,那么非常棒!您已经超越了绝大多数的电子类专业的学生,电子的世界欢迎您!
如果没做出来也不要气馁,因为电子类专业的学生也是学了将近一学期才学到这里的。

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值