专业版
#第九届立创电赛#桌面温湿度检测仪

创建时间:4个月前

169 0

描述

<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>

文档

BOM

暂无

附件

附件名 下载
WeChat_20240724094302.mp4
Project.zip
BOM_Board1_Schematic1_2024-07-24.xlsx

成员

评论(0)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow