关于OLED的概述

OLED:Organic Light-Emitting Display,有机发光显示。
OLED具备自发光、厚度薄、视角广、功耗低、对比度高、响应速度快、可用于挠曲性面板、使用温度范围广、构造及其制作过程较简单等优异特性,并认为是一种比液晶显示更为先进的新一代平板显示技术。以目前的技术,OLED的尺寸还难以大型化,但是分辨率却可以做得很高。

基于STM32的OLED应用,要做那些事情:
【1】移植OLED的底层驱动函数库。
【2】准备需要的中文字符和图片等数据。
【3】调用OLED驱动库中的底层函数进行应用开发。

OLED开发相关资源下载

基于STM32CubeMX的OLED屏驱动程序库(内含4个文件)
【1】XMF_OLED_STM32Cube.c:驱动程序的源文件。
【2】XMF_OLED_STM32Cube.h:驱动程序的头文件。
【3】XMF_OLED_Font.h:字库数据文件。
【4】XMF_OLED_BMP.h:图片数据文件。

取字模软件–PCtoLCD2002
用于生产中文字符和图形图片的数据集合。

基于STM32CubeMX的OLED底层驱动下载:
百度网盘链接 ,提取码:jlap

OLED取字模软件-PCtoLCD2002下载:
百度网盘链接 ,提取码:t6az

关于OLED屏与取字模软件的使用说明

基于STM32CubeMX的OLED底层驱动函数移植

【1】将4个驱动文件拷贝到工程文件中,和main.c放在同一目录,并将XMF_OLED_STM32Cube.c添加到工程代码文件中,并在main.c中引入头文件XMF_OLED_STM32Cube.h。
【2】根据所选用的芯片型号,修改XMF_OLED_STM32Cube.h头文件中所以用的芯片头文件。
【3】根据硬件电路原理图中,修改XMF_OLED_STM32Cube.h中OLED的引脚定义。
【4】查看OLED_Init(void)初始化函数的源码,根据电路接口和应用需要进行修改。
OLED 屏幕12864四个脚(或五个脚);另一种是I2C两根引脚

OLED驱动库中常用的函数

void OLED_Init(void);          //OLED初始化函数
void OLED_Clear(void);         //OLED清屏函数
//显示英文字符串函数
void OLED_ShowString(unsigned char x,unsigned char y,unsigned char *p);参数1:x,起点列坐标,0~127
参数2:y,起点行坐标,0~7
参数3:*p,字符串指针
返回值:void,无。
//显示中文字符函数
void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no);参数1:x,起点列坐标,0~127
参数2:y,起点行坐标,0~7
参数3:no,待显示中文字符在数组Hzk[][32]中的位置。
返回值:void,无。
//显示图片函数
void OLED_DrawBMP( unsigned char x0, unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);参数1:x0,起点列坐标,0~127
参数2:y0,起点行坐标,0~7
参数3:x1,图片的列范围,1~128
参数4:y1,图片的行范围,1~8
参数5:BMP[],待显示图片数据的数组。
返回值:void,无。

实训案例:STM32控制OLED显示

在XMF07A或XMF07C开发板上,利用STM32CubeMX和Keil5协同开发,完成以下的功能:
【1】用取字模软件生产一张图片数据,作为开机界面在OLED上显示。
【2】0.5秒后进入信息界面, 第1行显示网址“www.xmf393.com”, 第2行显示中文“小蜜蜂笔记网”,第3行显示日期“2020-02-18”。

