描述
<div>
<p style="line-height:1.8">注:* 为必填项</p>
<p style="line-height:1.8"><strong><span style="color:#0093e6">请在报名阶段填写 ↓</span></strong></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">* 1、项目功能介绍</h3>
<p style="line-height:1.8">以STM32G0K6T6作为主控芯片,结合数码管显示,数据移位寄存器及温湿度传感器,电池供电,当按下按键时,设备会自动检测当前环境的温度与湿度,并显示到数码管上,显示两次后,进入待机状态。板子上留有烧录口,可以通过烧录器自行烧录写入adc或RTC功能,此处由于某些原因我并未实现adc和rtc功能,有兴趣的朋友可以尝试加入。项目使用STM32cubemx和keil联合协做完成。</p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*2、项目属性</h3>
<p style="line-height:1.8">项目首次公开;项目为复刻第九届立创桌面温湿度检测仪,并未在其他比赛获奖</p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">GPL3.0</span></p>
<h3 style="line-height:1.8">*4、硬件部分</h3>
<hr>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">项目主要是基于stm32g030K6T6作为主控芯片,通过温湿度检测传感器将获取温湿度信息传递到数组中,然后数组数据通过移位寄存器发送显示到数码管,然后进入待机状态时可以通过按键来唤醒,还加入了电池供电功能,可以实现超高便携性。具体见原理图。</span></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/9d361caeab234f14a3cbb9c5c2cabf68.png"></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/c464273a1fb24fa6a503c597bf0d7eee.png"></p>
<p style="line-height:1.8">请注意温湿度传感器的方向,不要插反了</p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/315cc414d3b54e9b98f8d8c082a38efe.png"></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/fed2304659614e41a7f535866afb77be.png"></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/3868914f51a543d2ad6bab439ac7e25b.png"></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/d287d49f552b42c38880799041c7dc68.png"></p>
<h3 style="line-height:1.8">*5、软件部分</h3>
<hr>
<p style="line-height:1.8">主要涉及到对移位寄存器的驱动及数码管的显示,以及主控的待机状态部分的相关代码,具体展示在下方附件中。</p>
<p style="line-height:1.8">/*<br> 函数内容:SN74HC595发送数据函数<br> 函数参数:unsigned char sn_num-哪一个595器件<br> unsigned char sendValue--数据值<br> 返回值: 无<br>*/<br>void SN74HC595_Send_Data(unsigned char sn_num,unsigned int sendValue)<br>{<br> uint8_t i = 0;<br> if(sn_num == SN_LED1) //第一个数码管<br> {<br> for(i = 0;i < 8;i++)<br> {<br> if(((sendValue << i)&0x80)!=0) //如果数据第一位是1<br> {<br> HAL_GPIO_WritePin(LED1_SER_GPIO_Port,LED1_SER_Pin,GPIO_PIN_SET); //高电平<br> }<br> else<br> {<br> HAL_GPIO_WritePin(LED1_SER_GPIO_Port,LED1_SER_Pin,GPIO_PIN_RESET); //低电平<br> }<br> HAL_GPIO_WritePin(LED1_SCLK_GPIO_Port,LED1_SCLK_Pin,GPIO_PIN_RESET); //产生一个SCLK上升沿<br> HAL_GPIO_WritePin(LED1_SCLK_GPIO_Port,LED1_SCLK_Pin,GPIO_PIN_SET);<br> }<br> HAL_GPIO_WritePin(LED1_RCLK_GPIO_Port,LED1_RCLK_Pin,GPIO_PIN_RESET); //产生一个RCLK上升沿<br> HAL_GPIO_WritePin(LED1_RCLK_GPIO_Port,LED1_RCLK_Pin,GPIO_PIN_SET);<br> }<br> else if(sn_num == SN_LED2)<br> {<br> for(i = 0;i < 8;i++)<br> {<br> if(((sendValue << i)&0x80)!=0)<br> {<br> HAL_GPIO_WritePin(LED2_SER_GPIO_Port,LED2_SER_Pin,GPIO_PIN_SET);<br> }<br> else<br> {<br> HAL_GPIO_WritePin(LED2_SER_GPIO_Port,LED2_SER_Pin,GPIO_PIN_RESET);<br> }<br> HAL_GPIO_WritePin(LED2_SCLK_GPIO_Port,LED2_SCLK_Pin,GPIO_PIN_RESET);<br> HAL_GPIO_WritePin(LED2_SCLK_GPIO_Port,LED2_SCLK_Pin,GPIO_PIN_SET);<br> }<br> HAL_GPIO_WritePin(LED2_RCLK_GPIO_Port,LED2_RCLK_Pin,GPIO_PIN_RESET);<br> HAL_GPIO_WritePin(LED2_RCLK_GPIO_Port,LED2_RCLK_Pin,GPIO_PIN_SET); <br> }<br> else if(sn_num == SN_DIG)<br> {<br> for(i = 0;i < 8;i++)<br> {<br> if(((sendValue << i)&0x80)!=0)<br> {<br> HAL_GPIO_WritePin(DIG_SER_GPIO_Port,DIG_SER_Pin,GPIO_PIN_SET);<br> }<br> else<br> {<br> HAL_GPIO_WritePin(DIG_SER_GPIO_Port,DIG_SER_Pin,GPIO_PIN_RESET);<br> }<br> HAL_GPIO_WritePin(DIG_SCLK_GPIO_Port,DIG_SCLK_Pin,GPIO_PIN_RESET);<br> HAL_GPIO_WritePin(DIG_SCLK_GPIO_Port,DIG_SCLK_Pin,GPIO_PIN_SET);<br> }<br> HAL_GPIO_WritePin(DIG_RCLK_GPIO_Port,DIG_RCLK_Pin,GPIO_PIN_RESET);<br> HAL_GPIO_WritePin(DIG_RCLK_GPIO_Port,DIG_RCLK_Pin,GPIO_PIN_SET); <br> }<br>}</p>
<p>/*<br> 函数内容:数码管显示数据函数<br> 函数参数:uint8_t row----行号<br> uint8_t column-列号<br> uint8_t value--显示数据<br> 返回值:无<br>*/<br>void ShowNum(uint8_t row, uint8_t column, uint8_t value)<br>{<br> if(row == 1)<br> {<br> switch(column)<br> {<br> case 1: //如果是第一排第一个<br> SN74HC595_Send_Data(SN_DIG,~0xFE);<br> SN74HC595_Send_Data(SN_LED1,~sgh_value[value]);//显示值对应16进制数<br> break;<br> case 2:<br> SN74HC595_Send_Data(SN_DIG,~0xFD);<br> SN74HC595_Send_Data(SN_LED1,~(sgh_value[value]|0x80));<br> break;<br> case 3:<br> SN74HC595_Send_Data(SN_DIG,~0xFB);<br> SN74HC595_Send_Data(SN_LED1,~sgh_value[value]);<br> break;<br> default:<br> break;<br> }<br> SysCtlDelay(1000); //大致延时50us<br> SN74HC595_Send_Data(SN_LED1,~0x00); //消影,防止错位<br> }<br> else<br> {<br> switch(column)<br> {<br> case 1:<br> SN74HC595_Send_Data(SN_DIG,~0xF7);<br> SN74HC595_Send_Data(SN_LED2,~sgh_value[value]);<br> break;<br> case 2:<br> SN74HC595_Send_Data(SN_DIG,~0xEF);<br> SN74HC595_Send_Data(SN_LED2,~(sgh_value[value]|0x80));<br> break;<br> case 3:<br> SN74HC595_Send_Data(SN_DIG,~0xDF);<br> SN74HC595_Send_Data(SN_LED2,~sgh_value[value]);<br> break;<br> default:<br> break;<br> }<br> SysCtlDelay(1000); //大致延时50us<br> SN74HC595_Send_Data(SN_LED2,~0x00);<br> }<br>}</p>
<p>/*<br> 函数内容:GPIO 下降沿中断服务函数<br> 函数参数:uint16_t GPIO_Pin--哪一个GPIO<br> 返回值: 无<br>*/<br>void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)<br>{<br> if(GPIO_Pin == GPIO_PIN_5)<br> { <br> device_paramter.KeyStatus = KEY_SHAKE_STATE; //设置按键状态为消抖状态<br> HAL_ResumeTick(); //恢复滴答定时器<br> }<br>}</p>
<p> </p>
<p>主循环代码</p>
<p>if(device_paramter.KeyStatus == KEY_SHAKE_STATE)<br> {<br> HAL_Delay(10);<br> if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET)<br> {<br> while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET);<br> <br> SHT40_Read_RHData(&temperature,&humidity); //读取温湿度<br> device_paramter.Temp = temperature * 10; //放大温湿度<br> device_paramter.Humi = humidity * 10;<br> HAL_TIM_Base_Start_IT(&htim14); //开始定时器,显示两次数据 <br> device_paramter.sleepStatus = 0; //清除休眠标志<br> device_paramter.KeyStatus = KEY_NO_PRESS; //清除按下标志<br> }<br> }<br> else if(device_paramter.sleepStatus == 1) //显示结束,进入休眠<br> {<br> HAL_SuspendTick(); //暂停滴答定时器,防止通过滴答定时器中断唤醒<br> HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); /* 执行WFI指令, 进入睡眠模式 */ <br> }</p>
<h3 style="line-height:1.8">*6、BOM清单</h3>
<hr>
<p style="line-height:1.8">见附件,以附件中的清单为依据</p>
<h3 style="line-height:1.8">*7、大赛LOGO验证</h3>
<hr>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px"><img src="//image.lceda.cn/oshwhub/d968c57894cb48a0a2ccb34d8f3de295.png"></span></p>
<h3 style="line-height:1.8">* 8、演示您的项目并录制成视频上传</h3>
<hr>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><span style="color:#95a5a6">立创电赛-桌面温湿度检测仪</span></p>
<p style="line-height:1.8"> </p>
<p style="line-height:1.8"><span style="font-size:14px"><a href="/posts/de460543d4cf4dacb5f0326612455578" target="_blank">前往查看更多详情 ></a></span></p>
<p style="line-height:1.8"> </p>
</div>
评论(0)