一、题目要求
(1))显示自己的学号和姓名;
(2) 显示AHT20的温度和湿度;
(3) 上下或左右的滑动显示长字符。
二、STM32+OLED显示个人学号姓名
1、文字取模
使用取字模软件PCtoLCD2002,打开软件之后按下图进行设置
2、撰写代码
1、存储文字
2、main.c主函数
#include "stm32f10x.h"
#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_ShowCN(2,1,0);//第2行第1列调用字模库第0个字
OLED_ShowCN(2,2,1); //第2行第2列调用字模库第1个字
OLED_ShowCN(2,3,2);//第2行第3列调用字模库第2个字
OLED_ShowString(3,1,"111111111111"); //第3行第1列显示字符串,学号
while(1)
{
}
}
3、效果展示
三、STM32+OLED显示AHT20温湿度
1、点阵字模
2、温湿度可以用上次的AHT20的工程,并将串口发送改为OLED显示即可。
3、主函数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_ShowCN(2,1,4);
OLED_ShowCN(2,2,5);
OLED_ShowString(2,6,":");
OLED_ShowCN(3,1,3);
OLED_ShowCN(3,2,5);
OLED_ShowString(3,6,":");
while(1)
{ AHT20_Read_CTdata(CT_data);
AHT20_Read_CTdata_crc(CT_data);
while(CT_data[0]==0x00&&CT_data[1]==0x00)
{
AHT20_Read_CTdata_crc(CT_data);//crc校验后,读取AHT20的温度和湿度数据
}
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,"%.1f",c1/10.0);
sprintf(str2,"%.1f",t1/10.0);
OLED_ShowString(2,7,str1);
OLED_ShowString(3,7,str2);
Delay_1ms(2000);
}
}
4、效果展示
四、STM32+OLED上下或左右的滑动显示长字符
1、点阵字模
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); //开启滚动
2、主函数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_ShowCN(2,1,6);//爱
OLED_ShowCN(2,2,7);//拼
OLED_ShowCN(2,3,8);//才
OLED_ShowCN(2,4,9);//会
OLED_ShowCN(2,5,10);//赢
while(1)
{
OLED_WriteCommand(0x2E);
OLED_WriteCommand(0x26);
OLED_WriteCommand(0x00);
OLED_WriteCommand(0x00);
OLED_WriteCommand(0x07);
OLED_WriteCommand(0x07);
OLED_WriteCommand(0x00);
OLED_WriteCommand(0xFF);
OLED_WriteCommand(0x2F);
}
}
3、效果展示
三、总结
通过本次实验,能较为熟练地使用AHT20模块和OLED模块,实现了显示温湿度数据和学号姓名的滚动显示,OLED实验较为有趣,今后使用其他模块实验,可用于显示调试。
四、参考案例
https://blog.csdn.net/cjhz2333/article/details/128005612