//用取字模软件生成开机LOGO图片数据,并拷贝到XMF_OLED_BMP.h的数组中。
const unsigned char BMP1[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//此处省略64×62个字节元素
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//用取字模软件生成所需中文字符数据,保持到XMF_OLED_Font.h中的Hzk[]数组。
const unsigned char Hzk[][32]={{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00},
{0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00},/*"小",0*/
/* (16 X 16 , 宋体 )*/
{0x10,0x4C,0x24,0x04,0xF4,0x84,0x8D,0x56,0x44,0x24,0x14,0xC4,0x24,0x54,0x0C,0x00},
{0x00,0x41,0x5D,0x55,0x54,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x7C,0xC0,0x00,0x00},/*"蜜",1*/
/* (16 X 16 , 宋体 )*/
{0x00,0xF8,0x08,0xFF,0x08,0xF8,0x80,0x90,0x4C,0x57,0xA4,0x54,0x4C,0x84,0x80,0x00},
{0x20,0x63,0x21,0x1F,0x11,0x39,0x10,0x10,0x15,0x15,0xFF,0x15,0x15,0x10,0x10,0x00},/*"蜂",2*/
/* (16 X 16 , 宋体 )*/
{0x10,0x08,0x44,0x47,0x4C,0x54,0x44,0xD4,0x28,0x27,0x24,0x2C,0x34,0x04,0x04,0x00},
{0x00,0x10,0x12,0x12,0x12,0x12,0x12,0x7F,0x89,0x89,0x89,0x89,0x89,0x88,0xF0,0x00},/*"笔",3*/
/* (16 X 16 , 宋体 )*/
{0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00},
{0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*"记",4*/
/* (16 X 16 , 宋体 )*/
{0x00,0xFE,0x02,0x22,0x42,0x82,0x72,0x02,0x22,0x42,0x82,0x72,0x02,0xFE,0x00,0x00},
{0x00,0xFF,0x10,0x08,0x06,0x01,0x0E,0x10,0x08,0x06,0x01,0x4E,0x80,0x7F,0x00,0x00},/*"网",5*/
/* (16 X 16 , 宋体 )*/
};
extern unsigned char BMP1[];void OLED_display_pic()
{OLED_Clear();OLED_DrawBMP(0,0,128,8,BMP1);
}
void OLED_display_info()
{OLED_Clear();OLED_ShowString(6,0,(uint8_t *)"www.xmf393.com");OLED_ShowCHinese(10,3,0);        //小OLED_ShowCHinese(28,3,1);        //蜜OLED_ShowCHinese(46,3,2);        //蜂OLED_ShowCHinese(64,3,3);        //笔OLED_ShowCHinese(82,3,4);        //记OLED_ShowCHinese(100,3,5);       //网OLED_ShowString(24,6,(uint8_t *)"2020-02-18");
}
//在mian()函数中添加下面的代码:
/* USER CODE BEGIN 2 */
OLED_Init();              //OLED初始化
OLED_display_pic();       //显示图片
HAL_Delay(500);           //延时0.5秒
OLED_display_info();      //显示信息/* USER CODE END 2 */

实训案例:ADC与OLED综合训练

在XMF07A或XMF07C开发板上,利用STM32CubeMX和Keil5协同开发,完成以下的功能:
【1】 上电开机后,首选在OLED上显示“小蜜蜂的LOGO”图片,然后让LED1与LED2依次点亮,然后熄灭,进行灯光检测。灯光检测结束后,OLED切换至数据显示界面,分3行:
第1行显示:“ www.xmf393.com ”
第2行显示:“采样值:”
第3行显示:“电压值:”
【2】在主程序中,采用查询的方式,每隔0.3秒对ADC_IN0通道的光敏传感器进行一次电压数据采集,并将采样到的12位数据换算成对应的实际电压值。LED1作为A/D采样指示灯,每采样一次闪烁一下。
【3】每进行完一次光敏传感器的数据采样和电压换算后,将其结果更新到OLED显示屏中相应的位置。如果光敏传感器的电压值小于1.3V,则将LED2灯点亮,反之,将LED2灯关闭。

//首先需要进行OLED的底层驱动函数移植,生成相应的文字和图片数据
/* USER CODE BEGIN Includes */
//====引入OLED底层驱动的头文件========
#include "XMF_OLED_STM32Cube.h"
#include "stdio.h"
/* USER CODE END Includes */
extern unsigned char BMP1[];#define LED1_ON() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9,GPIO_PIN_SET)
#define LED2_ON() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_SET)
#define LED1_OFF() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9,GPIO_PIN_RESET)
#define LED2_OFF() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_RESET)uint16_t ADC0_Value = 0;
uint16_t ADC_Volt = 0;
uint8_t str_buff[64];
//LED灯流水点亮检测
void LED_Check()
{LED1_ON();HAL_Delay(500);LED2_ON();HAL_Delay(500);LED1_OFF();HAL_Delay(500);LED2_OFF();HAL_Delay(500);
}
//显示开机LOGO图片
void OLED_display_pic()
{OLED_Clear();OLED_DrawBMP(0,0,128,8,BMP1);
}
//显示数据显示界面
void OLED_display_info()
{OLED_Clear();OLED_ShowString(6,0,(uint8_t *)"www.xmf393.com");HAL_Delay(200);OLED_ShowCHinese(0,3,24); OLED_ShowCHinese(18,3,25); OLED_ShowCHinese(36,3,26); OLED_ShowString(54,3,(uint8_t *)":");HAL_Delay(200);OLED_ShowCHinese(0,6,16); OLED_ShowCHinese(18,6,17); OLED_ShowCHinese(36,6,26); OLED_ShowString(54,6,(uint8_t *)":");HAL_Delay(200);
}
//更新ADC采样数据与换算结果
void OLED_display_dat()
{sprintf((char*)str_buff, "%4d", ADC0_Value);OLED_ShowString(64,3,(uint8_t *)str_buff);sprintf((char*)str_buff, "%d.%d%dV", ADC_Volt/100, (ADC_Volt%100/10), ADC_Volt%10);OLED_ShowString(64,6,(uint8_t *)str_buff);
}
//ADC采样过程与灯光自动控制
void Get_ADC0_Value()
{HAL_ADC_Start(&hadc1);if(HAL_OK == HAL_ADC_PollForConversion(&hadc1, 30)){ADC0_Value = HAL_ADC_GetValue(&hadc1);ADC_Volt = ADC0_Value * 330 / 4096; if(ADC_Volt < 130){LED2_ON();}else{LED2_OFF();}}HAL_ADC_Stop(&hadc1);
}
/* USER CODE BEGIN 2 */
OLED_Init();            //初始化OLED
OLED_display_pic();     //显示开机LOGO图片
LED_Check();            //灯光检测
OLED_display_info();        //显示数据界面
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{LED1_ON();         //ADC采样指示灯点亮Get_ADC0_Value();       //进行一次ADC采样及逻辑处理OLED_display_dat();     //更新OLED中的采样数据HAL_Delay(200);       //延时0.2秒LED1_OFF();         //ADC采样指示灯关闭
/* USER CODE END WHILE *//* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

3.HAL库-STM32的OLED开发基础相关推荐

  1. cebemax hal库 stm32 OLED移植 解析

    cebemax hal库 stm32 OLED移植 序言: 这是一篇对于作者对于将OLED的驱动代码移植成hal库的文章,会有完整的过程,后面自然也会有完整的代码,希望能够帮到大家,同时也是做一个记录 ...

  2. STM32开发基础知识——OLED开发基础

    基于stm32芯片的OLED应用,需要做的是: ①移植OLED的底层驱动函数库 ②调用OLED驱动库中的底层函数进行应用开发 OLED驱动库中常用函数 OLED初识化函数 void OLED_Iint ...

  3. 单片机 STM32F103C8T6 cubeMX HAL库 从环境到开发 正点原子工程移植 freeRTOS

    文章目录 0 准备材料 1 闪烁PC13的小灯 2 正点原子工程移植 注意点以及细节 3 freeRTOS 3.1 LED KEY 串口1 的一个实验 0 准备材料 1.需要正点原子的HAL介绍书籍可 ...

  4. P3 STM32的按键开发基础

    一,按键扫描的基本原理 1.按键信号的识别   一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地. 在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平. 通过反复 ...

  5. 11.小白初学日记 STM32F429 HAL库 STM32程序启动过程

    大家好,怀着激动地小心,激动地小手,我们来了. 今天我想给大家分享一个我自己的错误点.来警示大家. 刚才写我按键例程程序的时候,我自己来写的,发现启动不了,终于找到了原因,大家一起来看下. while ...

  6. 基于HAL库STM32串口驱动不定长数据接收

    STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码 使用方法 源码 串口接口文件 环形缓冲区接口文件 移植图示 使用涉及4个文件, UART_Port.c UART_Port.h Circul ...

  7. Openmv入门01——HAL库stm32

    Openmv入门01 开启一个项目 Openmv程序 1.识别长度 2.识别面积 STM32 1.识别长度 2.识别面积 开启一个项目 看看例程~很快上手https://docs.singtown.c ...

  8. STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯

    STM32F103C8T6基础开发教程目录 STM32F103C8T6基础开发教程(HAL库)-开发环境配置 STM32F103C8T6基础开发教程(HAL库)-Keil添加注释的快捷键 STM32F ...

  9. STM32F103C8T6基础开发教程(HAL库)—开发环境配置

    STM32F103C8T6基础开发教程目录 STM32F103C8T6基础开发教程(HAL库)-开发环境配置 STM32F103C8T6基础开发教程(HAL库)-Keil添加注释的快捷键 STM32F ...

最新文章

  1. 2021-2027年中国中空纤维膜行业市场研究及前瞻分析报告
  2. toad for oracle xpert edition,Toad for oracle 软件产品模块对比,方便大家选型
  3. HTTP状态码(HTTP Status Code),常见的error 404, error 504等的意思
  4. 修改生产订单的BAPI!
  5. centos 安装 redmine 2.1.4
  6. ejb运行程序_在哪里可以运行EJB?
  7. 定制MyBatis的日志
  8. 以向量和矩阵的视角抽象万物
  9. 美团一面:说说前、后端分离权限控制设计和实现思路?
  10. auto.js制作简易音乐app(一)
  11. boost 普通用户读取SYSTEM创建的共享内存
  12. 网站收录之采集新闻源工具
  13. 基于STM32F4 的OLED屏显示噪点、花屏问题
  14. android通讯录开发(粗糙实现微信通讯录的功能)
  15. android 自由浏览器下载地址,改善手机上网体验 云集浏览器Android 2.3.1版发布
  16. UG后处理—程序重写程序头输出相关信息
  17. Linux怎么输出函数,Linux C 程序 输入输出函数(THREE)
  18. 微信公众号(一)每日推送详细教程(含实时定位,天气预报,每日英语,纪念日等,可快速自定义消息模板并指定订阅者类型发送)
  19. virsh存储池,存储卷的管理
  20. xlrd读取所有sheet名_Python3之excel操作——xlrd,xlwt,xlutils模块

热门文章

  1. Win11提示该文件没有与之关联的应用来执行该操作该如何解决
  2. 一名普通网安程序员的2022总结和2023展望
  3. OKEx公链OKChain 下一个DeFi跑马场?
  4. windows查看KILL进程
  5. 成都电子计算机实验中学 孙蕾,成都学校有个“英才小男团”,中考重点线上等你来聊!跟上这步伐...
  6. ios苹果企业签名操作方法及使用流程
  7. PHP 替换原则,里氏替换原则是什么?
  8. centOS7 下作网络桥接
  9. java编程10以内随机数字乘除_随机生成10个长度为10以内的字符串并排序(Java入门第三季集合下作...
  10. 石头扫地机器人离线了怎么办_石头扫地机离线怎么设_石头扫地机客服_石头扫地机官网...