首页 > 其他分享 >Proteus 仿真 STM32 之 OLED显示屏

Proteus 仿真 STM32 之 OLED显示屏

时间:2024-09-13 15:24:16浏览次数:13  
标签:Column void uint8 STM32 OLED Proteus Line 图片

介绍

本博客适合有一定基础的单片机学习爱好者。

OLED是一款具有良好显示性能的屏幕,在单片机领域中常见尺寸为0.96英寸(128*64),具体介绍详见博客:OLED详解

本文针对OLED显示屏做一个简单的基于按键控制的计算器。器件采用stm32f103c8(主控芯片),OLED12864I2C(OLED显示屏),及基础硬件若干。

OLED屏幕显示的具体内容较为复杂,我们采用其他博主编写好的代码即可

这里我有整理出来:链接:https://pan.baidu.com/s/1cgK1v5BYMZnZNilcSMFl4w 
提取码:pdsj 

文件注意事项: 这里打开后看见有个OLED.c的文件打开后需要配置相应的引脚

因为采用IIC通信协议,因此需要选择哪个端口接SCL,哪个端口接SDA,这里选的是GPIOA 的 PA4接SCL,PA5接SDA,相应的下面的引脚初始化也要进行修改,可根据实际情况进行更改,不必拘泥于这个端口选择问题。问题: 有个简单的问题,部分编译器可能不支持将初始化的第一句  GPIO_InitTypeDef GPIO_InitStructure;  写在其他c语句之后,所以这个我们就写在最前面,避免不必要的问题。

器件摆放如下

简单使用

#ifndef __OLED_H
#define __OLED_H

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);

#endif

OLED.h文件里面有各种函数的声明,初始化,清屏,显示一个字符,显示一个字符串,显示数字,显示有符号数字,显示十六进制数,显示二进制数,右键选择 go to definition里面有各种函数的说明,写得很清楚。

下面我们来写一些简单的例子,倘若我们把屏幕分成4 * 16的格子,那么我们尝试下列函数

int main(void)
{ 
	OLED_Init();
	OLED_ShowChar(1,1,'A');
	OLED_ShowString(1,3,"HELLO!");
	OLED_ShowNum(2,1,128,3);
	OLED_ShowSignedNum(2,5,-10,2);
	OLED_ShowBinNum(3,1,0xCB,8);
	OLED_ShowHexNum(4,1,0xFF,2);
	while(1){  //主循环
		
	}
}

效果如图

 上述即为Proteus OLED的简单使用过程,函数文件已经配置完成,实际我们自己需要写的部分很少,学习起来较为容易。

然而,既然有了一个显示设备,不能轻易的就用来显示字符。实际上可以用来显示图片或者是视频(当然像素很低)。

高阶使用

参考文章:OLED显示图片

首先更换之前的OLED.c 等相关头文件

参考链接:驱动函数及图形转换工具
提取码:pdsj

同样的需要现在OLED.c文件中修改对应的SCL,SDA的端口,具体参考上述简单使用。

之后我们先学习如何绘制我们想要的图片,使用windows自带的画图功能

设置像素为 128 * 64,然后画出我们想要展示的图形

这里注意一定要保存为.bmp格式

 

然后打开图片转换器,配置为c51模式,打开保存的bmp文件,点击生成即可。

 

我们会得到一个文本文件,打开复制内容备用,在keil 中打开OLED_Font.h文件,找到图片这个选项,粘贴得到的数组即可。这里使用的是二位数组的形式,总共可以存放1024张图片,其实可以更多,这样我们就可以通过简单的索引方式来访问我们需要展示的图片。

最后在main.c中调用bmp显示函数即可

#include "stm32f10x.h"
#include "OLED.h"	// oled显示屏



int main(void)
{ 
	OLED_Init();
	OLED_BMP(0);
	while(1){  //主循环
		
	}
}

 

显示视频

视频就是快速播放的图片,当每秒播放的图片能够达到23帧以上时就可以看作视频,因此只需要提取一个视频的每一帧图片,转为规定格式大小bmp单色图,再通过图形转换工具转换成十六进制code,依次存放在上述的二维数组当中,通过主函数的循环调用就可以了。Proteus的视频仿真效果不是很好IIC的传输效率不够,这里不便展示,如果有条件,就使用实体的OLED屏幕配合单片机效果应该还不错。这里分享一个UP主写的内容:基于stm32的OLED显示(字符,字符串,汉字,图片,动图)_哔哩哔哩_bilibili

备注:可以实现kunkun打篮球的动态显示(博主本人不是小黑子bushi)

 

