STM32设计实现智能温度计(OLED屏幕的使用,多级屏幕转换,扫描键盘法的搭建、DS180B20温度传感器的使用、实现上位机的可视化)

智能温度计的设计

设计内容

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

注意代码部分引入了很多头文件是和各个模块有关系的如果读者不需要自主删除就好。

duoji.c

#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  
  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

songyhshuai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值