标题:
STM32单片机OLED显示温度和距离Keil源程序
[打印本页]
作者:
黑芯
时间:
2022-7-13 20:07
标题:
STM32单片机OLED显示温度和距离Keil源程序
最开始学习32的时候是用的自身的OLED模块,后面发现更多的时候用的都是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引脚高电平持续时间
short temperature;
u8 Distance;
uart_init(115200);//串口初始化
Wave_SRD_Init();//初始化超声波
Timer_SRD_Init(9998,7199);//定时器初始化
extern const u8 BMP1[];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
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.51hei.com/bbs/)
Powered by Discuz! X3.1