oled使用 f4软件iic 数字 汉字 小图片 HAL库

news2024/11/15 13:22:47

基于江科大的oled标准库进行移植 到Hal库上

本人参考了许多大佬的源码 进行更改
由于F4和F1主频不一样 由于F4主频太高 在进行软件iic时需要延时一下 才可驱动oled 本人在网上找了一个开源的us延时函数 已经添加进入

文件分享
通过百度网盘分享的文件:delay,oled等2个文件
链接:https://pan.baidu.com/s/17W0AlXyCT9Zx64YfZzSLMg
提取码:30jg

1.移植全过程

先使用cubeMX创建一个HAL库的f4工程
f4zgt6 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成后生成工程
在cubemx生成的工程文件目录下面 在这里插入图片描述
Drivers 中新建一个文件夹 oled 和delay
在这里插入图片描述
把文件全部复制粘贴到对应的文件夹进去
在这里插入图片描述

在这里插入图片描述
打开keil
在这里插入图片描述

在这里插入图片描述
小方框新建目录 添加两个对应的文件
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
添加头文件的路径
将oled和delay的头文件路径添加进去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
每个文件需要包含的文件如图所示
myiic中

//IIC软初始化
void iic_init(void)
{
    //GPIO结构体
    GPIO_InitTypeDef GPIO_InitType;

    //使能GPIOB
    __HAL_RCC_GPIOB_CLK_ENABLE();

    //配置GPIO(PB6对应SCL,配置成推挽输出)
    GPIO_InitType.Pin = GPIO_PIN_4;
    GPIO_InitType.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */
    GPIO_InitType.Pull = GPIO_PULLUP;    
    GPIO_InitType.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */
    HAL_GPIO_Init(GPIOB, &GPIO_InitType);    /* SCL */

    //配置GPIO(PB7对应SDA,配置成开漏输出)
    GPIO_InitType.Pin = GPIO_PIN_5;
    GPIO_InitType.Mode = GPIO_MODE_OUTPUT_OD;            /* 开漏输出 */
    GPIO_InitType.Pull = GPIO_PULLUP;    
    GPIO_InitType.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */
    HAL_GPIO_Init(GPIOB, &GPIO_InitType);    /* SDA */

}
这里的iic引脚是PB4和PB5 如果需要修改可以进行引脚修改 改时钟 改引脚 

delay.h中

#ifndef __DELAY_H
#define __DELAY_H

#include "main.h"
#define CPU_FREQUENCY_MHZ    168	// STM32时钟主频
void delay_us1(__IO uint32_t delay);

#endif
对应着自己系列的主频进行修改 

主函数

#include "main.h"
#include "gpio.h"
#include "oled.h"记得添加这个头文件

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
	OLED_Init(); 初始化
	OLED_ShowChar(0,0,'B',OLED_8X16); 显示字符
	OLED_ShowChinese(0,16,"世界");显示汉字
	OLED_Update(); 更新oled
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

oled即可正常使用
注意 OLED_ShowChar(0,0,‘B’,OLED_8X16); 最后一个参数是oled 显示汉字数字的大小 字体的大小

2.显示中文

在红线上添加 --no-multibyte-chars在这里插入图片描述

首先需要在添加需要的汉字字模
取模软件的设置如图所示
在这里插入图片描述
注意对照
得到对应的字模后到 OLED_Data.c文件中的
const ChineseCell_t OLED_CF16x16[] 这个数组中添加字模

