STM32 OLED显示汉字及屏幕滚动(I2C协议)

这篇具有很好参考价值的文章主要介绍了STM32 OLED显示汉字及屏幕滚动(I2C协议)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、任务目标

理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:

  1. 显示自己的学号和姓名;

  2. 显示AHT20的温度和湿度;

  3. 上下或左右的滑动显示长字符。

二、材料准备

硬件:

  • STM32F103C8T6最小板
  • AHT20温湿度传感器
  • ST-LINK 仿真器
  • 4针脚使用I2C通信协议的OLED屏
  • 面包板
  • 杜邦线

软件:

  • KEIL 5
  • 字模软件

三、AHT20温湿度传感器的使用

可以看我上次写的文章:STM32 I2C协议读取温湿度传感器

四、OLED的使用

1.硬件

我这里使用的是4针脚的OLED屏,通信协议是I2C。
oled滚动字幕的原理,stm32,单片机,嵌入式硬件

2.字模

汉字编码原理

  • 1、所有的汉字或者英文都是下面的原理:
    由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。

  • 2、生成的字库说明:(以12×12例子)
    一个汉字占用字节数:12÷8=1····4也就是占用了2×12=24个字节。
    编码排序A0A0→A0FEA1A0→A2FE依次排列。
    以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。

取字模

这里我使用的取字模软件为PCtoLCD2002,打开软件之后按下图进行设置
oled滚动字幕的原理,stm32,单片机,嵌入式硬件
oled滚动字幕的原理,stm32,单片机,嵌入式硬件
输入要得到的字模,点击生成字模,再把生成的字模的代码复制即可
oled滚动字幕的原理,stm32,单片机,嵌入式硬件

3.工程

这里可以用上次的AHT20的工程,复制一个,再添加OLED相关文件即可。
或者也可以直接下载我的代码。(注意是I2C通信,4针脚屏)
oled滚动字幕的原理,stm32,单片机,嵌入式硬件
原本的字模库中已经有了数字和相关符号的字模,这里的10x16像素的字模库是刚才通过软件提取出来的,需要与数字的字模库分开定义,因为定义的像素并不一样。
除此之外,自带的函数里面并没有输出中文的方法,需要我们自己定义。

/**
  * @brief  OLED初始化
  * @param  Line 起始行位置
  * @param  Column 起始列位置
  * @retval 无
  */
void OLED_ShowCHINESE(uint8_t Line, uint8_t Column, uint8_t Num)
{
	
	uint8_t i;
	uint8_t wide = 20;//字宽
	
	OLED_SetCursor(( Line - 1 ) * 2, ( Column - 1 )* wide);		//参数1:把光标设置在第几页. 参数2:把光标设置在第几列
	for (i = 0; i < wide; i++)
	{
		OLED_WriteData(OLED_F10x16[Num][i]);			//显示上半部分内容
	}
	
	OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
	for (i = 0; i < wide ; i++)
	{ 
		OLED_WriteData(OLED_F10x16[Num][i+wide]);		//显示下半部分内容
	}

}

这之后要实现滚动效果,代码及功能如下:

				OLED_WriteCommand(0x2E); //关闭滚动
				OLED_WriteCommand(0x26); //向右滚动,27则向左
				OLED_WriteCommand(0x00); //虚拟字节
				OLED_WriteCommand(0x00); //起始页 这里为0
				OLED_WriteCommand(0x07); //滚动速度
				OLED_WriteCommand(0x03); //终止页 这里为3,也就是之后的姓名,学号
				OLED_WriteCommand(0x00); //虚拟字节
				OLED_WriteCommand(0xFF); //虚拟字节
				OLED_WriteCommand(0x2F); //开启滚动

然后是主函数main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AHT20-21_DEMO_V1_3.h"
#include <stdio.h>


int main(void)
{
	
		Init_I2C_Sensor_Port();//初始化SDA,SCL的IO口的函数
		uint32_t CT_data[2];
		volatile int  c1,t1;
		Delay_1ms(500);
		OLED_Init();//初始化OLED
		if((AHT20_Read_Status()&0x18)!=0x18)
		{
			AHT20_Start_Init(); //重新初始化寄存器
			Delay_1ms(10);
		}


		OLED_ShowCHINESE(1,1,0); //第1行第1列调用字模库第0个字 陈
		OLED_ShowCHINESE(1,2,1); //第1行第2列调用字模库第1个字 爽
		OLED_ShowString(2,1,"632007060523"); //第二行第一列显示字符串
		OLED_ShowCHINESE(3,1,3);//第3行第1列调用字模库第3个字 湿
		OLED_ShowCHINESE(3,2,4);//第3行第2列调用字模库第4个字 度
		OLED_ShowString(3,6,":"); 
		OLED_ShowCHINESE(4,1,2);//第4行第2列调用字模库第2个字 温
		OLED_ShowCHINESE(4,2,4);//第3行第2列调用字模库第4个字 度
		OLED_ShowString(4,6,":"); 
		while(1)
		{
				OLED_WriteCommand(0x2E); //关闭滚动
				OLED_WriteCommand(0x26); //向右滚动,27则向左
				OLED_WriteCommand(0x00); //虚拟字节
				OLED_WriteCommand(0x00); //起始页 这里为0
				OLED_WriteCommand(0x07); //滚动速度
				OLED_WriteCommand(0x03); //终止页 这里为3,也就是之后的姓名,学号
				OLED_WriteCommand(0x00); //虚拟字节
				OLED_WriteCommand(0xFF); //虚拟字节
				OLED_WriteCommand(0x2F); //开启滚动
	
				//AHT20_Read_CTdata(CT_data);       
				AHT20_Read_CTdata_crc(CT_data);   //CRC校验
		
				while(CT_data[0]==0x00&&CT_data[1]==0x00) 
				{
					AHT20_Read_CTdata_crc(CT_data);//CRC校验后,读取数据
				}
				c1 = CT_data[0]*100*10/1024/1024;  
				t1 = CT_data[1]*200*10/1024/1024-500;
				
				下一步客户处理数据,我们这里用两个字符串来表示计算得到的值
				char str1[5];
				char str2[5];
				sprintf(str1,"%.2f",c1/10.0);
				sprintf(str2,"%.2f",t1/10.0);
				OLED_ShowString(3,7,str1);//把浮点数转为字符串显示在屏上
				OLED_ShowString(4,7,str2);
				Delay_1ms(2000);

	}

}

