stm32实现温湿度传检测界面设计

界面基本流程

  1. 基本板块分布

  1. 功能模块的图标样式筛选

  1. 光标动态功能

基本板块分布

项目要求:显示器要显示实时温度、湿度、温度最高和最低阈值、湿度最高和最低阈值,以及电池电压。

根据要求,设计了五个板块区域显示;其中温度和湿度的最高、最低阈值要求可以通过按键设置调整。

当温度超过温度最高阈值:例如设定的温度最高阈值为30°,当温度传感器超过时,加热开启并对应的led信号灯常量,低于最低温度阈值时,降温设备启动,对应的led灯常亮,湿度超过阈值,同理。

但我考虑到不同设备开启时对应的信号灯亮,关闭时对应的灯灭不够直观的让用户知道风机,制冷和制热等设备的运行状态,我就在屏幕上加入了三个板块对应显示温湿度调节设备的运行状态。

五向按键操作(代码汇总在最下方)

操作五向按键,朝上拨动按键光设置标会移动到最高温度阈值,朝下拨动光标移动到湿度阈值,向右拨动按键阈值+1,朝左拨动按键阈值-1,实现用户可根据实际情况随时设置调整温湿度标准;

各板块介绍

拨动光标到最低温度阈值,再左右拨动按键进行设置调整+或-阈值。

上面三个板块:是温度和湿度调节的运行状态,U:30°:最高温度阈值 L:26°是通过按键调整的最低温度阈值(默认是20°)。温度调节设备是当温度高于30°时,制冷设备开启(此时时关闭);

当温度低于最低阈值20°+5度时,此刻最低阈值26°,当前温度是25.5°远远低于舒适条件,制热设备开启(on)保持温度恒温,并且光标高亮。让用户更直观的看到设备运行状态!

按键代码:

注意事项:按键需要进行防抖设置,我的方案是通过代码实现避免物理按键通电瞬间的抖动,但是在代码的实现过程中,要注意不能在按键中断内写延时来预防物理按键抖动HAL_Delay(150);我想了个办法,通过GPIO.C里写了extern 变量传到 到了main.c里,解决了此文题:下方是重要部分的代码实现;

gpio部分代码(1/2页)

//GPIO.C
/* Includes ------------------------------------------------------------------*/
#include "gpio.h"

/* USER CODE BEGIN 0 */
#include "adc.h"
#include <stdio.h>
uint16_t value[2];
extern uint8_t TMAX;
extern uint8_t TMIN;
extern uint8_t HMAX;
int key_Y;
extern int key_X;
extern int temp;

/* USER CODE END 0 */
//..........
//没有全部截取代码 下方是按键中断的所有代码
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin==GPIO_PIN_8)
    {
        HAL_ADC_Start(&hadc1);
        while(!(ADC1->ISR &1<<2)){};
        value[0]=HAL_ADC_GetValue(&hadc1);
        while(!(ADC1->ISR &1<<3)){};
        value[1]=HAL_ADC_GetValue(&hadc1);
            
            if(value[0]>2300&&value[0]<2400)//上
            {
                key_Y=2;
                temp=key_Y;
            }
            if(value[0]>1150&&value[0]<1300)//下
            {
                key_Y=8;
                temp=key_Y;
            }
            if(value[0]>1900&&value[0]<2100)//左
            {
                key_X=4;
            }                
            if(value[0]>3000&&value[0]<3100)//右
            {
                key_X=6;
            }
            if(value[0]>2700&&value[0]<2800)//中                
            {
                key_Y=5;
                temp=key_Y;
            }

        HAL_ADC_Stop(&hadc1);
    }
}