const ChineseCell_t OLED_CF16x16[] = {
	
	",",
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	
	"。",
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	
	"你",
	0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
	0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,
	
	"好",
	0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
	0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
	
	"世",
	0x20,0x20,0x20,0xFE,0x20,0x20,0xFF,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,
	0x00,0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x00,0x00,
	
	"界",
	0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,
	0x08,0x08,0x04,0x84,0x62,0x1E,0x01,0x00,0x01,0xFE,0x02,0x04,0x04,0x08,0x08,0x00,
	
    "啊",
    0xFC,0x04,0xFC,0x00,0xFE,0x42,0xBE,0x00,0xF2,0x12,0xF2,0x02,0xFE,0x02,0x00,0x00,
    0x0F,0x04,0x0F,0x00,0xFF,0x10,0x0F,0x00,0x0F,0x04,0x4F,0x80,0x7F,0x00,0x00,0x00,
		
		
	
		"哈",
		0x00,0xFC,0x04,0x04,0xFC,0x20,0x50,0x48,0x44,0x43,0x44,0x48,0x50,0x20,0x20,0x00,
		0x00,0x0F,0x04,0x04,0x0F,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,/*0*/
		/* (16 X 16 , 宋体 )*/
		"喽",
		0x00,0xFC,0x04,0x04,0xFC,0x00,0x90,0x52,0x34,0x10,0x7F,0x10,0x34,0x52,0x90,0x00,
		0x00,0x0F,0x04,0x04,0x0F,0x82,0x82,0x5A,0x56,0x23,0x22,0x52,0x4E,0x82,0x02,0x00,/*1*/
		/* (16 X 16 , 宋体 )*/
		"大",
		0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
		0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*2*/
		/* (16 X 16 , 宋体 )*/
		"家",
		0x10,0x2C,0x24,0x24,0xA4,0xA4,0x65,0xA6,0x24,0x24,0x24,0x24,0xA4,0x34,0x0C,0x00,
		0x40,0x49,0x49,0x29,0x24,0x14,0x52,0x89,0x7F,0x04,0x0A,0x11,0x10,0x20,0x20,0x00,/*3*/
		/* (16 X 16 , 宋体 )*/
		"不",
		0x00,0x02,0x02,0x02,0x02,0x82,0x42,0xF2,0x0E,0x42,0x82,0x02,0x02,0x02,0x00,0x00,
		0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x02,0x0C,0x00,0x00,/*4*/
		/* (16 X 16 , 宋体 )*/
		"好",
		0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
		0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/*5*/
		/* (16 X 16 , 宋体 )*/


	
	/*按照上面的格式,在这个位置加入新的汉字数据*/
	//...
    
    
	/*未找到指定汉字时显示的默认图形(一个方框,内部一个问号),请确保其位于数组最末尾*/
	"",		
	0xFF,0x01,0x01,0x01,0x31,0x09,0x09,0x09,0x09,0x89,0x71,0x01,0x01,0x01,0x01,0xFF,
	0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x96,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,

};

一定是要按照对应的格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何自动抓取岗位数据?五种采集技巧

摘要: 本文将深入探讨如何从前程无忧网站自动抓取岗位信息,通过分享五大实用的采集技巧,助您轻松掌握大数据时代的招聘情报。无需编程基础,也能高效获取目标职位详情,优化人力资源管理与市场分析。 正文:…

电脑图片损坏打不开怎么办?能修复吗?

照片和视频是记录和保存现实生活中的事件的最好方式。由于手机储存空间有限,一般我们会把有纪念意义的照片放到电脑上进行保存,但有时难免会遇到照片被损坏打不开的情况,一旦遇到这种情况,先不要急,也不要因为照片打不…

【RISC-V设计-12】- RISC-V处理器设计K0A之验证环境

【RISC-V设计-12】- RISC-V处理器设计K0A之验证环境 文章目录 【RISC-V设计-12】- RISC-V处理器设计K0A之验证环境1.简介2.验证顶层3.顶层代码4.模型结构4.1 地址映射4.2 特殊功能寄存器 5.模型代码6.运行脚本7.总结 1.简介 在前几篇文章中,分别介绍了各个模块的设…

订单增长40%,磁性元件下半年还有哪些挑战?