4.电路连接

B1接管脚2,B0接管脚4,其他的按图接即可,图二中有几根线多余,上面的两根红线和蓝线原本是连接LED灯的,下面的三根线(蓝、黄、绿)原本是连接CH340模块的,可以不用接,本次实验不需要。
oled滚动字幕的原理,stm32,单片机,嵌入式硬件
oled滚动字幕的原理,stm32,单片机,嵌入式硬件
图片来源:江科大自化协

5.实验效果

可以看到,输出了自己的学号姓名,显示了温湿度,且当手靠近传感器时,温湿度有变化,并实现了滚动效果。
oled滚动字幕的原理,stm32,单片机,嵌入式硬件

五、总结

本次实验主要使用标准库导入了AHT20模块和OLED模块,实现了显示温湿度数据和学号姓名的滚动显示。OLED屏的使用比较方便,用来调试啥的也很不错。

六、参考资料

点阵汉字的字模读取与显示
基于STM32的0.96OLED基本显示学习,及 上下或左右的滑动显示长字符(使用硬件刷屏模式),OLED显示变量值操作详细解析文章来源地址https://www.toymoban.com/news/detail-780316.html

到了这里,关于STM32 OLED显示汉字及屏幕滚动(I2C协议)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 硬件IIC 控制OLED I2C卡死问题

    #更新通知:2023-09-06 STM32L151 固件库 使用I2C 太难了,又宕机了,建议不要在固件库版本上尝试硬件IIC 了,一般人真用不了,直接使用软件模拟的,或者不要使用固件库了,用HAL 库吧,据说HAL 库没这么多问题,不死心的我还是死心了,等有空再研究吧 3.1 I2C模式,我这里选的

    2024年02月09日
    浏览(51)
  • 【STM32 CubeMX】I2C层次结构、I2C协议

    在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于连接各种外设和传感器。理解I2C的层次结构、协议和硬件结构对于STM32微控制器的开发至关重要。通过STM32 CubeMX提供的图形化配置工具,我们能够更轻松地理解和配置I2C通信,同时深入了解

    2024年02月22日
    浏览(81)
  • STM32配合cubeMX硬件I2C驱动0.96寸OLED

    目录 一、简单介绍 1.1   OLED 1.2   I2C协议 二、实战 2.1 工程配置 2.2 测试工程 2.3 波形分析 三、驱动OLED 3.1 初始化代码 3.2 清屏函数 3.3 设置坐标函数 3.4 显示字符函数 3.5 显示字符串函数 3.6 显示图片函数 附录 驱动代码文件 oled.c oled.h f6x8.h 有机发光二极管 (英语:Organic

    2024年02月08日
    浏览(64)
  • 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动

    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第2篇, 主要总结和记录一个I2C从设备的驱动, 在linux内核中如何实现, 如何给用户态的程序暴露合适的接口, 让用户态有机

    2024年02月09日
    浏览(49)
  • 【【STM32----I2C通信协议】】

    我们会发现I2C有两根通信线: SCL和SDA 同步 半双工 带数据应答 支持总线挂载多设备(一主多从,多主多从) 硬件电路 所有I2C设备的SCL连在一起,SDA连在一起 设备的SCL和SDA均要配置成开漏输出模式 SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右 左边的CPU就是主机,他的权

    2024年02月12日
    浏览(51)
  • stm32中的i2c协议

    协议通讯图 I2C上一个总线能挂载多个设备共用信号线,可以连接多个从机 只用了两个总线,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。 每个连接到总线的设备都有独立的地址,主机可以通过该地址进行访问 I2C空闲

    2024年01月22日
    浏览(58)
  • 【STM32】STM32学习笔记-I2C通信协议(31)

    I2C(Inter-Integrated Circuit)总线 是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。 串行的 8 位双向数据传输位速率在标准模式下可

    2024年01月23日
    浏览(75)
  • 【WCH】CH32F203基于内部RTC+I2C SSD1306 OLED时钟和温度显示

    📌相关篇《【WCH】CH32F203基于内部RTC时钟+I2C SSD1306 OLED显示》 📺显示效果: ✨主要是在其基础 上增加温度显示,温度数据来源于DS18B20,更换了OLED驱动显示字体相关内容。 🔰仅作为功能演示,内部RTC精度不高,长时间运行需要依赖第三方数据校准才行。 🔖代码是从STM32工

    2023年04月26日
    浏览(54)
  • 【STM32学习】——I2C通信协议&MPU6050姿态传感器&软件I2C读写MPU6050

    ​   目录 前言 一、I2C通信协议 1.简介 2.硬件电路设计 3.I2C时序(软件)

    2024年02月16日
    浏览(56)
  • MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕

    平台:Code Composer Studio 10.4.0 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) P3.0为SDA,P3.1为SCL OLED.c OLED.h OLED_Font.h

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包