版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
参考文献[1]
胡振山,江振青,吕海燕.
基于GSM的垃圾桶溢出报警系统设计.
物联网技术.2022.[2]
于雯,王艳,张佳佳,陈思思.
多功能智能垃圾桶结构设计和功能实现[C],
工业仪表与自动化装置.2022.[3]
张河,
张桂梅,
段磊鹏,
王婷婷.
基于51单片机的智能垃圾桶系统开发[C],
科技创新与应用.2021.[4]
王睿铮,赵意如,石义
.
基于
STM89C51
的防雨鱼塘浮标自动监测系统设计
[J].
电子制作,2020.[5]
黄国维.
基于深度学习的城市垃圾桶智能分类研究[J].
安徽理工大学,2019.[6]
朱莹.
智能垃圾桶的设计与研究[M].
中国矿业大学,2019.[7]
肖茜月,李代伟,刘田俊睿
.
基于
GSM
模块的家庭智能报警系统设计与研究
[J].
电脑知识与技术,2021.[8]
刘炳海
.
从零开始学电子电路设计
[M].化学工业出版社,2019[9]
陈铎,卢元烁,张幽彤.
语音控制智能垃圾桶设计[J].
电子技术与软件工程.2022[10]
杨帆,
秦智鹏.
基于STM32的语音分类垃圾桶设计[M].
武汉工程大学学报.2020[11]
王熹.
基于YOLOv5的垃圾溢出检测研究[D].江汉大学,2022.[12]
胡振山,江振青,吕海燕.
基于GSM的垃圾桶溢出报警系统设计[J].
物联网技术,2022,12(01):4-6.[13]
司徒凌云,王林章,李宣东,刘杨.
基于应用视角的缓冲区溢出检测技术与工具[J].
软件学报,2019,30(06):1721-1741.[14]
张国强,殷博,邱宇,王伟静.
基于概率层次分析的缓冲区溢出检测工具评估[J].
计算机应用与软件,2018,35(07):27-32+103.[15]
李智超.
多层无缝的防破坏防盗防火报警系统的设计[D].东华理工大学,2017.[16]
T.
Vairam;S.
Sarathambekai.
Proficient
smart
trash
can
management
using
internet
of
things
and
SDN
architecture
approach.[M].2022[17]
Jia
Gangyong;Zhu
Yujie;Han
Guangjie;Chan
Sammy;Shu
Lei.
STM:
an
intelligent
trash
can
system
based
on
both
NB-IoT
and
edge
computing
for
smart
cities.2020.[18]
Tremblay,
Ken.
Sprinkler
douses
fire
started
by
ignition
of
oily
rags
in
trash
can.2019[19]
Juan
Guo;Xiaoying
Yu.
The
Design
of
Intelligent
Wastebin
Based
on
AT89S52
[P].
Journal
of
Information
Hiding
and
Privacy
Protection.2021[20]
Design
of
Household
Items
Delivery
Robot.
Design
of
Household
Items
Delivery
Robot
[J].
IOP
Conference
Series:
Earth
and
Environmental
Science
.2019
附录电路图源代码#include"sys.h"#include"delay.h"#include"oled.h"#include"tim.h"#include"port.h"#include"app.h"#include"bsp_gsm_usart.h"#include"bsp_gsm_gprs.h"#include"hcsr04.h"#include"timer.h"#include"HX711.h"intmain(void){ delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 system_Time_Init(9,7199); sys_gpio_init(); key_init(10,500,1100,3000); OLED_Init(); //初始化OLED OLED_Clear();OLED_ShowString(0,0,"nihao",12); hsr04_init();TIM3_PWM_Init();Init_HX711pin(); GSM_USART_Config();//u2 while(gsm_cmd("AT\r","OK",1000)!=GSM_TRUE); while(IsInsertCard()!=GSM_TRUE){ delay_ms(500); } while(1) { app(); } }/*********************************************************************************@fileGPIO/IOToggle/stm32f10x_it.c*@authorMCDApplicationTeam*@versionV3.5.0*@date08-April-2011*@briefMainInterruptServiceRoutines.*Thisfileprovidestemplateforallexceptionshandlerandperipherals*interruptserviceroutine.*******************************************************************************@attention**THEPRESENTFIRMWAREWHICHISFORGUIDANCEONLYAIMSATPROVIDINGCUSTOMERS*WITHCODINGINFORMATIONREGARDINGTHEIRPRODUCTSINORDERFORTHEMTOSAVE*TIME.ASARESULT,STMICROELECTRONICSSHALLNOTBEHELDLIABLEFORANY*DIRECT,INDIRECTORCONSEQUENTIALDAMAGESWITHRESPECTTOANYCLAIMSARISING*FROMTHECONTENTOFSUCHFIRMWAREAND/ORTHEUSEMADEBYCUSTOMERSOFTHE*CODINGINFORMATIONCONTAINEDHEREININCONNECTIONWITHTHEIRPRODUCTS.**<h2><center>©COPYRIGHT2011STMicroelectronics</center></h2>*******************************************************************************//*Includes*/#include"stm32f10x_it.h"voidNMI_Handler(void){}voidHardFault_Handler(void){/*GotoinfiniteloopwhenHardFaultexceptionoccurs*/while(1){}}voidMemManage_Handler(void){/*GotoinfiniteloopwhenMemoryManageexceptionoccurs*/while(1){}}voidBusFault_Handler(void){/*GotoinfiniteloopwhenBusFaultexceptionoccurs*/while(1){}}voidUsageFault_Handler(void){/*GotoinfiniteloopwhenUsageFaultexceptionoccurs*/while(1){}}voidSVC_Handler(void){}voidDebugMon_Handler(void){}voidPendSV_Handler(void){}voidSysTick_Handler(void){}/******************************************************************************//*STM32F10xPeripheralsInterruptHandlers*//*AddheretheInterruptHandlerfortheusedperipheral(s)(PPP),forthe*//*availableperipheralinterrupthandler'snamepleaserefertothestartup*//*file(startup_stm32f10x_xx.s).*//******************************************************************************/#include"delay.h"////////////////////////////////////////////////////////////////////////////////// //如果需要使用OS,则包括下面的头文件即可.#ifSYSTEM_SUPPORT_OS#include"includes.h" //ucos使用 #endifstaticu8fac_us=0; //us延时倍乘数 staticu16fac_ms=0; //ms延时倍乘数,在ucos下,代表每个节拍的ms数 #ifSYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定义了,说明要支持OS了(不限于UCOS).//当delay_us/delay_ms需要支持OS的时候需要三个与OS相关的宏定义和函数来支持//首先是3个宏定义://delay_osrunning:用于表示OS当前是否正在运行,以决定是否可以使用相关函数//delay_ostickspersec:用于表示OS设定的时钟节拍,delay_init将根据这个参数来初始哈systick//delay_osintnesting:用于表示OS中断嵌套级别,因为中断里面不可以调度,delay_ms使用该参数来决定如何运行//然后是3个函数://delay_osschedlock:用于锁定OS任务调度,禁止调度//delay_osschedunlock:用于解锁OS任务调度,重新开启调度//delay_ostimedly:用于OS延时,可以引起任务调度.//本例程仅作UCOSII和UCOSIII的支持,其他OS,请自行参考着移植//支持UCOSII#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定义了,说明要支持UCOSII #definedelay_osrunning OSRunning //OS是否运行标记,0,不运行;1,在运行#definedelay_ostickspersec OS_TICKS_PER_SEC //OS时钟节拍,即每秒调度次数#definedelay_osintnesting OSIntNesting //中断嵌套级别,即中断嵌套次数#endif//支持UCOSIII#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定义了,说明要支持UCOSIII #definedelay_osrunning OSRunning //OS是否运行标记,0,不运行;1,在运行#definedelay_ostickspersec OSCfg_TickRate_Hz //OS时钟节拍,即每秒调度次数#definedelay_osintnesting OSIntNestingCtr //中断嵌套级别,即中断嵌套次数#endif//us级延时时,关闭任务调度(防止打断us级延迟)voiddelay_osschedlock(void){#ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedLock(&err); //UCOSIII的方式,禁止调度,防止打断us延时#else //否则UCOSII OSSchedLock(); //UCOSII的方式,禁止调度,防止打断us延时#endif}//us级延时时,恢复任务调度voiddelay_osschedunlock(void){ #ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedUnlock(&err); //UCOSIII的方式,恢复调度#else //否则UCOSII OSSchedUnlock(); //UCOSII的方式,恢复调度#endif}//调用OS自带的延时函数延时//ticks:延时的节拍数voiddelay_ostimedly(u32ticks){#ifdefCPU_CFG_CRITICAL_METHOD OS_ERRerr; OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII延时采用周期模式#else OSTimeDly(ticks); //UCOSII延时#endif}//systick中断服务函数,使用ucos时用到voidSysTick_Handler(void){ if(delay_osrunning==1) //OS开始跑了,才执行正常的调度处理 { OSIntEnter(); //进入中断 OSTimeTick(); //调用ucos的时钟服务程序 OSIntExit(); //触发任务切换软中断 }}#endif //初始化延迟函数//当使用OS的时候,此函数会初始化OS的时钟节拍//SYSTICK的时钟固定为HCLK时钟的1/8//SYSCLK:系统时钟voiddelay_init(){#ifSYSTEM_SUPPORT_OS //如果需要支持OS. u32reload;#endif SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8#ifSYSTEM_SUPPORT_OS //如果需要支持OS. reload=SystemCoreClock/8000000; //每秒钟的计数次数单位为M reload*=1000000/delay_ostickspersec; //根据delay_ostickspersec设定溢出时间 //reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右 fac_ms=1000/delay_ostickspersec; //代表OS可以延时的最少单位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断 SysTick->LOAD=reload; //每1/delay_ostickspersec秒中断一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK#else fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数#endif} #ifSYSTEM_SUPPORT_OS //如果需要支持OS.//延时nus//nus为要延时的us数. voiddelay_us(u32nus){ u32ticks; u32told,tnow,tcnt=0; u32reload=SysTick->LOAD; //LOAD的值 ticks=nus*fac_us; //需要的节拍数 tcnt=0; delay_osschedlock(); //阻止OS调度,防止打断us延时 told=SysTick->VAL; //刚进入时的计数器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了. elsetcnt+=reload-tnow+told; told=tnow; if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出. } }; delay_osschedunlock(); //恢复OS调度 }//延时nms//nms:要延时的ms数voiddelay_ms(u16nms){ if(delay_osrunning&&delay_osintnesting==0) //如果OS已经在跑了,并且不是在中断里面(中断里面不能任务调度) { if(nms>=fac_ms) //延时的时间大于OS的最少时间周期 { delay_ostimedly(nms/fac_ms); //OS延时 } nms%=fac_ms; //OS已经无法提供这么小的延时了,采用普通方式延时 } delay_us((u32)(nms*1000)); //普通方式延时}#else//不用OS时//延时nus//nus为要延时的us数. voiddelay_us(u32nus){ u32temp; SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL=0X00; //清空计数器 }//延时nms//注意nms的范围//SysTick->LOAD为24位寄存器,所以,最大延时为://nms<=0xffffff*8*1000/SYSCLK//SYSCLK单位为Hz,nms单位为ms//对72M条件下,nms<=1864voiddelay_ms(u16nms){ u32temp; SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit) SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL=0X00; //清空计数器 }#endif#include"port.h"Keykey_in[KEY_NUM];void_key_init(Key*_key_ptr,u32_filter,u32_click_times,u32_clicks_times,u32_long_press_times){ _key_ptr->status=0; _key_ptr->up=1; _key_ptr->down=0; _key_ptr->filter_start_timing=0; _key_ptr->filter_times=_filter; _key_ptr->click_times=_click_times; _key_ptr->clicks_times=_clicks_times; _key_ptr->long_press_times=_long_press_times;}voidkey_init(u32_filter,u32_click_times,u32_clicks_times,u32_long_press_times){ u8i; for(i=0;i<KEY_NUM;i++) { _key_init(&key_in[i],_filter,_click_times,_clicks_times,_long_press_times); kin[i]=0; }}u8key_update(Key*_key_ptr,u16_s)//适用于触发为低电平逻辑{ u8status; if(_s) status=1; else status=0; if(status!=_key_ptr->status) { if(_key_ptr->filter_start_timing==0) { _key_ptr->filter_time=sys_running_timer.ms; _key_ptr->filter_start_timing=1;//开始计时,去抖 } else { if((sys_running_timer.ms-_key_ptr->filter_time)>_key_ptr->filter_times) { _key_ptr->filter_start_timing=0; if(status==KEY_ACTIVE) { _key_ptr->up=0; _key_ptr->down=1; _key_ptr->click_time=sys_running_timer.ms; _key_ptr->long_press_time=sys_running_timer.ms; } else { _key_ptr->long_press=0; _key_ptr->up=1; _key_ptr->down=0; if((sys_running_timer.ms-_key_ptr->click_time)<_key_ptr->click_times) { if(_key_ptr->clicks==0) _key_ptr->clicks++; elseif((sys_running_timer.ms-_key_ptr->clicks_time)<_key_ptr->clicks_times) { _key_ptr->clicks++; } _key_ptr->clicks_time=sys_running_timer.ms; } } _key_ptr->status=status; } } } else { if(status==KEY_ACTIVE&&(sys_running_timer.ms-_key_ptr->long_press_time)>_key_ptr->long_press_times) { _key_ptr->long_press=1; } } if((sys_running_timer.ms-_key_ptr->clicks_time)>=_key_ptr->clicks_times) { _key_ptr->key_clicks=_key_ptr->clicks; _key_ptr->clicks=0; } return_key_ptr->status;}u8key_begin_timing=0;sys_timkey_tim;u8kin[KEY_NUM]={0};voidkey_logic(void){ u8i;for(i=0;i<KEY_NUM;i++){kin[i]=key_update(&key_in[i],*IO.keys[i]);}}/***************************短信功能****************************/uint8_tgsm_sms(char*num,char*smstext);//发送短信(支持中英文,中文为GBK码)char*gsm_waitask(uint8_twaitask_hook(void));//等待有数据应答,返回接收缓冲区地址uint8_t IsReceiveMS (void);uint8_t readmessage (uint8_tmessadd,char*num,char*str);/***************************GPRS功能***************************/uint8_t gsm_gprs_init (void); //GPRS初始化环境uint8_tgsm_gprs_tcp_link (char*localport,char*serverip,char*serverport); //TCP连接uint8_tgsm_gprs_udp_link (char*localport,char*serverip,char*serverport); //UDP连接uint8_tgsm_gprs_send (constchar*str); //发送数据uint8_tgsm_gprs_link_close (void); //IP链接断开uint8_tgsm_gprs_shut_close (void); //关闭场景uint8_t PostGPRS(void);/*调试用串口*/#defineGSM_DEBUG_ON 0#defineGSM_DEBUG_ARRAY_ON0#defineGSM_DEBUG_FUNC_ON 0//Logdefine#defineGSM_INFO(fmt,arg...)printf("<<-GSM-INFO->>"fmt"\n",##arg)#defineGSM_ERROR(fmt,arg...)printf("<<-GSM-ERROR->>"fmt"\n",##arg)#defineGSM_DEBUG(fmt,arg...)do{\if(GSM_DEBUG_ON)\printf("<<-GSM-DEBUG->>[%d]"fmt"\n",__LINE__,##arg);\ }while(0)#defineGSM_DEBUG_ARRAY(array,num)do{\int32_ti;\
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装饰面层材料收口验收方案
- 结构焊接质量控制交底方案
- 监控室值班管理制度
- 访问控制权限管理细则
- 重症监护室接诊流程
- 2026年普通高等学校招生全国统一考试康德调研(五)历史+答案
- 涂装车间人员排班优化管理规定
- 脑卒中患者早期康复护理训练方案
- 小型水库管理中心落实过紧日子全面自查报告
- 洗浴中心考勤机制度
- 2026年北京化学工业集团有限责任公司校园招聘考试参考试题及答案解析
- 2026年复杂网络中的控制系统仿真研究
- 2026广东东莞市自然资源局招聘编外聘用人员15人备考题库参考答案详解
- 工程部工艺奖惩制度
- 凤凰出版传媒集团笔试题
- 2026年水土保持法知识题库及答案
- 2026春新版二年级下册道德与法治全册教案教学设计(表格式)
- 苏教版高中化学选择性必修3 有机化学基础 第二章测评 【原卷+答案】
- 雨课堂学堂在线学堂云《科学研究方法与论文写作(复大)》单元测试考核答案
- 网商贷合同协议模板
- 2026年度安全培训计划及培训记录
评论
0/150
提交评论