一、了解SPI(串行外设接口)
- SPI的定义
SPI(Serial Peripheral Interface)就是串行外围设备接口。 SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。 上升沿发送、下降沿接收、高位先发送。 上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。 下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。 - SPI的连接方式
SS( Slave Select):从设备选择信号线,常称为片选信号线。 SCK (Serial Clock):时钟信号线,用于通讯数据同步。 MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。 MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。 - SPI的通讯过程
MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。
二、代码编写
- 显示文字
void TEST_MainPage(void)
{
GUI_ShowCHinese(10,0,16,"重庆交通大学",1);
GUI_ShowString(4,48,"631900000000",16,1);
GUI_ShowCHinese(10,0,16,"欢迎你",1);
delay_ms(1500);
delay_ms(1500);
}
- 设置文字滚动
OLED_WR_Byte(0x2E,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(0x02,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0xFF,OLED_CMD);
连线方式: 烧录代码后,结果展示: 3. 读取温湿度
void getData(){
AHT20_Read_CTdata(CT_data);;
c1 = CT_data[0]*1000/1024/1024;
t1 = CT_data[1]*2000/1024/1024-500;
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';
}
- 显示温湿度
void showData(){
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);
}
烧录代码后,结果展示:
总结
通过本次实验,了解了OLED 屏显和汉字点阵编码原理,并且通过STM32F103 芯片的SPI 接口,实现了OLED 屏显示文字、数据等。
参考
https://blog.csdn.net/weixin_46628481/article/details/121454829 https://blog.csdn.net/qq_43279579/article/details/111414037
|