标签:Column,void,uint8,STM32,OLED,Proteus,Line,图片
From: https://blog.csdn.net/2302_80954675/article/details/142185029

相关文章

  • STM32 -中断
    并发(Concurrency)并发是指同时处理多个任务的能力,但并不意味着这些任务实际上是在同一时刻物理上同时运行的。在单处理器或多处理器系统中,并发通过时间片轮转(time-slicing)等技术实现,这些技术使得操作系统可以在多个任务之间快速切换,从而在宏观上给用户造成所有任务都在同时运行......
  • stm32之硬件SPI读写W25Q64存储器应用案例
    系列文章目录1.stm32之SPI通信协议2.stm32之软件SPI读写W25Q64存储器应用案例3.stm32之SPI通信外设文章目录系列文章目录前言一、电路接线图二、应用案例代码三、应用案例代码分析3.1基本思路3.2相关库函数介绍3.3MySPI模块3.3.1模块初始化3.3.2SPI基本时序......
  • stm32 SPI通信协议&W25Q64(软件SPI读写W25Q64)
    理论SPI1.SPI通信SPI(SerialPeripheralInterface)是由Motorola公司开发的一种通用数据总线四根通信线:SCK(SerialClock)、MOSI(MasterOutputSlaveInput)、MISO(MasterInputSlaveOutput)、SS(SlaveSelect)同步,全双工支持总线挂载多设备(一主多从)SCK:时钟线MOSI:主机输出,从......
  • ESP8266 开发板 带 0.96 OLED显示屏
     市面上有两种板子主要区别在于IIC通讯引脚不一样:第1款:SCL为12  /*D5=SCL=GPIO12*/SDA为14  /*D6=SDA=GPIO14*/第2款:SCL为5  /*D1=SCL=GPIO5*/SDA为4  /*D2=SDA=GPIO4*/先发第一款效果图示注意红色字体里的局部配置信息。#defineSCL12/*D5=SC......
  • STM32 之 SDRAM 详解
     目录 前言一、SDRAM简介二、SDRAM的组成原理 2.1存储单元阵列2.1.1地址译码2.1.2存储电容2.2控制逻辑2.2.1时钟同步2.2.2命令解码2.2.3模式寄存器2.3数据输入/输出缓冲2.3.1数据总线2.3.2数据锁存2.4刷新电路2.4.1自动刷新2.4.2自刷新三、STM32与S......
  • 较好的SPI 接口的 OLED入门文章
    参考文章:1.基于STM32+0.96寸OLED--7脚SPI接线显示+代码解析链接:https://blog.csdn.net/qq_59527512/article/details/139471311推荐理由:很好地讲解了OLED的基础认知:7脚OLED模块的引脚和5种接线方式(DS0/1/2)   我们的OLED屏幕选择的是SSD1306Z的芯片,是一个128*64大小......
  • 基于STM32C8T6的CubeMX:HAL库点亮LED
    三个可能的问题和解决方法:大家完成之后回来看,每一种改错误都是一种成长,不要畏惧,要快乐,积极面对,要耐心对待STMCuBeMX新建项目的两种匪夷所思的问题https://mp.csdn.net/mp_blog/creation/editor/142151511STMCubeMX文件下载后会出现其他项目无法下载的问题https://mp.csdn.ne......
  • 五、STM32标准库硬件SPI驱动OLED(基于SSD1106)
    1、驱动芯片及MCU介绍        SSD1106是一款常用于嵌入式设备中的小型屏幕OLED(有机发光二极管)显示器驱动芯片,被广泛应用于各种嵌入式设备中,本示例程序基于SSD1106驱动芯片的OLED显示屏。        本次示例采用STM32F103系列MCU,使用标准库硬件SPI驱动OLED......
  • stm32使用cubumx配置串口不定长接收
    前言此方法利用stm32的uart+dma来实现不定长接收,利用dma中的空闲中断。设置USART1为异步通信方式使能串口1全部中断设置USART1_RX的DMA中断接收 速度设置最大(其实用115200没有影响但为保证工程严谨性)检查中断优先级这两个中断是否开启  生成代码后......
  • stm32单片机遥控美的空调
    一、硬件清单1.STM32F103核心板2.红外发射传感器(38Khz)二、空调遥控原理及应用空调主机内设有红外接收管,通过红外发射管按照特定协议向空调主机发射信号,即可实现对空调温度、风速、模式等的控制。普通遥控器便是采用这样的方式进行操控。而若将此模块集成于我们的项目当中,......