在线营销网站建设网络推广公司怎么接单

当前位置: 首页 > news >正文

在线营销网站建设,网络推广公司怎么接单,用什么软件做网站模板,安阳贴吧目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图
五、程序设计
六、实验效果
七、资料内容 项目分享 一、前言 项目成品图片#xff1a; 哔哩哔哩视频链接#xff1a; STM32智能坐垫|座椅 #xff08;资料分享见文末…目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图  五、程序设计  六、实验效果  七、资料内容 项目分享 一、前言 项目成品图片 哔哩哔哩视频链接 STM32智能坐垫|座椅 资料分享见文末  二、项目简介 1.功能详解 基于STM32的智能坐垫|座椅 功能如下 使用STM32F103C8T6单片机作为主控单元通过DHT11检测温湿度数据当温度不在设定的范围内则控制加热和散热通过按键设置时长、温度上下限值、手动控制加热、散热、模式切换通过HX711检测重量当重量不为0则表明有人坐在坐垫上此时开始计时当计时时间超过设定的最长时间则语音提醒“久坐多时注意起身运动”通过OLED显示测量数据通过蓝牙模块可将坐下时长、温湿度发送到手机端手机端也可控制加热、散热、模式切换 2.主要器件 STM32F103C8T6单片机OLED 屏幕DHT11温湿度传感器HX711称重传感器JR6001语音模块BT04A蓝牙模块继电器风扇模块PTC加热片 三、原理图设计 ​ 四、PCB硬件设计 PCB图  ​​ 五、程序设计  #include sys.h #include stdio.h #include string.h #include stdlib.h #include math.h #include delay.h #include gpio.h #include key.h #include oled.h #include usart.h #include dht11.h #include timer.h #include hx711.h/********************************** 变量定义 *******************************/ uint8_t key_num 0; //按键扫描标志位 uint8_t flag_display 0; //显示界面标志位 uint32_t time_num 0; //10ms计时 uint8_t temp_value 0; //温度值 uint8_t humi_value 0; //湿度值 uint32_t temp_max 35; //温度最大值 uint32_t temp_min 15; //温度最小值 char display_buf[16]; //显示数组_Bool flag_mode 0; //模式标志位 _Bool flag_JR 0; //加热标志位 _Bool flag_SR 0; //散热标志位uint8_t count_hour_old 1; //计时存储时 int count_minute_old 0; //计时存储分 int count_second_old 0; //计时存储秒 uint8_t count_hour 0; //计时时 int count_minute 0; //计时分 int count_second 0; //计时秒_Bool flag_count_end 0; //计时结束标志位 extern uint8_t usart1_buf[256]; //串口1接收数组extern uint8_t flag_timer_begin_1s; //定时器开始标志位 extern uint8_t flag_1s; //一秒钟到达标志位_Bool flag_weight 0; //重量标志位 uint32_t weight_maopi 0; //毛皮重量 uint32_t weight_value 0; //总重量/******************************* 函数声明 *******************************/ void Key_function(void); //按键函数 void Monitor_function(void); //监测函数 void Display_function(void); //显示函数 void Manage_function(void); //处理函数/* ******* 主函数 **/ int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置中断优先分组Delay_Init(); //延时初始化 Gpio_Init(); //IO初始化Key_Init(); //按键初始化Oled_Init(); //OLED初始化DHT11_Init(); //DHT11初始化TIM2_Init(999,7199); //定时器初始化Hx711_Init(); //HX711初始化Oled_Clear_All(); //清屏Usart1_Init(9600); //串口1初始化Usart2_Init(9600); //串口2初始化UsartPrintf(USART2,AF:30);Delay_ms(1000);UsartPrintf(USART2,A7:00001);Delay_ms(1000);while(1){Key_function(); //按键函数Monitor_function(); //监测函数Display_function(); //显示函数Manage_function(); //处理函数time_num; //计时变量1Delay_ms(10);if(time_num %10 0)LED_SYS ~LED_SYS;if(time_num 5000){time_num 0;}} }/* ******按键函数 ****/ void Key_function(void) {key_num Chiclet_Keyboard_Scan(0); //按键扫描if(key_num ! 0) //有按键按下{switch(key_num){case 1: //按键1切换设置界面flag_display;if(flag_display 6)flag_display 0;Oled_Clear_All(); //清屏break;case 2: //按键2设定值加switch(flag_display){case 0: //界面0手动控制加热flag_mode 1; JR !JR;SR 0;break;case 1: //界面1温度最大值加if(temp_max 99)temp_max;break;case 2: //界面2温度最小值加if(temp_min temp_max-1)temp_min;break;case 3: //界面3设定时间“时”加if(count_hour_old 100)count_hour_old;break;case 4: //界面4设定时间“分”加count_minute_old;if(count_minute_old 60)count_minute_old 0;break;case 5: //界面5设定时间“秒”加count_second_old;if(count_second_old 60)count_second_old 0;break;default:break;}break;case 3: //按键3设定值减switch(flag_display){case 0: //界面0手动控制散热flag_mode 1; JR 0;SR !SR;break;case 1: //界面1温度最大值减if(temp_max temp_min1)temp_max–;break;case 2: //界面2温度最小值减temp_min–;break;case 3: //界面3设定时间“时”减if(count_hour_old 0)count_hour_old–;break;case 4: //界面4设定时间“分”减count_minute_old–;if(count_minute_old 0)count_minute_old 59;break;case 5: //界面5设定时间“秒”减count_second_old–;if(count_second_old 0)count_second_old 59;break;default:break;}break; case 4: //按键4手动自动模式切换if(flag_display 0)flag_mode 0; break;default:break;}} }/**** ******监测函数 ****/ void Monitor_function(void) {u32 weight_test 0;if(flag_display 0) //测量界面{if(time_num % 3 0) //获取数据{DHT11_Read_Data(temp_value,humi_value);if(flag_weight 0){weight_maopi Hx711_Get_Maopi(); //获取毛皮重量flag_weight 1;}elseweight_test Hx711_Get_Weight(weight_maopi); //获取总重量if(weight_test 5000)weight_value weight_test;}if(time_num % 50 0) //发送数据{UsartPrintf(USART1,温度%dC\r\n,temp_value);UsartPrintf(USART1,湿度%d%%\r\n,humi_value);UsartPrintf(USART1,时间%d%d:%d%d:%d%d\r\n,count_hour/10,count_hour%10,count_minute/10,count_minute%10,count_second/10,count_second%10);}if(USART1_WaitRecive() 0) //如果接收到蓝牙数据{switch(usart1_buf[0]){case(A): //A切换自动模式if(flag_display 0)flag_mode 0; break;case(B): //B加热 flag_mode 1; JR !JR;SR 0;break;case©: //C散热flag_mode 1; JR 0;SR !SR;break;default:break;} USART1_Clear();}} }/**** ******显示函数 ****/ void Display_function(void) {switch(flag_display) //根据不同的显示模式标志位显示不同的界面{case 0: //界面0显示模式温度湿度时间Oled_ShowCHinese(1,0,模式);Oled_ShowCHinese(2,0,温度);sprintf(display_buf,%dC,temp_value);Oled_ShowString(2,6,display_buf);Oled_ShowCHinese(3,0,湿度); sprintf(display_buf,%d%%,humi_value);Oled_ShowString(3,6,display_buf); Oled_ShowCHinese(4,0,时间);sprintf(display_buf,%d%d:%d%d:%d%d,count_hour/10,count_hour%10,count_minute/10,count_minute%10,count_second/10,count_second%10);Oled_ShowString(4,6,display_buf);if(flag_mode 0)Oled_ShowCHinese(1,3,自动);elseOled_ShowCHinese(1,3,手动);break;case 1: //界面1显示设置温度最大值Oled_ShowCHinese(1,1,设置温度最大值);if(time_num % 10 0){sprintf(display_buf,%d%d,temp_max/10,temp_max%10);Oled_ShowString(2,7,display_buf);}if(time_num % 20 0){Oled_ShowString(2,7, );} break;case 2: //界面2显示设置温度最小值Oled_ShowCHinese(1,1,设置温度最小值);if(time_num % 10 0){sprintf(display_buf,%d%d,temp_min/10,temp_min%10);Oled_ShowString(2,7,display_buf);}if(time_num % 20 0){Oled_ShowString(2,7, );} break;case 3: //界面3显示设置时间时Oled_ShowCHinese(1,1,设置时间时);if(time_num % 10 0){sprintf(display_buf,%d%d:%d%d:%d%d,count_hour_old/10,count_hour_old%10,count_minute_old/10,count_minute_old%10,count_second_old/10,count_second_old%10);Oled_ShowString(2,4,display_buf);}if(time_num % 20 0){Oled_ShowString(2,4, );} break;case 4: //界面4显示设置时间分Oled_ShowCHinese(1,1,设置时间分);if(time_num % 10 0){sprintf(display_buf,%d%d:%d%d:%d%d,count_hour_old/10,count_hour_old%10,count_minute_old/10,count_minute_old%10,count_second_old/10,count_second_old%10);Oled_ShowString(2,4,display_buf);}if(time_num % 20 0){Oled_ShowString(2,7, );} break;case 5: //界面5显示设置时间秒Oled_ShowCHinese(1,1,设置时间秒);if(time_num % 10 0){sprintf(display_buf,%d%d:%d%d:%d%d,count_hour_old/10,count_hour_old%10,count_minute_old/10,count_minute_old%10,count_second_old/10,count_second_old%10);Oled_ShowString(2,4,display_buf);}if(time_num % 20 0){Oled_ShowString(2,10, );} break; default:break;} }/**** ******处理函数 ****/ void Manage_function(void) {if(flag_display 0) //测量界面{if(flag_mode 0){if(temp_value temp_max) //温度高于最大值开启散热{SR 1; JR 0;}else if(temp_value temp_min) //温度小于最小值加热{SR 0; JR 1;}else //温度低于最大值且温度大于最小值关闭散热和加热{SR 0; JR 0;}}if(weight_value 5 ) //人坐上坐垫开始计时{flag_timer_begin_1s 1; if(count_hour_old ! 0 || count_minute_old ! 0 || count_second_old ! 0) //设置时间不为零同时到达设置时间时播报请劳逸结合注意起身运动{if(count_hour count_hour_old count_minute count_minute_old count_second count_second_old){UsartPrintf(USART2,A7:00002);Delay_ms(1500);}} } else //人离开坐垫 {flag_timer_begin_1s 0; count_hour 0; //重新赋值计时时间count_minute 0;count_second 0;}}else //设置界面关闭加热散热定时器{flag_timer_begin_1s 0; SR 0; JR 0; } } 六、实验效果  ​​ 七、资料内容 ​ 项目分享