基於SPI的0.96OLED資料顯示溫溼度
關於SPI
SPI 介面是 Motorola 首先提出的全雙工三線同步序列外圍介面,採用主從模式(Master Slave)架構;支援多 slave 模式應用,一 般僅支援單 Master。 時鐘由 Master 控制,在時鐘移位脈衝下,資料按位傳輸,高位在前,低位在後(MSB first);SPI 介面有 2 根單向資料線,為全雙工通訊,目前應用中的資料速率可達幾 Mbps 的水平。
提示:以下是本篇文章正文內容,下面案例可供參考
0.96OLED螢幕
相關資料:0.96inch SPI OLED Module(下載原始程式碼)
螢幕滾動和讀取顯示AHT20溫溼度感測器
1.前期準備
開啟原始碼和接線
微控制器實驗的第一步當然是接線了
這裡我們開啟上面連結資料裡面下載好的原始碼
Demo資料夾裡面找到Stm32相關部分
這裡我選擇的是與我板子對應的F103RCT6的4線制SPI模式
開啟後可以看到程式碼裡面很清楚的給出了接線怎麼接
用母對母杜邦線接好
2.螢幕滾動
SSD1306(OLED驅動晶片)指令詳解
通過查閱資料和其他部落格,發現滾動的程式碼如下
void roll_v(void)
{
OLED_WR_Byte(0x2e,OLED_CMD);
OLED_WR_Byte(0x29,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x07,OLED_CMD);
OLED_WR_Byte(0x07,OLED_CMD);
OLED_WR_Byte(0x01,OLED_CMD);
OLED_WR_Byte(0x2F,OLED_CMD);
}
void roll_h(void)
{
OLED_WR_Byte(0x2E,OLED_CMD); //關閉滾動
OLED_WR_Byte(0x26,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(0x07,OLED_CMD); //終止頁 7
OLED_WR_Byte(0x00,OLED_CMD); //虛擬位元組
OLED_WR_Byte(0xFF,OLED_CMD); //虛擬位元組
OLED_WR_Byte(0x2F,OLED_CMD); //開啟滾動
}
寫一個測試函式在main裡面迴圈
void TEST_Menu(void)
{
GUI_ShowString(0,0,"631707060324",16,1);
GUI_ShowCHinese(0,20,16,"肖思睿",1);
roll_h();
}
結果如下
讀取並顯示溫溼度
1.字模的提取
上面螢幕滾動的視訊裡面可以看到我顯示了自己的名字和學號
但是如果你試過就會發現
在資料裡面下載下來的程式碼改動後不能直接顯示中文
這是因為程式碼裡面沒有相關的字模
在嵌入式裝置 LCD 上顯示的漢字大多數都屬於點陣漢字。常用的點陣字型檔來自 UCDOS。
我們可以在程式裡面新增對應的字模實現顯示
比如這是我新增的
"肖",0x01,0x00,0x21,0x08,0x11,0x10,0x09,0x20,0x01,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,
0x3F,0xF8,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x28,0x20,0x20,
"思",0x00,0x00,0x3F,0xF8,0x21,0x10,0x21,0x10,0x3F,0xF8,0x21,0x10,0x21,0x10,0x3F,0xF8,
0x20,0x08,0x01,0x00,0x08,0x88,0x48,0x84,0x48,0x12,0x48,0x12,0x87,0xF0,0x00,0x00,
"睿",0x01,0x00,0x01,0xF8,0x01,0x00,0x7F,0xFE,0x40,0x02,0x9F,0xF4,0x09,0x20,0x32,0x90,
0x0C,0x60,0x3F,0xF8,0xD0,0x16,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x00,0x1F,0xF0,
程式碼的提取可以通過字模提取軟體提取
也可以通過計算手動新增(不推薦,雖然我沒找到軟體就是手動新增的)
比如肖字
第一行就是:0x01,0x00,即:0000 0001 0000 0000
依次類推,就可以得到相關程式碼
新增到oledfont.h檔案裡面就可以直接呼叫了
2.程式碼實現部分
1.GPIO
要同時實現OLED和AHT20的工作,我們第一個要修改的是GPIO_Init
因為他們所接的引腳不同
OLED.c檔案裡面的初始化函式
新增AHT20連線的PB6和PB7
void OLED_Init_GPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能B埠時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_6|GPIO_Pin_7; //GPIOB10,11,12,6,7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB10、11、12,6,7
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_6|GPIO_Pin_7);
}
2.顯示部分
GUI_DrawLine(WIDTH/2-1,10+(HEIGHT-10)/2-1,WIDTH/2-1,HEIGHT-1,1);
GUI_DrawLine(0,10+(HEIGHT-10)/2-1,WIDTH-1,10+(HEIGHT-10)/2-1,1);
GUI_ShowString(0,1,"631707060324",16,1);
GUI_ShowCHinese(0,20,16,"肖思睿",1);
GUI_ShowString(0,39,"TEMP",8,1);
GUI_DrawCircle(WIDTH/2-1-19, 51, 1,2);
GUI_ShowString(WIDTH/2-1-14,46,"C",16,1);
GUI_ShowString(WIDTH/2-1+2,39,"hum",8,1);
GUI_ShowString(WIDTH/2-1+40,46,"%",16,1);
GUI_ShowNum(WIDTH/2-1-50,46,(tem/10),3,16,1);
GUI_ShowNum(WIDTH/2-1+5,46,(hum/10),3,16,1);
3.實現效果
可以看到,由於手給溫溼度測量帶來的變化清晰的顯示在了螢幕上
相關文章
- 基於SPI/IIC介面的OLED資料顯示
- 基於STM32的OLED的SPI介面資料顯示
- 基於arduino uno的DHT11溫溼度感測器的使用UI
- 基於IIC介面的OLED資料顯示
- 溫習 SPI 機制 (Java SPI 、Spring SPI、Dubbo SPI)JavaSpring
- STM32基於I2C協議的AHT20溫溼度測量協議
- 溫溼度計算露點函式函式
- Micropython TPYBoard v102 溫溼度簡訊通知器(基於SIM900A模組)Python
- 關於逐步顯示資料如何實現
- element table不顯示任何資料,無資料倒是顯示出無資料的了
- 基於 JSONModel 資料模型的列表控制元件顯示資料的深入討論試讀版JSON模型控制元件
- Linux基礎命令---mysqlshow顯示資料庫LinuxMySql資料庫
- DHT11溫溼度感測器原理剖析
- Air780E篇:採集溫溼度感測器資料,併網頁檢視AI網頁
- POJ 3299-Humidex-溼度溫度露點IDE
- QChartView顯示實時更新的溫度曲線圖(二)View
- win10怎麼開啟cpu溫度顯示 win10系統顯示cpu溫度如何設定Win10
- 關於UIImageView的顯示問題——居中顯示或者UIView
- win10狀態列怎麼新增cpu溫度顯示_win10工作列新增cpu溫度顯示的步驟Win10
- Redis 基礎資料型別重溫Redis資料型別
- perf 的資料用火焰圖顯示
- ASPxGridView的資料繫結顯示View
- 修改資料庫的日期顯示格式資料庫
- 顯示資料庫中表的主鍵資料庫
- W5500上傳溫溼度到oneNET平臺
- 零程式碼搭建一個溫度感測器資料採集與顯示軟體
- 資料顯示設定攻略
- 基於手淘 flexible 的 Vue 元件:Toast -- 顯示框FlexVue元件AST
- 基於Linux核心的漢字顯示的嘗試(轉)Linux
- 〈%# 〉與〈%= 〉的區別,顯示資料與繫結資料
- Django不顯示CSS的效果(基於Django模板的靜態資源配置問題)DjangoCSS
- easyui datetimebox 如何只顯示 月份,不顯示具體的資料UI
- 金融時報:調查資料顯示Louis Vuitton 在中國高階人群中降溫UI
- 小米溫溼度感測器釋出:自動開空調
- 基於SPI的增強式外掛框架設計框架
- 顯示來自多個表的資料——JOIN
- MySQL顯示連線的資料庫名MySql資料庫
- 資料庫顯示圖片的問題資料庫