赞
踩
1.采用DS18B20传感器测试温度,LCD显示当前温度;
2.温度精确到小数点显示,温度测量范围-55~125度;
3.当DS18B20传感器测试温度到实际温度上下限时,STM32单片机控制的蜂鸣器报警提示;
4.可以设置温度下限值和温度上限值,设置温度的参数具有掉电保护功能,保存在STM32内部FLASH,上限无需重新设置;
5.第一次按设置键设置温度上限值,第二次按设置温度下限值,再按加减键就可以加减设置的温度报警值。
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "ds18b20.h"
- #include "beep.h"
-
- u8 T_max = 35;
- u16 PWM_Val = 100;//用于PWM调节
-
- void display_Max()//显示上限值
- {
- LCD_ShowNum(30+40+8,170,T_max/10,2,16); //显示正数部分
- LCD_ShowNum(30+40+32,170,T_max%10,1,16); //显示小数部分
-
- }
-
- void keyscan()//按键扫描
- {
- static u8 key_val = 0;
-
- key_val = KEY_Scan(0);//获取按键值
- if(key_val == 2)//加键按下
- {
- if(T_max < 99)//最大只能到99
- {
- T_max++;
- }
- display_Max();//显示
- }
- if(key_val == 3)//减键按下
- {
- if(T_max > 0)//最小到0
- {
- T_max--;
- }
- display_Max();
- }
- }
- int main(void)
- {
- u8 t=0;
- short temperature = 0;
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为 115200
- LED_Init(); //初始化与LED连接的硬件接口
- LCD_Init(); //初始化LCD
- BEEP_Init(); //初始化蜂鸣器端口
- KEY_Init(); //按键初始化
- POINT_COLOR=BRRED; //设置字体为棕红色
- LCD_ShowString(30,50,200,16,16,"LIUTONG");
- LCD_ShowString(30,70,200,16,16,"DS18B20 TEST");
- LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
- LCD_ShowString(30,110,200,16,16,"2023/6/12");
-
- while(DS18B20_Init()) //DS18B20初始化
- {
- LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
- delay_ms(200);
- LCD_Fill(30,130,239,130+16,WHITE);
- delay_ms(200);
- }
- DS18B20_Get_Temp();//温度初始化
- LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(30,150,200,16,16,"Temp: . C");
- POINT_COLOR=BLACK;//设置字体为黑色
- LCD_ShowString(30,170,200,16,16,"T_max: C ");
-
- display_Max();
-
- //读取温度数值
- while(1)
- {
- keyscan();//按键扫描
- if(t%10==0) //每100ms读取一次
- {
- temperature=DS18B20_Get_Temp();
- if(temperature<0)
- {
- LCD_ShowChar(30+40,150,'-',16,0); //显示负号
- temperature=-temperature; //转为正数
- }
- else
- LCD_ShowChar(30+40,150,' ',16,0); //去掉负号
- LCD_ShowNum(30+40+8,150,temperature/10,2,16); //显示正数部分
- LCD_ShowNum(30+40+32,150,temperature%10,1,16); //显示小数部分
- }
-
-
- //蜂鸣器报警范围
- if(T_max<(temperature/10))BEEP=1;
- else BEEP=0;
-
- delay_ms(10);
- t++;
- if(t==20)
- {
- t=0;
- LED0=!LED0;//提示系统运行
- }
-
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。