stm32入门-----OLED显示屏
本期我们接着学习stm32,不过本期的主角是oled屏幕,这个屏幕大家都听说过吧,在硬件上是经常用到的屏幕,相较于我们去写其他编程的时候硬件编程不能去进行printf来去打印我们想看的相关数据,这时候我们可以去用到这个显示屏来实现printf这个功能,也是其用处之一。学过51单片机的应该都用过这个显示屏的了,不过在stm32上的用法跟51是有点不一样的,但总体上是差不多的,本期我们就来去通过这个o
目录
前言
本期我们接着学习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++;
}
}
以上就是本期的全部内容了,我们下次见!
每日壁纸:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)