导语 2024即将过半,哪些终端市场发展势头更好?海运价格上涨又会对磁性元件企业造成哪些影响? 2024年开春以来,比亚迪发起了新一轮价格战,让持续一年的新能源汽车价格战再度升级,也让2024年的市场走势更加扑朔迷离。 第二十二届(…

PMTiles介绍与MapboxGL中使用

概述 本文介绍PMTiles以及PMTiles在MapboxGL中的使用。 PMTiles简介 PMTiles 是一种对瓦片数据的单文件压缩格式。PMTiles 压缩包可以托管在如 S3 这样的商品级存储平台上,并允许创建低成本、零维护的“无服务器”地图应用程序——这些应用程序无需自定义瓦片后端…

手机误操作导致永久删除照片的恢复方法有哪些?

随着手机功能的不断增强和应用程序的不断丰富,人们越来越依赖手机,离不开手机。但有时因为我们自己的失误操作,导致我们手机上重要的照片素材被永久删除,这时我们需要怎么做,才能找回我们被永久删除的照片素材呢&#…

LeetCode.676.实现一个魔法字典

题目描述: 设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。 实现 MagicDictionary 类&a…

前端工程化项目 用npm拉git项目的时候是在是太慢了怎么办

最近在家拉git项目发现npm i之后,开始下得挺快,过会就卡着不动了,大概几分钟后才下好。这对一个有强迫症的码农来说是不能容忍的。 只能退出去 重新下载 其实我们只要换一下国内的下载镜像源就好了 npm config set registry https://registry.npmmirror…

[C++][opencv]基于opencv实现photoshop算法灰度化图像

测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 BlackWhite.hpp #ifndef OPENCV2_PS_BLACKWHITE_HPP_ #define OPENCV2_PS_BLACKWHITE_HPP_#include "opencv2/core.hpp"namespace cv {class BlackWhite { public:float red; //红色的灰度系…

vs code编辑区域右键菜单突然变短

今天打开vs code发现鼠标在编辑区域按右键,出来的菜单只显示一小段 显示不全,而之前的样子是 显示很多项,怎么设置回到显示很多项呢?

自动驾驶TPM技术杂谈 ———— 可行驶区域

文章目录 介绍基于传统计算机视觉的方法基于直接特征的可行驶区域检测基于颜色的可行驶区域检测基于纹理的可行驶区域检测基于边缘的可行驶区域检测 基于间接特征的可行驶区域检测 基于深度学习的方法语义分割基于FCN的可行驶区域分割 介绍 可行驶区域检测主要是为了自动驾驶提…

数据科学的定义,如果做数据科学,非计算机的你,一般来说最好还是选择R语言,图像挖掘除外

一、数据科学(Data Science) 数据科学的起源可以追溯到1962年,当时统计学家John W. Tukey在他的文章《数据分析的未来》中首次提出了数据分析作为一门独立的科学方法。1974年,计算机学家Peter Naur在《计算机方法的简明调研》中明…

shell外壳与Linux权限

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1.shell命令以及运行原理2. Linux权限的概念3.Linux权限管理3.1 文件访问者的分类…

大语言模型 LLM book 笔记(二)

第二部分 预训练 第四章 数据准备 4.1 数据来源 4.1.1 通用文本数据 网页 书籍 4.1.2 专用文本数据 多语文本 科学文本 代码 4.2 数据预处理 4.2.1 质量过滤 基于启发式规则的方法 基于语种的过滤:语言识别器筛选中英文,对于多语的维基百科由于…

高阶数据结构——LRU Cache

1.什么是LRU Cache LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速…

制约AI发展的关键在于人机环境系统智能的失配

人工智能(AI)发展的关键挑战之一就是人机环境系统之间的智能失配。这种失配指的是人工智能系统、其操作人员和应用环境之间的协调和适配问题,通常会影响系统的有效性和安全性。以下是一些具体方面,这些方面展示了人机环境系统智能…

《企业微服务实战 · 接口鉴权思路分享》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

ES JavaApi

1.RestClient操作索引库 2.RestClient操作文档 2.1查询 2.2更新 2.3删除 2.4批量新增(bulk) 3.DSL查询 对应的api 3.0解析响应 3.1全文检索 3.2精确查询 3.3复合查询-boolQuery 构建boolQuery 3.4排序和分页 3.5高亮

浙大数据结构慕课课后题(06-图2 Saving James Bond - Easy Version)(拯救007)

题目要求: This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake fi…

C++打怪小游戏

这是一款用C代码写出来的打怪游戏。 上图片👇 ![](https://i-blog.csdnimg.cn/direct/6a4497c784ff4ba7a3332bc97d433789.png 一个11岁小朋友,爆肝532行,11小时完成代码,内部14个函数,5个结构体,三连…