智能温度计的设计
设计内容
1)一路温度检测,量程为-40℃~+125℃,误差≤±0.5℃;
2)温度3位数码显示(XX.X℃);
3)开机自检;
4)配简单键盘,如温度上、下限临界报警值设置;
5)配置通信接口,上位机显示温度曲线。
单片机(32、51)、温度传感器()、键盘、LCD、
我们的基本思路是DS180B20温度传感器采集温度信号,经内部ADC转换为数字信号,输出到MCU,通过按键设置温度传感器报警的上下限,并通过USART串口通讯将温度信号传入上位机中,然后温度显示通过0.96寸OLED显示,报警是通过STM32mini自带的LED灯显示报警。
1.OLED显示屏
首先做的是OLED显示屏的显示,具体可以参考基于stm32的OLED温湿度显示_stm32温湿度显示_IT23131的博客-CSDN博客
完成基本的显示之后我采用了多级菜单显示具体效果如下图所示:
多级菜单的实现主要通过构建一个结构体,然后通过按键的触发实现界面的转换,本项目中,使用到了3个按键:下一个(next),确定(enter),退出(back)。所以,接下首先定义一个结构体,结构体中一共有5个变量(3+2),分别为:当前索引序号(current),向下一个(next),确定(enter),退出(back),当前执行函数(void)。
duoji.h
#ifndef __MENU_H
#define __MENU_H
#include "stm32f10x.h"
#define u8 unsigned char
//#define KEY0 HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4) //KEY0
//#define KEY1 HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_3) //
//#define WK_UP HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) //
#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//低电平有效
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//低电平有效
#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//高电平有效
#define KEY0_PRES 1 //KEY0
#define KEY1_PRES 2 //KEY1
#define WKUP_PRES 3 //WK_UP
typedef struct
{
u8 current; //当前状态索引号
u8 next; //向下一个
u8 enter; //确定
u8 back; //退出
void (*current_operation)(void); //当前状态应该执行的操作
} Menu_table;
//界面UI
void home();
void Temperature();
void Maxtem(); //设置最大警告温度值
void Mintem(); //设置最低警告温度值
void KEY_Init(void);//IO???
void Menu_key_set(void);
u8 KEY_Scan(u8 mode);
#endif
注意代码部分引入了很多头文件是和各个模块有关系的如果读者不需要自主删除就好。文章来源:https://www.toymoban.com/news/detail-495086.html
duoji.c文章来源地址https://www.toymoban.com/news/detail-495086.html
#include "duoji.h"
#include "oled.h"
#include "ds18b20.h"
#include "gui.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "ds18b20.h"
#include "Key.h"
#include "led.h"
//UI界面
//主页
/****************************************************/
//UI库
/****************************************************/
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);//???GPIOA15
GPIO_InitStructure.GPIO_Pin
到了这里,关于STM32设计实现智能温度计(OLED屏幕的使用,多级屏幕转换,扫描键盘法的搭建、DS180B20温度传感器的使用、实现上位机的可视化)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!