main.c代码 (2/2页)

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
uint8_t humiH;
uint8_t humiL;
uint8_t tempH;
uint8_t tempL;
uint8_t HMAX=50;
uint8_t TMAX=30;
uint8_t TMIN=20;
uint8_t rev[10];
char re[10];
int key_X=0;
int temp=0;
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
         
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
    delay_init(64);
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  MX_TIM3_Init();
    HAL_TIM_Base_Start_IT(&htim3);
  /* USER CODE BEGIN 2 */
    Lcd_Init();
    FS_DHT11_Init();
  showimage(gImage_wenshidu);//显示背景图
    
    uint8_t windy[32]="off";
  uint8_t cool[32]="off";
    uint8_t hot[32]="off";
    uint8_t buf1[32];
    uint8_t buf2[32];
    uint8_t buf3[32];
    uint8_t buf4[32];
    uint8_t buf5[32];
    uint8_t buf6[32];
    int id=9;
    uint16_t buf;
    uint16_t v;
    uint8_t vcc[32];
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        HAL_Delay(150);
        HAL_ADC_Start(&hadc1);
        while(!(ADC1->ISR&1<<3)){};
        v=HAL_ADC_GetValue(&hadc1);
        HAL_ADC_Stop(&hadc1);
        sprintf((char *)vcc,"%.2fV",(v*(3.3/4095)));
        //HAL_UART_Transmit(&huart1,vcc,strlen((char *)vcc), 100);
    //    HAL_Delay(2000);
        //HAL_ADC_PollForConversion(&hadc1, 100);
        
         DHT11_Read_Data(&humiH,&humiL,&tempH,&tempL);//HMAX=50 TMAX=32 TMIN=25;

            
        if(temp==2)
        {
            Gui_DrawFont_GBK16(88,40, BLACK,GREEN, buf3);
            if(key_X==4)
            {
                Gui_DrawFont_GBK16(88,40, BLACK,GREEN, buf3);
                TMAX--;key_X=0;
            }
            if(key_X==6)
            {    Gui_DrawFont_GBK16(88,40, BLACK,GREEN, buf3);
                TMAX++;key_X=0;
            }
        }else
                Gui_DrawFont_GBK16(88,40, BLACK,WHITE, buf3);
        
        if(temp==5)
        {
            Gui_DrawFont_GBK16(88,54, BLACK,GREEN, buf4);
            if(key_X==4)
            {
              Gui_DrawFont_GBK16(88,54, BLACK,GREEN, buf4);
                TMIN--;key_X=0;
            }
            if(key_X==6)
            {    
                Gui_DrawFont_GBK16(88,54, BLACK,GREEN, buf4);
                TMIN++;key_X=0;
            }
        }else
                Gui_DrawFont_GBK16(88,54, BLACK,WHITE, buf4);
        
        if(temp==8)
        {
            Gui_DrawFont_GBK16(88,98, BLACK,GREEN, buf5);
            if(key_X==4)
            {
                Gui_DrawFont_GBK16(88,98, BLACK,GREEN, buf5);
                HMAX--;key_X=0;
            }
            if(key_X==6)
            {    Gui_DrawFont_GBK16(88,98, BLACK,GREEN, buf5);
                HMAX++;key_X=0;
            }
        }else
                Gui_DrawFont_GBK16(88,98, BLACK,WHITE, buf5);
        
        
        //湿度过高
        if(humiH>=HMAX)
        {
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);
            strcpy((char *)windy,"on ");
                    Gui_DrawFont_GBK16(9,27,  BLUE,YELLOW, windy);//开关状态
        }
        else if(humiH<HMAX)
        {
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_SET);
            strcpy((char *)windy,"off");
            Gui_DrawFont_GBK16(9,27,  BLUE,WHITE, windy);//开关状态
        }
            
        //低温加热
        if(tempH<=TMIN)
        {
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
            strcpy((char *)hot,"on ");
                    Gui_DrawFont_GBK16(89,27, RED,YELLOW, hot);
        }
        else if(tempH>=TMIN+5)
        {
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
            strcpy((char *)hot,"off");
            Gui_DrawFont_GBK16(89,27, RED,WHITE, hot);
        }
                
        
        //高温降温
        if(tempH>TMAX)
        {
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);
            strcpy((char *)cool,"on ");
                    Gui_DrawFont_GBK16(51,27, GREEN,YELLOW, cool);
        }
        else if(tempH<=TMAX-5)
        {
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_SET);
            strcpy((char *)cool,"off");
            Gui_DrawFont_GBK16(51,27, GREEN,WHITE, cool);
        }
                
        
        sprintf((char *)buf1,"%d.%d\n", tempH,tempL);//温度
        sprintf((char *)buf2,"%d.%d\n", humiH,humiL);//湿度

        sprintf((char *)buf3,"U:%d\n",TMAX);//温度上限
        sprintf((char *)buf4,"L:%d\n",TMIN);//温度下限
        sprintf((char *)buf5,"L:%d\n",HMAX);//湿 下限
        sprintf((char *)buf6,"ID:%d\n", id);//ID
        



        
        Gui_DrawFont_GBK16(44,54, BLACK,WHITE, buf1);
        Gui_DrawFont_GBK16(44,98, BLACK,WHITE, buf2);



        Gui_DrawFont_GBK16(42,113, RED,WHITE,buf6);
        Gui_DrawFont_GBK16(86,113, RED,WHITE, vcc);
        HAL_UART_Receive_IT(&huart1,rev,3);
        //HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&buf,1);
  }
    
  /* USER CODE END 3 */
}

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值