基于stm32f103与IIC的0.96OLED屏幕显示字符与平滑滚动显示

一、0.96OLED屏幕简介

1、类型区分及接线

  • 模块有7针和4针两种,下面的是7针模块,主要引脚与4针相同
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

2、IIC通信原理

关于IIC在之前的文章AHT20与stm32中介绍过,这里只做主要的时序介绍。

  • IIC总线
    在这里插入图片描述
    开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信号。同时IIC总线上的设备检测到这个开始信号它就知道处理器要发送数据了。
    停止信号
    处理器让SCL时钟保持高电平,然后让SDA数据信号由低变高就表示一个停止信号。同时IIC总线上的设备检测到这个停止信号它就知道处理器已经结束了数据传输,我们就可以各忙各个的了,如休眠等。
  • IIC数据传输过程
    在这里插入图片描述
    1、在数据传输时,SDA的数据在SCL为高电平时,必须保持稳定,SCL高电平器件完成数据的传输。在SCL低电平器件,可以任意改变SDA的数据。数据写入过程是从最好为开始,高位在前,低位在后,即MSB。
    2、响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。即接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
  • 数据写入
    在这里插入图片描述
    首先发送一个开始信号,接着发送从机地址,OLED的从机地址前7位为地址,最后一位表示读(1)或者写(0)。应答ACK信号表示有这个从设备存在。在接收到应答信号后,发送控制位,来区分之后所发送的数据是控制命令还是显示相关的数据。在发送控制位后,等待应答信号。然后发送相应的控制命令或者数据。最后发送停止信号,表示数据传输完成。

二、正常显示与平滑滚动显示

例程及字模工具等相关资料提取码:vzrh

1、显示字符

1、本文所用硬件为野火的指南者stmf103开发板,IIC模式的四针0.96,七针也可以,按照上文讲述的接线方式接线即可。
2、显示汉字与字符

  • 将下载后的例程打开,可以看到里边有显示汉字和字符串的函数
    在这里插入图片描述
  • 右键查看定义,了解每个参数的含义
    在这里插入图片描述
    显示汉字,参数分别为,起始点的横坐标x,纵坐标y,待显示汉字在字模数组中的位置。
    在这里插入图片描述
    显示字符串,参数分别为,起始点的横坐标x,纵坐标y,待显示字符串的首地址,待显示字符的字模大小(8、16、24、32等,取决于你取得字模格式)
  • 取模
    打开 oledfont.h文件
    在这里插入图片描述
    我们可以看到里面有各种字模数组,且有不同的大小,如上图中的汉字即为16×16的列行式字模,在数组中的行数即为显示汉字函数的第三个参数。
    打开资料中的取模软件
    在这里插入图片描述
    注意以上几个选项的选择,按照自己所需格式进行选择,然后确定,输入汉字生成字模。将生成的字模复制到自己的字模数组即可。

2、显示传感器数据

AHT20与stm32中我们介绍了AHT20与stm32f103进行温度采集,这里直接将AHT20初始化和IIC通信的源文件和头文件bsp_i2c移植到我们这个工程中,将采集到的温度显示到OLED屏上
在这里插入图片描述
然后在主函数中调用温度采集函数
在这里插入图片描述

3、平滑滚动显示

滚动显示可以使用软件的方式,即循环更新显示起始点的坐标,但这样显示并不流畅平滑,会有卡顿。所以我们采用硬件刷新的方式,通过给oled发送SSD1306的驱动显示命令,控制屏幕进行平滑滚动显示。资料中有SSD1306的驱动手册,可供参考。

在这里插入图片描述

4、效果演示

5、查看oled的IIC通信协议程序

打开oled.c,即可看到oled的IIC初始化,以及各时序命令,开始信号,停止信号,读写数据等函数。
具体如何编写应参照数据手册的内容进行编写。
在这里插入图片描述

### 0.96OLEDIIC接口工作原理 对于0.96OLED显示屏而言,其采用的是SSD1306控制器芯片。这种类型的显示器支持多种通信协议,其中IIC(Inter-Integrated Circuit)是最常用的之一。IIC总线只需要两根信号线即可完成数据交换:一根串行时钟线SCL和一根串行数据线SDA。 当使用硬件IIC方式连接STM32OLED屏时,MCU会按照特定的数据帧格式发送命令或图形数据给屏幕缓冲区[^1]。具体来说,在初始化阶段,需要设置好相应的寄存器来定义波特率、地址模式等参数;而在正常操作期间,则可以通过调用`HAL_I2C_Master_Transmit()`函数向设备写入指令集或者图像像素值。 ### HAL库使用教程 为了简化编程流程并提高代码可移植性,ST官方提供了Hardware Abstraction Layer (HAL) Library用于抽象底层硬件细节。对上述提到的硬件IIC驱动场景: #### 初始化过程 利用STM32CubeMX工具可以自动生成大部分必要的初始化代码片段。只需勾选对应外设选项,并指定正确的管脚映射关系即可自动配置GPIO端口及时钟使能等功能[^2]。 ```c // 在main.c文件中的初始化部分可能会看到如下类似的语句 __HAL_RCC_GPIOB_CLK_ENABLE(); // 开启PB GPIO时钟 hi2c1.Instance = I2C1; hi2c1.Init.Timing = 0x20707CEC; // 设置定时参数 ... HAL_I2C_Init(&hi2c1); // 调用此API完成最终初始化 ``` #### 数据传输方法 一旦完成了前期准备工作之后,就可以借助预定义好的API来进行实际的数据交互了。比如要清空整个显示区域的话,可能涉及到连续多次调用`HAL_I2C_Master_Transmit()`以传送一系列控制字节加上待填充的颜色信息至目标器件内部RAM中去[^3]。 ```c uint8_t buffer[] = {0xAE, /* 关闭显示 */ 0x40, /* 设定低列起始页地址 */ ... }; if(HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS << 1, buffer, sizeof(buffer), HAL_MAX_DELAY)!= HAL_OK){ Error_Handler(); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值