一:功能介绍:
1、系统组成:采用stm32f103c8t6核心板+DHT11温湿度+超声波模块+LCD1602显示屏+蜂鸣器+按键
2、通过DHT11传感器采集温湿度,显示到LCD1602上面;
3、通过超声波传感器检测距离,显示到LCD1602上面;
4、通过按键设置温度和距离的阈值,显示到LCD1602上面;
5、当温度大于设置阈值或者检测距离小于阈值,蜂鸣器进行报警提醒;
二:实物演示视频
249-基于stm32单片机超声波测距温湿度检测LCD1602显示
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)
void anjiansaomiao(void)
{
static u8_t k1,k2,k3,k4;
static u8_t K1Flag=0,K2Flag=0,K3Flag=0,K4Flag=0;
//按键扫描,获取按键状态
k1 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_15);
k2 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_14);
k3 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_13);
k4 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_12);
//小时设定值+
//表明按下
if(k1 == 0)
{
K1Flag = 1;
}
else
{
//释放后进行响应
if(K1Flag )
{
K1Flag = 0;
wendu++;
if(wendu>99) wendu=99;
}
}
//小时设定值-
//表明按下
if(k2 == 0)
{
K2Flag = 1;
}
else
{
//释放后进行响应
if(K2Flag )
{
K2Flag = 0;
wendu--;
if(wendu<0) wendu=0;
}
}
//分钟设定值+
//表明按下
if(k3 == 0)
{
K3Flag = 1;
}
else
{
//释放后进行响应
if(K3Flag )
{
K3Flag = 0;
juli++;
if(juli>99) juli=99;
}
}
//分钟设定值-
//表明按下
if(k4 == 0)
{
K4Flag = 1;
}
else
{
//释放后进行响应
if(K4Flag)
{
K4Flag = 0;
juli--;
if(juli<0) juli=0;
}
}
}
int main()
{
TIMER2_init(999,71);
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
USART1_Init(9600);
LED_Init();
DHT11_Init ();
beep1=1;
Ultrasonic_init();
delay_ms(100);
GPIO_Configuration();
Init1602(); WrByte1602(0,1,'T');
while(1)
{
anjiansaomiao();
DHT11_Read_TempAndHumidity ( & DHT11_Data );
sprintf ( cStr, "CMD_LED_%d_%d_%d_ENDLED_DHT11_%d.%d_%d.%d_ENDDHT11_BUZZER_%d_ENDBUZZER_END",
ucLed1Status, ucLed2Status, ucLed3Status, DHT11_Data .temp_int,
DHT11_Data .temp_deci, DHT11_Data .humi_int, DHT11_Data .humi_deci,
ucBuzzerStatus );
WrByte1602(0,1,'T');
WrByte1602(0,2,'=');
WrByte1602(0,3,AsciiCode[DHT11_Data.temp_int%1000/100]);//温度
WrByte1602(0,4,AsciiCode[DHT11_Data.temp_int%100/10]);
WrByte1602(0,5,AsciiCode[DHT11_Data.temp_int%10]);
WrByte1602(0,7,'H');
WrByte1602(0,8,'=');
WrByte1602(0,9,AsciiCode[DHT11_Data.humi_int%1000/100]);//湿度
WrByte1602(0,10,AsciiCode[DHT11_Data.humi_int%100/10]);
WrByte1602(0,11,AsciiCode[DHT11_Data.humi_int%10]);
WrByte1602(0,14,AsciiCode[wendu%100/10]);
WrByte1602(0,15,AsciiCode[wendu%10]);
WrByte1602(1,14,AsciiCode[juli%100/10]);
WrByte1602(1,15,AsciiCode[juli%10]);
oled_Ultrasonic();
if(DHT11_Data.temp_int>wendu)
{
beep1=0;
}
else beep1=1;
}
}
四:原理图文件展示(采用AD(Altium Designer)打开)
五:实物图展示:
六: 资料清单展示: