3.HAL库-STM32的OLED开发基础
关于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开发基础相关推荐
- cebemax hal库 stm32 OLED移植 解析
cebemax hal库 stm32 OLED移植 序言: 这是一篇对于作者对于将OLED的驱动代码移植成hal库的文章,会有完整的过程,后面自然也会有完整的代码,希望能够帮到大家,同时也是做一个记录 ...
- STM32开发基础知识——OLED开发基础
基于stm32芯片的OLED应用,需要做的是: ①移植OLED的底层驱动函数库 ②调用OLED驱动库中的底层函数进行应用开发 OLED驱动库中常用函数 OLED初识化函数 void OLED_Iint ...
- 单片机 STM32F103C8T6 cubeMX HAL库 从环境到开发 正点原子工程移植 freeRTOS
文章目录 0 准备材料 1 闪烁PC13的小灯 2 正点原子工程移植 注意点以及细节 3 freeRTOS 3.1 LED KEY 串口1 的一个实验 0 准备材料 1.需要正点原子的HAL介绍书籍可 ...
- P3 STM32的按键开发基础
一,按键扫描的基本原理 1.按键信号的识别 一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地. 在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平. 通过反复 ...
- 11.小白初学日记 STM32F429 HAL库 STM32程序启动过程
大家好,怀着激动地小心,激动地小手,我们来了. 今天我想给大家分享一个我自己的错误点.来警示大家. 刚才写我按键例程程序的时候,我自己来写的,发现启动不了,终于找到了原因,大家一起来看下. while ...
- 基于HAL库STM32串口驱动不定长数据接收
STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码 使用方法 源码 串口接口文件 环形缓冲区接口文件 移植图示 使用涉及4个文件, UART_Port.c UART_Port.h Circul ...
- Openmv入门01——HAL库stm32
Openmv入门01 开启一个项目 Openmv程序 1.识别长度 2.识别面积 STM32 1.识别长度 2.识别面积 开启一个项目 看看例程~很快上手https://docs.singtown.c ...
- STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯
STM32F103C8T6基础开发教程目录 STM32F103C8T6基础开发教程(HAL库)-开发环境配置 STM32F103C8T6基础开发教程(HAL库)-Keil添加注释的快捷键 STM32F ...
- STM32F103C8T6基础开发教程(HAL库)—开发环境配置
STM32F103C8T6基础开发教程目录 STM32F103C8T6基础开发教程(HAL库)-开发环境配置 STM32F103C8T6基础开发教程(HAL库)-Keil添加注释的快捷键 STM32F ...
最新文章
- 2021-2027年中国中空纤维膜行业市场研究及前瞻分析报告
- toad for oracle xpert edition,Toad for oracle 软件产品模块对比,方便大家选型
- HTTP状态码(HTTP Status Code),常见的error 404, error 504等的意思
- 修改生产订单的BAPI!
- centos 安装 redmine 2.1.4
- ejb运行程序_在哪里可以运行EJB?
- 定制MyBatis的日志
- 以向量和矩阵的视角抽象万物
- 美团一面:说说前、后端分离权限控制设计和实现思路?
- auto.js制作简易音乐app(一)
- boost 普通用户读取SYSTEM创建的共享内存
- 网站收录之采集新闻源工具
- 基于STM32F4 的OLED屏显示噪点、花屏问题
- android通讯录开发(粗糙实现微信通讯录的功能)
- android 自由浏览器下载地址,改善手机上网体验 云集浏览器Android 2.3.1版发布
- UG后处理—程序重写程序头输出相关信息
- Linux怎么输出函数,Linux C 程序 输入输出函数(THREE)
- 微信公众号(一)每日推送详细教程(含实时定位,天气预报,每日英语,纪念日等,可快速自定义消息模板并指定订阅者类型发送)
- virsh存储池,存储卷的管理
- xlrd读取所有sheet名_Python3之excel操作——xlrd,xlwt,xlutils模块
热门文章
- Win11提示该文件没有与之关联的应用来执行该操作该如何解决
- 一名普通网安程序员的2022总结和2023展望
- OKEx公链OKChain 下一个DeFi跑马场?
- windows查看KILL进程
- 成都电子计算机实验中学 孙蕾,成都学校有个“英才小男团”,中考重点线上等你来聊!跟上这步伐...
- ios苹果企业签名操作方法及使用流程
- PHP 替换原则,里氏替换原则是什么?
- centOS7 下作网络桥接
- java编程10以内随机数字乘除_随机生成10个长度为10以内的字符串并排序(Java入门第三季集合下作...
- 石头扫地机器人离线了怎么办_石头扫地机离线怎么设_石头扫地机客服_石头扫地机官网...