HNU-夏季小学期工训大作业-OLED屏显示
大二夏小学期第二阶段要求基于STC板完成一个课程设计,本质上就是抄来抄去换名字水过去,助教的验收更是水之又水,通过验收时到达的顺序来划分分数段。反正水过去就完了,抄来抄去也是没意思,想起以前买过一个oled小屏幕,于是决定基于这个屏幕来完成我的大作业。写这篇文章记录一下完成这个项目的过程,希望可以让有缘人在使用屏幕的时候少走一些弯路。
项目源代码地址:https://github.com/WuJean/HNU/tree/main/%E5%B7%A5%E8%AE%AD
项目准备
硬件准备
某宝0.96寸oled屏 4针接口
公对母杜邦线
由于OLED自带的接针和STC板上的接口并不是直接对应,故需要杜邦线来对应接针
具体的对应关系为:
OLED | STC |
---|---|
GND | GND |
VCC | VCC |
SCL | P1.0 |
SDA | P1.1 |
资料准备
参考0.96寸OLED程序源码-51例程
源码中为我们提供了几个调用OLED的基本库:
oled.c oled.h oledfont.h bmp.h
其中oled.c中实现了通过提前定义在oledfont.h以及bmp.h中的字模或图片,完成显示的各种功能;以及对oled屏幕的各种操作
1 | //OLED控制用函数 |
我们只需要include这些库,调用其中的函数便可在oled屏上显示想要的内容
OLED显示原理与取模方式
参考 https://blog.csdn.net/u010858987/article/details/103362144
水平方向分布了128个像素点,垂直方向分布了64个像素点(如图一所示)。而驱动芯片在点亮像素点的时候,是以8个像素点为单位的。官方的例程推荐的是垂直扫描的方式,也就是先画垂直方向的8个像素点(如下图二所示),所以我们在画点的时候Y的取值为0-7,X的取值为0-127.
1 | //存放格式如下. |
我们使用软件进行图片和汉字的取模,下面分别展示两款软件的取模预设:
图片取模
我们使用image2Lcd这款软件来完成对图片的取模
下载地址:http://www.ddooo.com/softdown/134212.htm
我们采用数据水平 字节垂直的取模方式,并设置图片的最大宽高为我们oled屏的最大宽高,导入图片后点击保存,便可生成一个c语言数组,格式如下:
1 | const unsigned char gImage_1[512] = { /* 0X02,0X01,0X40,0X00,0X40,0X00, */ |
将其放入bmp.h中待用,注意STC板的写入内存有限,过多的图片可能会导致写入失败
汉字取模
我们采用字模软件PCtoLCD,进行以下预设:
输入想要展示的汉字,点击生成字模:
生成字模如下:
1 | 湖(0) 南(1) 大(2) 学(3) |
我们可以通过字模的编号来按顺序调用OLED_ShowChinese函数在给定的位置显示想要的汉字
项目实现
理解完显示原理后一切就很简单了,无非就是结合板子的功能在屏幕上显示一些东西,由于调用板子的功能需要写很多的回调函数,故本项目只基于K1 K2 K3三个按键实现了简单的菜单、确认、返回功能,并实现了动画播放以及菜单的功能。
需要注意的是
- 在开始项目的时候要预先定义好各种状态,并在执行显示功能的时候注意状态的变化,这样可以避免内容反复刷新
- 记得将重复部分的代码打包成函数,这样会让整个项目变得简洁(我写的很臃肿)
- 最好不要热插拔屏幕,可能会烧屏
其他详细的部分都放在github仓库中,实验报告中也写的比较详细了
如果想实现更多的功能也可以参考:https://blog.csdn.net/qq_51684393/article/details/126669757