標題:
STM32單片機OLED顯示溫度和距離Keil源程序
[打印本頁]
作者:
黑芯
時間:
2022-7-13 20:07
標題:
STM32單片機OLED顯示溫度和距離Keil源程序
最開始學習32的時候是用的自身的OLED模塊,后面發(fā)現更多的時候用的都是iic的OLED模塊,因此去做了一個OLED顯示溫度和超聲波測距的實驗
單片機源程序如下:
/*
STM32F103C8T6
iic通信0.96寸OLED顯示屏;顯示中英文、數字、圖片
18B20溫度傳感器
HC-SR04超聲波傳感器
OLED接線定義:
VCC--3.3V/5V
GND--GND
SCL--PB8
SDA--PB9
18B20接線定義:
DQ--PA5
HC-SR04超聲波接線定義:
Trig--PB7
Echo--PB6
*/
#include "sys.h"
#include "delay.h"
#include "oled_iic.h"
#include "stdio.h"
#include "wave.h"
#include "timer.h"
#include "usart.h"
#include "ds18b20.h"
int main(void)
{
u8 a=0;
u8 t=20;//trig引腳高電平持續(xù)時間
short temperature;
u8 Distance;
uart_init(115200);//串口初始化
Wave_SRD_Init();//初始化超聲波
Timer_SRD_Init(9998,7199);//定時器初始化
extern const u8 BMP1[];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
delay_init();
OLED_Init(); //OLED屏幕初始化
DS18B20_Init(); //DS18B20初始化
while(Wave_SRD_Strat(t))
{
}
OLED_Clear();
while(1)
{
//18B20讀取溫度
if(a%10==0) //每100ms讀取一次
{
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
OLED_ShowCH(50,6,"-"); //顯示負號
temperature=-temperature; //轉為正數
}else{
OLED_ShowCH(50,6," "); //去掉負號
}
OLED_ShowNum(60,6,temperature/10,2,16); //顯示整數部分
OLED_ShowNum(60+28,6,temperature%10,1,16); //顯示小數部分
}
delay_ms(10);
a++;
if(a==20)
{
a=0;
}
OLED_ShowCH(15,0,"屏幕顯示測試"); //測試顯示中文
OLED_ShowCH(0,3,"距離:"); //顯示中文:距離
// OLED_ShowCH(0,3,"Distance: "); //顯示英文
OLED_ShowCH(100,3,"cm"); //測試顯示中文
OLED_ShowCH(0,6,"溫度:"); //顯示中文:溫度
// OLED_ShowCH(0,6,"Temp: "); //顯示英文
OLED_ShowCH(78,6,"."); //顯示.
OLED_ShowCH(101,6,"℃"); //顯示:℃
//產生高于10Us的高電平與OLED上顯示超聲波所測距離
Wave_SRD_Strat(t);
Distance = TIM_GetCounter(TIM3)*340/200.0;
if(Distance>0)
{
OLED_ShowNum(50,3,Distance,6,16); //顯示超聲波測量距離
delay_ms(10);
}
/*
OLED_ShowCH(20,1,"屏幕顯示測試"); //測試顯示中文
OLED_ShowNum(20,3,314159265,9,0); //測試顯示數字
OLED_DrawBMP(0,0,128,8,(u8 *)BMP1); //測試顯示圖片
*/
}
}
復制代碼
Keil代碼下載:
Keil代碼.7z
(198.86 KB, 下載次數: 50)
2022-7-17 15:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1