基於STM32的OLED的SPI介面資料顯示

PDT.發表於2020-12-30

使用OLED顯示資料

  • 接線說明
    在這裡插入圖片描述
    此時的OLED的CS介面不用連線,只需要六根線進行STM32與OLED的連線。
  • 從網站下載所需資料
    下載地址
    在這裡插入圖片描述
  • 實驗所需工程檔案位置
    在這裡插入圖片描述
  • 開啟工程檔案,編譯無誤
    在這裡插入圖片描述
  • 連線開發板,燒錄
    在這裡插入圖片描述
  • 顯示如下
    在這裡插入圖片描述

一、顯示學號和姓名

  • 使用字模提取軟體生成漢字的程式碼陣列
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 將生成的程式碼陣列,複製到以下檔案中
    在這裡插入圖片描述
  • 修改test.c中void TEST_MainPage(void)
void TEST_MainPage(void)
{	
	
	GUI_ShowString(20,0,"631807030423",8,1);
	GUI_ShowCHinese(16,20,16,"小彭",1);
	delay_ms(1500);			
}

  • 修改main.c
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{	
	delay_init();	    	       //延時函式初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //設定NVIc中斷分組2:2位搶佔優先順序,2位響應優先順序
	
	OLED_Init();			         //初始化OLED
	OLED_Clear(0);             //清屏,全黑
	while(1) 
	{	
		TEST_MainPage();         //主頁面顯示姓名與學號
		OLED_Clear(0); 
		
	}
}


  • 編譯,燒錄,顯示如下

在這裡插入圖片描述

二、顯示溫溼度

  • 將上次溫溼度工程中的myiic.c和temhum.c移入HARDWARE檔案中

在這裡插入圖片描述

  • 修改main.c
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
#include "temhum.h"
#include "myiic.h"
int main(void)
{	u32 CT_data[2]={0};
    volatile float  hum=0,tem=0;     

    temphum_init();    
	delay_init();	    	     
	NVIC_Configuration(); 	 
	OLED_Init();			         
	OLED_Clear(0);            
	while(1) 
	{	
		
		GUI_ShowCHinese(16,36,16,"溼度",1);
		GUI_ShowCHinese(16,54,16,"溫度",1);
		delay_ms(1500);
	  OLED_Clear(0);
		GUI_ShowString(16,18,"631807030612",8,1);
		delay_ms(1500);
	  OLED_Clear(0);
		AHT20_Read_CTdata(CT_data);       //???CRC??,????AHT20???????? 

        hum = CT_data[0]*100*10/1024/1024;  //???????(???10?)
        tem = CT_data[1]*200*10/1024/1024-500;//???????(???10?)
	      GUI_ShowNum(50,36,hum/10,10,8,1);
		  GUI_ShowNum(50,54,tem/10,10,8,1);
     
		delay_ms(3000);
	}

  • 溫度溼度的程式碼陣列同上生成並加入到相同位置
  • 編譯,燒錄,顯示如下

在這裡插入圖片描述

三、上下或左右的滑動顯示長字元

  • 同上在字模提取軟體中生成字元的程式碼陣列,加入指定位置
  • 在HARDWARE檔案oled.c中新增以下函式
void roll(void)
{
        OLED_WR_Byte(0x2e,OLED_CMD); //關滾動      
        OLED_WR_Byte(0x29,OLED_CMD); //29向右     
        OLED_WR_Byte(0x00,OLED_CMD); //A:空位元組
        OLED_WR_Byte(0x00,OLED_CMD); // B:水平起始頁      
        OLED_WR_Byte(0x07,OLED_CMD); //C:水平滾動速度       
        OLED_WR_Byte(0x07,OLED_CMD); //D:水平結束頁       
	      OLED_WR_Byte(0x01,OLED_CMD); //E:每次垂直滾動位移      
        OLED_WR_Byte(0x2F,OLED_CMD); //開滾動
}   

  • 修改main.c
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{	
	delay_init();	    	       //延時函式初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //設定NVIC中斷分組2:2位搶佔優先順序,2位響應優先順序	
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{	
			GUI_ShowCHinese(20,25,16,"資訊科學與工程學院",1);
			delay_ms(50);
		  roll();
	}
}

  • 編譯,燒錄,顯示如下

在這裡插入圖片描述

相關文章