文章目录
- 一、原理
- 二、实现
- 1.显示中文
- 2.滚动显示
- 3.显示字符串
- 4.读取温湿度
- 5.显示温湿度
- 三、结果
- 1.开机显示欢迎信息
- 2.循环读取温湿度以及滚动显示我的id
- 四、总结
- 五、参考
- 六、源码
- 1.github
- 2.gitee
一、原理
SPI的定义
SPI(Serial Peripheral Interface)就是串行外围设备接口。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。
二、实现
代码过于多,只展示部分核心代码.更多代码可以直接下载源码
1.显示中文
把需要显示的中文字符存放在该文件里面
通过提取子模软件提取对应汉字的点阵,点阵大小为16*16
在main函数中调用显示中文的函数
GUI_ShowCHinese(10,0,16,"重庆交通大学",1);
函数原型
- x为相对于屏幕左边偏移量
- y为相对于屏幕上边偏移量
- hsize为点阵大小,选择16
- str为显示的字符串
- mode为模型,选择1
其他显示函数参数大同小异
2.滚动显示
水平滚动
OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动
OLED_WR_Byte(0x27,OLED_CMD); //水平向左或者右滚动 26/27
OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD); //起始页 0
OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔
OLED_WR_Byte(0x02,OLED_CMD); //终止页 2
OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节
//博客id
GUI_ShowCHinese(10,0,16,"醉意丶千层梦",1);
//开启滚动
OLED_WR_Byte(0x2F,OLED_CMD);
垂直滚动
OLED_WR_Byte(0x2e,OLED_CMD); //关闭滚动
OLED_WR_Byte(0x29,OLED_CMD); //水平垂直和水平滚动左右 29/2a
OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD); //起始页 0
OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD); //终止页 1
OLED_WR_Byte(0x01,OLED_CMD); //垂直滚动偏移量
OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动
3.显示字符串
GUI_ShowString(10,24,"631907060520",16,1);
函数原型
- x为相对于屏幕左边偏移量
- y为相对于屏幕上边偏移量
- chr为显示的字符串
- Char_Size为字体大小,可以选择16
- mode 默认选择1即可
4.读取温湿度
参考前面的博客STM32F103基于I2C协议的AHT20温湿度传感器的数据采集 了解如何获取温湿度的值
AHT20_Read_CTdata(CT_data);; //crc校验后,读取AHT20的温度和湿度数据
c1 = CT_data[0]*1000/1024/1024; //计算得到湿度值c1(放大了10倍)
t1 = CT_data[1]*2000/1024/1024-500;//计算得到温度值t1(放大了10倍)
//转为字符串易于显示
temp[0]=t1/100+'0';
temp[1]=(t1/10)%10+'0';
temp[2]='.';
temp[3]=t1%10+'0';
temp[4]='\0';
hum[0]=c1/100+'0';
hum[1]=(c1/10)%10+'0';
hum[2]='.';
hum[3]=c1%10+'0';
hum[4]=32;
hum[5]='%';
hum[6]='\0';
5.显示温湿度
//显示温度
GUI_ShowCHinese(15,28,16,"温度",1);
GUI_ShowString(47,28,":",16,1);
GUI_ShowString(62,28,temp,16,1);
GUI_ShowCHinese(96,28,16,"℃",1);
//显示湿度
GUI_ShowCHinese(15,48,16,"湿度",1);
GUI_ShowString(47,48,":",16,1);
GUI_ShowString(62,48,hum,16,1);
三、结果
1.开机显示欢迎信息
2.循环读取温湿度以及滚动显示我的id
四、总结
结合oled显示数据,可以使得数据可视化更加方便
五、参考
六、源码
1.github
https://github.com/TangtangSix/Stm32OLED
2.gitee
https://gitee.com/tangtangsix/Stm32OLED
.