基于SPI/IIC接口的OLED数据显示

该博客围绕STM32F103展开,介绍了利用其SPI或IIC接口完成的任务,包括理解OLED屏显和汉字点阵编码原理,实现显示学号和姓名、AHT20的温度和湿度,以及字符滚动显示等功能,还提及了字幕编码、工程文件和相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务

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

  1. 显示自己的学号和姓名;
  2. 显示AHT20的温度和湿度;
  3. 上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。(最好使用硬件刷屏模式)

字幕编码及工程文件

具体内容

1.字母编码
在这里插入图片描述
2.设置
在这里插入图片描述
在这里插入图片描述
字符模式
在这里插入图片描述
在这里插入图片描述
3.打开工程项目
在这里插入图片描述
连接硬件
在这里插入图片描述

显示学号及姓名

代码

void TEST_MainPage(void)
{	
	TEST_Number_Character(); //数字和符号显示
	TEST_Chinese();  
}
void TEST_Number_Character(void) 
{
	GUI_ShowString(0,0,"631807060225",8,1);  //输出学号
}
void TEST_Chinese(void)
{	
	GUI_ShowCHinese(16,20,16,"名字",1);  //输出字符
	delay_ms(1000);
}

main.c

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{	
	delay_init();	    	       //延时函数初始化
	NVIC_Configuration(); 	   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{	
		TEST_MainPage();         //主界面显示测试
		OLED_Clear(0); 
	}
}

AHT20的温度和湿度

实验前需将上个实验的温湿度传感器项目代码移植到被你从工程中
test.c中加入

//温度显示函数
void show_tem(int hem,int tem)
{
	GUI_ShowString(8,32,"温度: ",16,1);//显示湿度
	GUI_ShowNum(48,32,hem,2,16,1);
	GUI_ShowString(64,32,"%",16,1);
	GUI_ShowString(8,48,"湿度: ",16,1);//显示温度
	GUI_ShowNum(48,48,tem,2,16,1);
	GUI_ShowCHinese(64,48,16,"¡æ",1);
}

main.c

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
#include "24cxx.h"	 
#include "AHT20.h"
struct m_AHT20 AHT20;
int main(void)
{	
	int hem,tem;
	delay_init();	    	    
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 
	IIC_Init();						
	AHT20.alive=!AHT20_Init();	       
	OLED_Init();			    
	OLED_Clear(0);             
	while(1) 
	{	
		show_my_num(); 
		show_my_name();
		if(AHT20.alive)
		{
			AHT20.flag = AHT20_ReadHT(AHT20.HT);
			hem = AHT20.HT[0]*100*10/1024/1024/10;
			tem = (AHT20.HT[1]*200*10/1024/1024-500)/10;
		}
		show_tem(hem,tem);
		delay_ms(9000);
		delay_ms(9000);
	}
}

字符滚动

test.c

void Roll_display(void)
{
	int i,j,m=112,n=0,k=0;
	for(j=0;j<1;j++)
		for(i=m;i>=-208;i-=1)
		{
			if(i<m&&i>n)
				GUI_ShowFont16(i,22,"信",1);
			if(i+16<m&&i+16>n)
				GUI_ShowFont16(i+16,22,"息",1);
			if(i+32<m&&i+32>n)
				GUI_ShowFont16(i+32,22,"科",1);
			if(i+48<m&&i+48>n)	
				GUI_ShowFont16(i+48,22,"学",1);
			if(i+64<m&&i+64>n)
				GUI_ShowFont16(i+64,22,"与",1);
			if(i+80<m&&i+80>n)
				GUI_ShowFont16(i+80,22,"工",1);
			if(i+96<m&&i+96>n)
				GUI_ShowFont16(i+96,22,"程",1);
			if(i+112<m&&i+112>n)	
				GUI_ShowFont16(i+112,22,"学",1);
			if(i+128<m&&i+128>n)
				GUI_ShowFont16(i+128,22,"院",1);
			if(i+144<m&&i+144>n)
				GUI_ShowFont16(i+144,22,"物",1);
			if(i+160<m&&i+160>n)
				GUI_ShowFont16(i+160,22,"联",1);
			delay_ms(42);
			k++;
			if(k==16)
			{
				OLED_Clear(0); 
				k=0;
			}
		}	
}

roll函数

void roll(void)
{  
	OLED_WR_Byte(0x2F, OLED_CMD);  
	OLED_WR_Byte(0x27, OLED_CMD);   
	OLED_WR_Byte(0x00,OLED_CMD);       
  	OLED_WR_Byte(0x00,OLED_CMD);        
  	OLED_WR_Byte(0x07,OLED_CMD);        
  	OLED_WR_Byte(0x2E,OLED_CMD); 	
  	while(1);
}

显示

void show_roll(void)
{	
	GUI_ShowCHinese(45,16,16,"信息科学与工程学院物联",1);
}

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值