提供对应的Proteus仿真电路图,Keil程序源码(C语言)等电子资料参考学习,文末附全部资料的下载链接。
01设计要求
设计一个基于STM32控制的温度报警器:
功能1:DS18B20采集环境温度;
功能2:使用OLED屏实时显示温度;
功能3:设计按键单元,可调节温度上下限阈值;
功能4:设计报警单元,实现对超限温度监控报警。
02系统概述
系统搭载 OLED 显示屏实时显示实时温度、温度上下限阈值,配备三色 LED 指示灯与蜂鸣器实现温度状态声光提示(温度正常亮绿灯且蜂鸣器关闭、低于下限亮黄灯、高于上限亮红灯,异常时蜂鸣器报警),并通过独立按键完成温度上下限阈值的实时调节。
03Proteus仿真

04示例代码
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "oled.h"
#include "beep.h"
#include "rtc.h"
#include "ds18b20.h"
int main(void)
{
u16 adc_Value_16_Pin_11 = 0;
short adc_Value_Pin_11 = 0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Gpio_IIC_Init();
beep_Init();
KeyInit();
OLED_Init();
OLED_CLS();
delay_ms(200);
OLED_Refresh();
LED_Init() ;
while(1)
{
adc_Value_Pin_11 = DS18B20_Get_Temp_Pin_11();
adc_Value_16_Pin_11 = (u16)adc_Value_Pin_11;
sprintf((char *)war,"Tem:%d%d.%dC",adc_Value_16_Pin_11/100,adc_Value_16_Pin_11%100/10,adc_Value_16_Pin_11%10);
OLED_P8x16Str(0,0,war);
sprintf((char *)war1,"hig:%d%d.%dC",HIGH/100%10,HIGH/10%10,HIGH%10);
OLED_P8x16Str(0,4,war1);
sprintf((char *)war2,"low:%d%d.%dC",LOW/100%10,LOW/10%10,LOW%10);
OLED_P8x16Str(0,6,war2);
KeyFunc();
if (adc_Value_16_Pin_11 < LOW)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
delay_us(600) ;
GPIO_SetBits(GPIOA,GPIO_Pin_7);
delay_us(600) ;
GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
else if ((adc_Value_16_Pin_11 > HIGH)&&(adc_Value_16_Pin_11 < 1000))
{
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(600) ;
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_us(600) ;
GPIO_SetBits(GPIOA,GPIO_Pin_9);
}
}
}
注:
源码使用Keil4或Keil5打开
仿真使用的是Proteus8.13版本,建议使用与博主相同或高于博主的版本,版本过低可能会打不开。
05资料获取
1)项目完整资料获取链接:下载链接
2)Keil、Proteus各个版本安装包: 下载链接
1万+

被折叠的 条评论
为什么被折叠?



