本帖最后由 小恶魔owo 于 2024-12-15 00:27 编辑

(一)简介

我们学习STM32最常用的屏幕之一就是0.96寸的OLED,一方面是因为它的价格很便宜,大概6块钱一个,另一方面是它很常用而且易用,在网上已经有非常成熟的库,我们如果只需要学习它的应用的话,只需要理解库的函数怎么用就可以了。在了解库函数后,可以自己设计UI或者自己设计各种好看的文字和图片

模块资料
工作电压:3.3V
工作电流:9MA
模块尺寸:27.3 x 27.8 MM
像素大小:128(H) x 64(V)RGB
驱动芯片:SSD1306
通信协议:IIC
管脚数量:4 Pin(2.54mm间距排针)

模块接线
cc21a22b9ecc2ab84060f08d07c752e.png
使用stm32上的硬件IIC,SCL1和SDA1
GND----GND
VCC----3V3
SCL----B08
SDA----B09


注意

由于oled库的中文部分可能会导致keil5报错,所以我们需要添加--no-multibyte-chars这个指令
image.png

(二)讲解
我会将库文件放在工程模板上
image.png

我们打开OLED.h可以查看到库函数
image.png

OLED_Init:初始化OLED屏幕
OLED_Clear:清除OLED屏幕
OLED_Update:更新内容到缓存区

OLED_ShowChar:显示一个字符
OLED_ShowString:显示字符串
OLED_ShowNum:显示数字(十进制,正数)
OLED_ShowSignedNum:显示数字(带符号)
OLED_ShowHexNum:显示数字(十六进制,正数)
OLED_ShowBinNum:显示数字(二进制,正数)
OLED_ShowChinese:显示中文
OLED_ShowImage:显示图片
countDigits:计算整数的位数

屏幕范围
X区域:0~127
Y区域:0~63


常用函数
当然不止这么点,还有很多函数在库里面都有
但是学会下面这些基础函数,就已经可以完成大部分应用

①初始化OLED屏幕
在使用之前,必须初始化
OLED_Init();                //OLED初始化
复制代码

②显示字符
第一位x,第二位y,第三位字符,第四位字体
OLED_ShowChar(1, 1, 'A',OLED_8X16);  
复制代码

③显示字符串
第一位x,第二位y,第三位字符串,第四位字体
OLED_ShowString(15,1,"ABC",OLED_8X16);
复制代码

④显示数字(整数)
第一位x,第二位y,第三位整数
OLED_ShowNum(1,15,100,3,OLED_8X16);
复制代码

⑤显示小数
  第一位x,第二位y,第三位数字,第四位整数的位数,第五位小数的位数,第六位字体
OLED_ShowFloatNum(40,15,1.99,1,3,OLED_8X16);
复制代码

⑥显示中文
第一位x,第二位y,第三位中文字,注意中文的字要提前存放在OLED_Data.c内,取模方法后面会教
OLED_ShowChinese(1,35,"你好世界");
复制代码

中文取字模,打开软件PctolLCD2002,这个软件百度可以搜到
设置如下
image.png

将得到的字模数据放到OLED_Data.c的ChineseCell_t OLED_CF16x16[]中,将多余部分删掉,完成如下图所示,注释可以不要
image.png


⑦显示图片
第一位x,第二位y,第三位图片高度,第四位图片宽度,第五位图片取模的名字
OLED_ShowImage(80,35,16,16,Diode);
复制代码

⑧打印格式化的字符串
第一位x,第二位y,第三位字体,第四位字符串
OLED_Printf(1,50,OLED_8X16,"aaa");
复制代码

⑨上传到缓存区
在oled任何显示函数之后,必须加上!否则屏幕没反应!
OLED_Update();
复制代码


⑩计算整数的位数
当我们有一个变量a时,如果a不是一个固定的变量,长度可能会发生改变
那么我们可以在位数部分调用countDigits函数,自动算出当前a的位数
countDigits(a)
复制代码


画图函数
①画线
两点得一线,第一第二位为头的坐标,第三第四位为尾巴的坐标
OLED_DrawLine(0,0,10,10);//画线
复制代码

②正方形
第一位x,第二位y,第三位宽,第四位高,第五位填充(OLED_FILLED填充,OLED_UNFILLED不填充)
OLED_DrawRectangle(0,20,10,10,OLED_FILLED);//正方形填充
复制代码

③圆形
  第一位x,第二位y,第三位半径,第四位填充(OLED_FILLED填充,OLED_UNFILLED不填充)
OLED_DrawCircle(10,50,5,OLED_UNFILLED);//圆形
复制代码


(三)程序演示
0c39206e35e32865bfc00a19bf6533b.jpg
d08ed137140b59a36abd -small-original.gif