桌面温湿度监测仪 文章目录目录文章目录前言一、模块二、硬件1.原理图​2.PCB布局3.实物图三、软件1.STM32CubeMX配置2.程序总结前言同事在我们自己建的硬件发烧友群里发了个嘉立创的硬件设计活动这次活动内容是在嘉立创的工作页面进行PCB设计通过筛选后可以得到器件购买券白嫖器件然后自己进行手工焊接和程序烧录。此次是白嫖桌面温湿度监测仪……一、模块1.单片机STM32G030K6T62.温湿度传感器SHT40-AD1B3.LED数码管SP420361N4.电池BH-AA-A5BJ012 1.5V 5号电池*2二、硬件1.原理图2.PCB布局3.实物图PS在电池接引脚处由于LED数码管没有反应测的时候没有测出3V电压所以在电池正极和器件上单独跳了根线出来三、软件1.STM32CubeMX配置首先通过原理图的引脚功能分配进行相关的引脚功能配置这里也涉及到了相关的时钟知识1GPIO的配置2NVIC3Timers4Clock5项目配置2.程序int main(void) { /* USER CODE BEGIN 1 */ float temperature 0; float humidity 0; /* 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 */ HAL_DeInit(); /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC1_Init(); MX_I2C1_Init(); MX_TIM14_Init(); /* USER CODE BEGIN 2 */ HAL_Delay(100); SN74HC595_Send_Data(SN_DIG,0xFF); //关闭数码管显示 SN74HC595_Send_Data(SN_LED1,0x00); SN74HC595_Send_Data(SN_LED2,0x00); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(device_paramter.KeyStatus KEY_SHAKE_STATE) { HAL_Delay(10); if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) GPIO_PIN_RESET) { while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) GPIO_PIN_RESET); SHT40_Read_RHData(temperature,humidity); //读取温湿度 device_paramter.Temp temperature * 10; //放大温湿度 device_paramter.Humi humidity * 10; HAL_TIM_Base_Start_IT(htim14); //开始定时器显示两次数据 device_paramter.sleepStatus 0; //清除休眠标志 device_paramter.KeyStatus KEY_NO_PRESS; //清除按下标志 } } else if(device_paramter.sleepStatus 1) //显示结束进入休眠 { HAL_SuspendTick(); //暂停滴答定时器防止通过滴答定时器中断唤醒 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); /* 执行WFI指令, 进入睡眠模式 */ } }void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim-Instance TIM14) { HAL_TIM_Base_Stop_IT(htim14); updata_flag; if(updata_flag 5000) { ShowNum(1,1,(device_paramter.Temp/100)); ShowNum(1,2,(device_paramter.Temp / 10 % 10)); ShowNum(1,3,device_paramter.Temp%10); } else if(updata_flag 10000) { ShowNum(2,1,(device_paramter.Humi/100)); ShowNum(2,2,(device_paramter.Humi / 10 % 10)); ShowNum(2,3,device_paramter.Humi%10); } else { updata_flag 0; sleep_flag; } __HAL_TIM_SetCounter(htim14,0); if(sleep_flag 2) { sleep_flag 0; device_paramter.sleepStatus 1; SN74HC595_Send_Data(SN_DIG,0xFF); SN74HC595_Send_Data(SN_LED1,0x00); SN74HC595_Send_Data(SN_LED2,0x00); } else{ HAL_TIM_Base_Start_IT(htim14); } } }程序主要涉及到读取温湿度的调用定时器的设置并且调用这里对两个LED数码管数字的显示逻辑进行了配置总结在程序录入调试后需要注意焊接问题还有电池的正负串接在我装入电池后发现数码管无法显示于是用仪器监测从电池正极出来的电压发现Q1防反接保护处并没有对应的电压显示重新焊接发现也是这个问题所以就跳了根线引了电压初步分析是在PCB画板走线的时候此处流通的线宽还是太小过孔也不到位软件代码包链接通过网盘分享的文件程序代码.7z链接: https://pan.baidu.com/s/13vZAPg0aTbPIGLfQjgPu7w?pwdd79a 提取码: d79a