智能家居分类垃圾桶软件设计_第1页
智能家居分类垃圾桶软件设计_第2页
智能家居分类垃圾桶软件设计_第3页
智能家居分类垃圾桶软件设计_第4页
智能家居分类垃圾桶软件设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 本次设计基于STM32F103芯片,使用Keil4和ARM仿真器开发一款能自动分类和液晶显示的智能垃圾桶系统。该系统包含一下模块:检测模块、循环扫描模块、OLED显示模块、多路PWM控制输出模块、舵机控制模块。本次设计使用以上模块,实现扫描垃圾颜色功能、OLED提醒功能、控制分流板分类垃圾功能。系统的设计使用到了两个芯片,作为主芯片STM32如果检测到辅芯片C51的信号,就针对该信号进行垃圾分类处理并且在液晶显示相关分类信息。在没有垃圾投递信号情况下,主芯片仅提供实时时钟和温湿度的液晶显示功能。系统的软件设计使用到了程序的循环扫描法,对辅芯片的信号输出端进行不定时的扫描,以达到主芯片在接收垃圾投递信号后能及时作出对OLED液晶和舵机的信号输出处理的功能。在主芯片循环扫描信号输入之余,程序还运用定时输出来控制舵机的精准转动,以确保垃圾分类的准确性。系统运行时响应速度快,能及时反馈给使用者相关信息,方便人们使用。关键词:Keil4、ARM仿真器、系统模块、循环扫描法、定时输出控制、AbstractThisdesignisbasedonSTM32F103chip,usingKeil4andARMemulatortodevelopasmarttrashcansystemthatcanautomaticallyclassifyanddisplayliquidcrystal.Thesystemincludesthefollowingmodules:detectionmodule,cyclicscanningmodule,OLEDdisplaymodule,multi-channelPWMcontroloutputmodule,steeringcontrolmodule.Theabovemodulesareusedinthisdesigntorealizethefunctionofgarbagecolorscanning,OLEDremindingandgarbagesortingonthecontrolsplitter.Inthedesignofthesystem,twochipsareusedasthemainchipSTM32.IfthesignaloftheauxiliarychipC51isdetected,garbageclassificationiscarriedoutforthesignalandrelevantclassificationinformationisdisplayedintheliquidcrystal.Intheabsenceofagarbagedeliverysignal,themainchipprovidesonlyareal-timeclockandLCDdisplayoftemperatureandhumidity.ThesoftwaredesignofthesystemUSESthecyclicscanningmethodoftheprogramtoscanthesignaloutputoftheauxiliarychipatirregularintervals,sothatthemainchipcantimelyprocessthesignaloutputofOLEDliquidcrystalandsteeringgearafterreceivingthegarbagedeliverysignal.Inadditiontothemainchipcyclicscanningsignalinput,theprogramalsoUSEStimingoutputtocontrolthepreciserotationofthesteeringgear,inordertoachievetheaccuracyofgarbageclassification.Whenthesystemisrunning,theresponsespeedisfast,andtherelevantinformationcanbefedbacktotheuserintime,whichisconvenientforpeopletouse.Keywords:Keil4,ARMsimulator,systemmodule,cyclicscanningmethod,timingoutputcontrol,目录前言......................................6第一章 概述...................................7 1.1任务提出...............................71.2智能垃圾桶国内外发展............................71.3系统开发的可行性分析...........................8 1.4本次设计所做的工作..........................8第二章 开发工具介绍..................................10 2.1KeilμVision4.............................10 2.2烧录工具--ARM仿真器..........................10第三章 系统软件总设计................................11 3.1系统运行设计图............................11 3.2系统软件设计.............................12第四章 系统详细设计..................................134.1检测垃圾分类信号模块.............................134.2垃圾分类模块..............................134.3温湿度和实时时钟模块.................................154.4液晶显示模块..................................16第五章 系统实现.................................175.1编码.................................175.2调试.................................235.3测试................................255.4运行.................................26第六章 系统总结...............................27 6.1系统特点...............................27 6.2系统不足及解决措施...........................27 6.3系统展望................................28参考文献...................................29致辞.....................................29附录.....................................30前言 在我国人们的生活水平不断提高的发展前景下,人们使用着各种各样更加智能、便民的产品,其中生活中能使用的如智能机器人、扫地机器人、拍摄无人机等,高端的智能设备如智能手表、智能识别摄像头、平板电脑和手机。智能设备的效率性不仅能是我们生活更加便利,而且可以使我们利用极少的资源去做更多的事。智能设备在设计上,不仅能实现各种功能,而且在人力物力上的节约,使得智能设备的发展不仅仅时人们生活使用的产品上,如街道监控系统,工业智能控制设备,无人驾驶系统,甚至军队使用的各种智能设备。智能设备的普及,使得人们能在各个方向得快速发展。 智能设备的广泛使用使我们生活更加便利,如我们本次设计的只能分类垃圾桶。原本分类垃圾在上个世纪没被人重视,而垃圾的堆积和处理的问题越发突出,以至于人们重视起来。早在两千年前后,日本就推行垃圾分类制度,因为他们国家的处理垃圾能力有限,且垃圾对生态的影响也越来越严重。在日本实行该政策后,他们的年清运量由五千多万吨降到了四千万吨左右,从人均排放量1kg降到了0.9kg。日本政府推广的政策效果显而易见而且得到的发达国家的认可并推广,垃圾分类在以前被忽视的状况中提到了被人们相当重视的程度。在2019年前后,国家住建部联合发改委、生态环境部等九个部门拟定并发布了《关于在全国地级及以上城市全面开展生活垃圾分类工作的通知》,决定从2019年开始在全国地级及以上城市全面普及生活垃圾分类工作。我国是人口大国,相应产生的垃圾量也较其他国家更多,截至2018年底,我国人口数量已经达到13.95亿人,随着民众消费水平的不断增长、生活垃圾的生产量持续走高,根据生态环境部统计,全国每天产生的垃圾超过百万吨。随着城镇化建设进程加快,城市生活垃圾呈现持续增长化、分散化的趋势。相比2018年公布的数据,2019年国家的生态环境部发布的数据显示,逐年垃圾生产量在每年以大概5%到7%的速度增长,全国人们生活垃圾每天生产以超过百万吨。在这严峻的垃圾处理问题上,社会已经开始重视起来,而分类垃圾是其中的重要的一步。智能垃圾桶因为其属于垃圾分类产品的衍生物而被人们开发利用起来。市面上使用的智能垃圾桶发展到现在,已经有了相对完善的功能,如语音提示、红外感应、自动休眠、液晶提示甚至可以做到无接触操作的功能。比较高端一点的智能垃圾桶会有连有通信功能,如RS232通信,TCP通信,能及时收到智能垃圾桶的实时数据,方便工作人员进行清理垃圾。现在市场上的智能垃圾桶品牌主要有:麦桶桶、卡贝、EKO\欧本、网易严选和拓牛,这些公司生产的智能垃圾桶在多个地方投入使用,在垃圾分类问题的处理上取得了较好的成绩。智能垃圾桶产品的投入使用使人们生活变得更加便捷,不用担心被垃圾细菌污染环境甚至交叉感染病毒,也可以在无接触情况下把各个垃圾分好类,智能垃圾桶智慧在人们的不停开发后变得越智能,还有可以语音识别的操作,但因为成本高而被一些公司所淘汰。 智能垃圾桶的主体是一块以智能芯片为主的电路板,其主要是由硬件和软件组成。现在的智能垃圾桶一般可以运行SOC系统,即片上系统,如我们的智能手表、智能手环。但是这些系统的开发在成本上会相对较高。我们毕业设计小组在小调查和自己的观察决定,开发一个成本相对较低,能被大众接受的智能垃圾桶,且具备颜色识别和液晶界面指导人们投递、分类垃圾的功能。第一章 概述1.1 任务提出出于减少人们直接接触垃圾桶,或者能使垃圾桶与人相隔一定距离,开发红外感应功能,我们设计垃圾桶考虑到在人走过来扔垃圾时,由智能垃圾桶红外感应模块发出信号,芯片接收信号,经过计算发出控制垃圾桶盖推杆的信号,打开垃圾桶盖,指导垃圾分类。为强加人们的分类意识,智能垃圾桶增设语音提示功能,指引人们合适的分类把垃圾分到相应的垃圾桶。整个功能在嵌入式系统接收到相应的语音提示信号后,从外部存储模块读取相应地址的存储内容,然后又芯片把读取到的内容发送给扩音器,来提示人们如何分类垃圾,即用芯片驱动外部存储芯片和扩音器模块完成满足用户需求的功能。智能垃圾桶被填满时,会提醒人们放到备用垃圾桶里,让整个产品更加人性化。垃圾桶被填满时,由压力传感器把信号传到芯片,再由芯片触发信号提醒扔垃圾的人完成操作,避免人们在垃圾桶填满时把垃圾随处丢放,污染周围环境。为指引不知道如何分类垃圾的人,开发人机操控界面,让人们知道怎么分类垃圾。该功能由感应手势传感器和显示界面共同完成。在人们扔垃圾时,不知道怎么分类,用手势启动操作屏幕界面,避免了接触,然后根据页面提示一步一步按照提示看到需要投递的垃圾归属的分类,并且打开相应的垃圾桶方便让人们投扔垃圾。1.2 智能垃圾桶国内外发展随着人们生活水平的提高,人们生活产生的生活垃圾也空前的增加。城市垃圾处理是二十世纪九十年代以来众多发达国家重要研究的课题之一,这也大大地推动了绿色产业的发展。对于垃圾处理的问题,大多数发达国家实行垃圾源头的削减战略,实现材料的可循环利用管理。但在处理二手垃圾问题上还是显得吃力,因为人们没有分类垃圾的意识,而先前实行的绿色发展战略也停滞了一段时间。直到后来,绿色产品的衍生物,智能分类垃圾桶投入使用,使材料的回收变得更加容易实现。日本国土面积小,资源相对匮乏,为达到相对平衡的资源再用状况,日本在上个世纪末就推行垃圾分类的政策。在日本推行垃圾分类鼓励政策后,人们纷纷开发使用的、方便人们使用的垃圾桶。限制于当时的技术,分类垃圾桶能实现的功能非常少,而且当时生产的产品很少达到卫生的水平,甚至使其周边产生恶臭等环境问题。再后来的十年,发达国家把垃圾分类的问题提上日程,使得垃圾分类行业的产品的发展得到人们重视。现在的智能分类垃圾桶基本配备了无接触感应器、液晶提示以及语音提示的功能,相对于以前的传统的垃圾桶而言,先进的智能垃圾桶不仅能实实在在的实现其分类的功能,也很好的改善了其周边的环境。智能垃圾桶在发达国家被大力推行,而且也取得了很好的效果。国内的垃圾分类问题在近些年来才得到人们的重视。中国的发展迅速,在人们富裕起来后,生活的周边环境也逐渐被人们重视起来,而垃圾处理问题这其中这一环也同样得到人们的重视。垃圾分类处理的政策首先在大城市实行,同时智能分类垃圾桶出现在人们的生活中。目前国内比较先进的垃圾桶主要分为:按钮电动式、红外传感翻盖式、红外传感侧拉式。对于智能垃圾桶的想象都是基于现实可以实现的基础进行的。在更先进的将来,垃圾桶可能已经被集成在了另一个更高级的智能工具当中,也许是一体全能型的智能管家,也许是其他超出想象的东西。1.3 系统开发的可行性分析在时代快速发展的今天,无论是在荒无人烟的荒野还是繁荣的城市,都产生不少的废料,生活产生的垃圾就是其中一种。垃圾桶也成为生活工作中必不可少的公共卫生设施。在以前还是普通垃圾桶时,设计缺乏人性化,没有从用户应用出发考虑,导致垃圾桶周边一堆垃圾,臭气熏天,使得周围环境严重污染,还可能滋养细菌病毒,而且在回收垃圾时很麻烦。这中污染的环境不仅污染周边居民的生活环境,还可能带来各种公共卫生的问题。因此,在这种环境下开发智能垃圾桶很有必要,而且也是公共卫生行业发展的必要条件之一。智能垃圾桶的存在能缓解很多周边的公共卫生问题,能适当的提升居民周边生活环境,且减少乱扔垃圾带来的问题。而且,不同的垃圾处理情况不同,如餐厨垃圾,能产生回收能源,塑料垃圾能回收再用,废弃的电子垃圾能统一回收以降低环境污染等等问题,所以智能分类垃圾桶开发很有必要。一般的嵌入式系统是由软件和硬件组成,成品是一个能独立运算的器件。嵌入式系统主要以应用为中心,以用户的特定的要求为开发系统未目标,能在用户接上电源就可以使用其功能,不用使用者进行再次开发或根据要求减轻用户开发。嵌入式系统在对应用的功能开发时有很强的针对性和专用性,且要求整个系统在可靠实用的情况下运行。整个系统强调软件硬件的结合,在硬件支持前提下,使整个系统更加实用和增加其可拓展性。在开发软件项目时应着重程序的灵活性、功耗性和可维护性,能在用户不用的需求下,灵活的修改项目中的部分功能逻辑模块。它是在基于芯片编程的基础上,结合芯片所连接的外部硬件电路,实现各种实用、经济、能可持续运行的系统。在可持续、稳定且低成本的系统中,运用在生态环保甚至苛刻的条件下能很好的取代人工,且能从根本上省下人力物力等资源。1.4 本次设计所做的工作本次设计工作是:1、开发系统,使系统实现传感器读取,垃圾颜色分类信号读取,OLED液晶显示的功能。2、使用ARM仿真器监测程序部分变量变化。在调试时,监测变量在C51分类信号输入后,垃圾桶系统是否作出对应的控制输出。监视变量在整个过程中的变化是否符合系统开发的稳定性的特点。3、与负责硬件同学沟通,在结合硬件和外部结构上,对液晶显示程序和舵机分类功能程序进行微调,以符合使用者的使用习惯和在社会生活中实际使用的客观情况。第二章 开发工具介绍2.1 开发工具总介开发过程中使用到的工具有keil4软件、杜邦线、万用表、ARM仿真器和编程的C语言。杜邦线和万用表主要是用在调试软件,如果调试出问题首先使用杜邦线连到STM32芯片端口,在串口输出打印数据观察其是否正确,或者用万用表测量元器件是否工作正常。2.2 主要开发工具介绍2.2.1 KeilμVision4Keil软件原本的软件开发公司是世界领先的MCU软件开发公司,及微控制器软件开发公司,它是由两家私人公司合资运营。改开发软件在八十年代时就能支持几百种的C51芯片的延申芯片,基本上芯片全覆盖,因为当时的主流芯片是8051芯片。Keil软件使用的C51编译器,成为51单片机开发的行业标准。Keil公司在二十一世纪初被ARM公司收购,接着keil公司和ARM公司开发了32位微控制器开发软件,用来开发调试ARM7、ARM9和cortex-M内核的处理器。在软件版本升级Keil3时,可以支持各种嵌入式处理器的开发,其软件内集成了RealViewMDK开发环境,其中还包括了RealView编译器,它可以下载代码、启动代码和烧写flash功能等等强大的功能,该版本的软件已经可以支持ARM7、ARM9和cortex-M3的处理器,即支持本次设计使用到的的STM32F103的内核cortex-M3的开发。Keil4软件版本的出现,很好的优化了keil3的操作界面,以及在该版本开发软件灵活的窗口管理系统能极方便开发人员的使用。它不仅提供多台可监视器,且能支持更多更新的ARM芯片的开发。因此变成我们这次的设计主要使用的软件开发工具,如下图2.1所示。图2.1Keil4软件图标2.2.2 烧录工具--ARM仿真器开发人员在编程后生成HEX文件,一般会使用串口下载到芯片里,且串口仅能支持下载功能,不支持串口调试,监视数据以及调试的功能。所以我们设计需要用到ARM仿真器,实物如图2.2所示。ARM仿真器的强大功能,可以支持软件代替主板上的CPU进行实时仿真,可以模仿CPU的运行,且因为仿真器的极高的速度,能反馈的可视性的运行状态和数据能实时的更新,方便开发人员的监视和后期的维护。 图2.2ARM仿真器2.2.3 C语言C语言诞生于美国的贝尔实验室,由D.M.Ritchie以B语言为基础发展而来,在它的主体设计完成后,Thompson和Ritchie用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSIc”,截至2020年,最新的C语言标准为2017年发布的“C17”。C语言主要特点有:简洁、具有结构化的控制语句、丰富的数据类型、丰富的运算符、可对物理地址进行直接操作,而且它可生成高质量、执行效率高的代码程序。基于这些开发上的优势和特点,这次的设计使用到的编程语言为C语言。C语言的基本变成语句主要有if、elseif、while、for循环和do{}while等语句。而且C语言内部包括了标准的数学函数,如平方根、字符串连接函数等等,它们能直接使用到程序代码里,不需要外加的声明或定义。C语言不仅在语句上设计成方便我们使用,在编译器设计上生成的hex文件也可以非常方便我们移植。其主要的编译器有VisualC++、Clang、GCC、TurboC,编译的效率和程序运行的效率相比其它编程语言编译器要高。第三章 系统软件总设计3.1 系统运行设计图(1)开机后先进行整个系统的初始化。(2)液晶显示温湿度数据,以及实时时钟走时。(3)不停扫描垃圾颜色分类信号的输入,及时作出垃圾分类动作。(4)当进行垃圾分类时,取消温湿度数据显示,保留实时时钟走时。(5)垃圾分类动作完成后,复位分类垃圾操作板,液晶显示重新显示温湿度数据以及实时时钟走时。系统的运行设计图如图3.1所示。图3.1系统的运行设计图3.2 系统软件设计本次设计使用温湿度传感器、OLED显示液晶和舵机这几部分硬件模块。与其它单片机通信上,STM32芯片使用其中几个端口用来接收C51的垃圾分类信号。在接收到从51单片机发送的红、绿、蓝信号后,经过处理产生相应的OLED液晶显示界面的切换。同时控制舵机带动垃圾分类板旋转到对应的角度,使垃圾掉落到其对应的垃圾桶,完成垃圾的分类投递。芯片通过舵机控制的垃圾分类板在动作5秒后,马上恢复到原来位置,防止垃圾未完成分类就直接落入垃圾桶。在分类动作的同时,OLED液晶也会提醒使用者停止再次投递垃圾以及实时时钟走时显示。软件流程图如图3.2所示。图3.2 程序流程图第四章 系统详细设计4.1 检测垃圾分类信号模块检测垃圾分类信号由TCS颜色检测模块发出。该模块使用得数据输出有效位为低电平,因此我们需要在接收信号得主芯片STM32程序中设置低电平为信号有效位。与负责检测垃圾分类信号同学沟通所得,该信号在垃圾还没分类前,即垃圾停留在检测模块时,会在与主芯片通信端口一直产生对应的低电平颜色信号。在利用主芯片接收垃圾分类信号前,需要对检测颜色信号端口进行配置。因为该信号为输入检测信号,而且考虑到C51信号输出端口内置上拉电阻和低电平为有效位,所以在程序中把三个颜色检测端口设置为上拉电阻输入。设置完端口工作模式才可读取端口信号,所以该配置需要在循环扫描检测信号前完成。在读取分类信号时,主芯片需要同时扫描三个信号端,分别为红色、绿色和蓝色。产生相应的低电平颜色信号后,会进入一个五秒的延时,该五秒延时不再检测低电平颜色信号,以及在程序中将提醒人们不要再投递垃圾标志位置一。 分类信号检测流程图如图4.1所示。图4.1 分类信号检测流程图4.2 垃圾分类模块 本次设计使用到的垃圾分类模块由舵机和分类使用的纸板完成。在硬件的设计和外观的设计上,使用了两个分类板,即需要两个舵机去控制其转动。 设计使用到是型号为SG90,最大角度180°的舵机。根据舵机的参考手册可得,每次转动时需要持续接收周期脉冲,而每次的脉冲周期为20ms。垃圾桶分类功能设计为三个不同的掉落方向,需要两个舵机同时带动其相接的分类纸板,转动至固定的角度,达到分类垃圾的功能。 芯片控制垃圾分类模式时使用到TIM3定时器PWM脉宽调制输出。因此在使舵机带动纸板转动前,需要对TIM以及PWM配置。 定时器产生一个20毫秒的脉冲,需要对起溢出值(arr)和分频系数(psc)进行配置。根据公式:(溢出时间/s)Tcount=(arr+1)(psc+1)/TCLK可得,在TCLK为APB1高速时钟72MHz和Tcount为20ms的前提下,只要arr和psc相乘得到固定值即可。芯片控制舵机旋转角度时利用PWM脉宽调制器,需要结合SG90舵机参考资料的提示:0°需要0.5ms脉宽,180°需要2.5ms脉宽。根据资料所得在20ms脉冲周期中,旋转的角度θ与定时器计数次数count的关系:count=arr(θ+45)/1800然后把需要旋转的角度带入公式计算出来的次数赋给TIM3计数值就完成对应脉冲宽度的调节。STM32接收到垃圾分类信号时控制舵机带动纸板进行分类。为舵机为转到相应角度并且固定角度,芯片需要不停的输出脉冲。旋转到估计角度后延迟五秒,使需要分类的垃圾有足够的时间落入分类垃圾桶。垃圾分类模块软件流程图如图4.2所示。图4.2 垃圾分类模块软件流程图 4.3 温湿度和实时时钟模块 本次设计使用到了DHT11温湿度传感器和STM32自带的RTC实时时钟功能。温度湿度显示在启动界面,而RTC实时时钟则在所有界面中都有刷新,为使用者显示当前时间。 温湿度的显示是为了方便人们直接的观察到周边环境的温度和湿度。DHT11通信原理是利用单个IO端口,同时进行收发数据。根据该传感器手册显示,该传感器只要每次读取数据时以DHT11传感器提供的方式复位,然后等待几微妙后拉低的通信数据线,就可以读取其内部寄存器的数据,即检测的温度值。 RTC实时时钟的读取比传感器数据读取稍微简单。RTC实时时钟的读取方法由STM32提供的固件库函数可直接获得。使用固件库提供的方法直接读取返回的数据是从1970年开始的以秒为单位的数字。本次设计使用的实时时钟走时限于液晶大小,只显示时分秒。对应的时(rhour)、分(rmin)、秒(rsec)和读取的秒总数(temp)关系: rhour=temp/3600 rmin=(temp%3600)/60 rsec=(temp%3600)%60 读取温湿度、RTC时钟程序流程图如图4.3所示。图4.3 读取温湿度、RTC时钟程序流程图 4.4 液晶显示模块 设计选用的液晶为使用I2C通信的OLED0561型号液晶。I2C通信方式是以地址确认为前提,主从设备相互发送数据。本次垃圾桶使用硬件中使用到I2C通信的只有此液晶屏,所以选择芯片其中的一组通信端口配置即可。 I2C通信前需要对其GPIO端口进行基本参数配置,端口开启复用功能时钟,端口的工作模式使用开漏输出以增强I2C通信,同时还需要对I2C通信寄存器进行地址位数、通信速度、应答方式、主机地址的配置,完成后使用固件库函数启动I2C端口的通信。 端口设置完成,需要对OLED液晶发送启动数据以驱动液晶屏幕。根据OLED液晶参考资料所得,启动液晶电源需要依次发送0x8d、0x10数据,然后液晶完成底层驱动显示。因为液晶显示驱动需要在液晶显示数据前完成,所以程序中把液晶的通信启动模块、显示启动模块放在了主循环的开头。 芯片在没有检测到垃圾分类信号输入时,通过循环读取DHT11温湿度数据、RTC时钟,及时刷新温湿度和实时时钟显示。 在检测分类垃圾信号输入时,经过芯片STM32处理,显示提醒使用者停止投递垃圾的信息。OLED液晶显示提醒信息的同时,显示RTC实时时钟的走时。与此同时,利用延时函数,延迟五秒钟,使投递的垃圾完成分类后,切换回初始界面,再次读取DHT11温湿度传感器数据和RTC实时时钟,以及刷新数据的显示。 读取的温湿度数据和RTC时钟为十进制数据,在转换为液晶上显示的数据还需要作相应的算法处理。利用取模软件将ASCII码表上的符号按照其顺序,选择纵向取模下高位的方式,对其进行取模,并且保存取模生成的数组数据。最后在发送液晶数据时将需要显示的符号按照其顺序依次发送,就完成在液晶显示的功能。 液晶显示软件流程图如图4.4所示。图4.4 液晶显示软件流程图第五章 系统的实现5.1编码5.1.1建立工程文件在工具栏里选中“project”,然后点击“newuVisionproject”,如图5.1所示,图5.1建立Project例图接着选择工程保存目录。建立并保存工程后,选择处理器类型时,在STMicro系列下选中STM32F103C8芯片,最后点击确认。如图5.2所示。图5.2 选择芯片例图5.1.2程序实现(1)程序代码开头,先定义程序会用到的变量、数组等数据格式。如图5.1所示。图5.1 变量定义图。 其中MUNE为切换液晶显示的菜单值,num、cou、num1为计数值,不过num1的计数值需要十六位的数据才能完成计数,所以该变量为十六位变量。mark为产生颜色分类信号的标志位,b[2]则用来存温湿度传感器返回值。 (2)再启动芯片端口或者芯片的外设功能,需要启动芯片的时钟总线。如图5.2所示。图5.2 RCC系统时钟配置图 对系统时钟配置,需要对其进行外部时钟源选择、根据所需进行分配或倍频,以及对APB1和APB2时钟线进行初始化配置等。 本次设计使用的外部时钟源为8MHz的晶振,对应芯片最高频率72MHz相差九倍,所以我们选择倍频产生时钟源。时钟总线确定下,APB1和APB2高、低速时钟线分别配置为72Mhz和36Mhz。 填入相关系统时钟参数后,再设置FLASH存储器演示始终周期数。该参数的配置在数据手册参考所得,48~72MHz,写入FLASH_Latency_2。 最后使能时钟总线和等待其输出稳定,则完成系统时钟配置。(3)时钟配置完成后,可以对芯片GPIO口和使用的外设进行初始化配置。本次使用到的GPIO端口有PA0、1、2、6、7、15,PB6、7。其中PA0、1、2端口与C51芯片连接,进行采集垃圾投入及分类信号,所以对其设置为上拉电阻输入,检测到低电平为有效信号。如图5.3所示,图5.3 检测信号端口配置PA6、7是芯片利用定时器对舵机进行控制的端口。这两个端口选择为推挽输出模式。因为其通过定时器控制PWM脉宽调制,所以也需要对TIM3定时器转载值、预分配系数和计数方式进行初始化。程序中使用的TIM3装载值为60000,预分配系数为24,计数方式为向上计数。根据固件库提供的枚举数据,如下图5.4所示进行配置。图5.4TIM3参数配置图 PA6、PA7对应的是TIM3输出PWM1和2通道,要达到PWM输出控制,还需要对该通道进行配置。对选择极性,即有效电平设置为高电平,PWM模式选择为计数值CNT小于CCR时有效。根据固件库提供的结构体变量进行如图5.5所示进行配置。图5.5 PWM脉宽调制参数配置(4)看门狗配置。看门狗有独立时钟,由内部低速时钟独立提供,可与其它时钟信号相隔,独自完成计数。其分频系数为64,重装载值为625,得到最后需要每一秒重装一次计数值。根据固件库提供的函数进行如图5.6所示配置。 图5.6 看门狗配置参数 (5)进入主循环while(1)函数。每次循环开头需要使用喂狗函数IWDG_ReloadCounter(),防止芯片重启。 (6)进入主循环,在没有检测信号时,显示周边温湿度以及RTC实时时钟。显示液晶通过I2C进行通信,所以我们使用固件库函数直接发送显示的数据。根据I2C通信规则,我们设计了一个函数方便通信。如图5.7所示。 图5.7 液晶显示函数使用液晶显示函数,显示对应的温湿度、时间中文提示。相应的汉字取模数组在附录仲。如图5.8所示。图5.8 温湿度中文显示根据DHT11温湿度传感器手册,读取数据需要拉低数据脚20ms,再拉高30微妙,就可读取寄存器数据。因为该传感器使用单数据管脚通信,所以需要不停的切换管脚的模式,然后通过芯片读取管脚高低电平完成数据读取。如图5.9所示。 图5.9 温湿度传感器读取程序读取RTC实时时钟时,因为芯片系统提供该功能,我们只需要利用固件库函数RTC_GetCounter()就可以获得1970年到现在的秒数,然后再将其转化为相应的年月日。不过本次设计仅支持显示时分秒,所以在编程时读取到秒数后,按如图5.10所示程序得到其对应的时分秒。图5.10 读取RTC实时时钟程序(7)扫描C51信号输出端电平变化。本次设计使用的通信有效电平为低电平有效,所以在检测到C51输出低电平,舵机发出相应的分类动作。主循环扫描检测信号以及控制舵机程序如图5.11所示。图5.11 循环扫描检测信号以及控制舵机程序图 在读取垃圾分类信号输入后,利用PWM脉宽输出控制转动角度。固件库提供的TIM_SetCompare1()和TIM_SetCompare2()函数,控制TIM3的输出通道PWM值。检测信号后,产生相应的mark标志位,防止再次转动。 标志位在延时5秒后,即垃圾完成分类后,控制舵机复位以及清空对应的标志位mark。程序如图5.12图5.12 控制舵机复位程序5.2调试5.2.1编译下载程序工程文件建立后,按照前文把代码打到C语言源文件里,先进行保存,防止代码丢失。然后在keil4工具栏里找到,点解编译,或者按快捷键F7,然后编译器进行编译,如图5.13所示。编译成功后,编译窗口如图图5.13正常编译窗口图编译窗口最底行显示“0Error”表示编译通过。编译通过后会自动生成了Hex文件,该文件需要使用ARM仿真器下载到芯片flash里。5.2.2软件模拟仿真使用的ARM仿真器支持在线仿真,所以本次仿真直接把程序下载到芯片里,在线仿真和监视各个数据变化,而且keil4也提供相应的仿真监视器,如图5.14和5.15所示。图5.14 软件监视器Watch1窗口图5.15软件监视器Watch2窗口在硬件上的操作都会通过ARM仿真器反馈到电脑keil4软件上的可监视窗口,如图中的“RX_data”数组变量,显示接收的数据。然后在连接TCS颜色通信端口给出3.3V电压,使用杜邦线连接到3.3V电源,相当于给STM32一个模拟的颜色输入信号。然后观察相应的标志位变化,如图5.16所示。 图5.16 监视器数据变化图标志位“INT_MARK”发生了变化,表示颜色检测通信成功。5.3 测试5.3.1测试结果颜色识别完成后,测试基于颜色检测成功的基础上液晶显示和提示是否正确,如图5.17。图5.17 液晶指示图测试液晶显示功能正常,而且外加了RTC实时时钟显示。5.3.2系统测试过程中出现的问题及解决办法在开发液晶驱动代码时,直接液晶输出0x10启动液晶电源,有时会出现屏幕的花白现象。为增强体验,需要在启动电源信号前,发送0xae进行液晶关显示操作。测试过程中,因为增加乐RTC实时时钟,经测试后,程序整体因为RTC的刷新和读取,出现乐跑飞和卡死现象,导致每次主循环喂狗程序语句不能执行而引起芯片重启。为了解决这个问题,需要把芯片刷新和RTC时钟的频率降低,降到每400ms刷新一次的频率。产生的原始是RTC刷新过快,芯片不自主的产生了不可预测的问题。5.4 运行在调试和测试后,确认程序和硬件无误后,去掉ARM仿真器,直接把主板接上电源进行实际运行测试。STM32连接的液晶屏初始显示如图5.18所示,图5.18液晶菜单图在接收到颜色检测信号和投放信号时,由芯片控制的舵机也可以照常运行,如图5.19所示 图5.19 液晶指示和舵机动作图第六章 系统总结6.1 系统特点 本次设计的工作主要是针对智能垃圾桶系统的软件部分进行设计。在硬件的支持上,开发可以实现自我RTC走时、舵机控制、多路PWM输出、颜色识别、和液晶显示提示功能的智能垃圾桶系统。我们小组设计的智能垃圾桶在有以下特点:1、程序的保密强。程序保密性是基于其程序的编译器,因为编译器强大的编译功能,在生成的Hex文件后,可以再利用其他存储硬盘,如U盘或者移动硬盘,把HEX文件复制到存储硬盘里,需要使用时把Hex文件拉出来,使用下载工具把HEX文件下载到芯片flash里。这也是大多数公司为防止泄密源文件使用的办法,把需要投入生产的系统在基于C编程语言的基础上开发,然后重复使用和下载HEX文件到主板上。2、成品操作符合人性化,只需在系统开启后,进行垃圾的投递,垃圾即刻自动投入不同的颜色分类区内。3、双芯片的系统设计想法使得该系统的拓展具有更多的上限,能添加的功能的选择性增大,同时在此基础上,颜色识别的稳定性也会加以提升,在识别过程中不会有其他模块对其进行干扰。6.2 系统的不足及解决措施不足:1、系统的操作上限过少。2、除提供垃圾分类显示外,没有拓展一些其它可以提醒的数据,也没有在垃圾分类的基础上延伸出更为先进的东西,例如智能消毒,垃圾无害化处理等。3、在维修时应提供PC端显示的故障或重要信息,和应该同步提醒负责人某垃圾桶需要进行维护维修。解决措施:1、系统操作上增加了液晶显示来提醒和提供人们所能操作的界面,同时也可添加对垃圾信息的播报,以提醒人们分类的作用与增加对分类知识的认识。2、考虑增加所处环境周围温度、湿度数据显示,在此基础上对垃圾进行温湿度调节,使垃圾处理更为轻便化,减轻垃圾处理人员的工作负担。3、增加串口打印功能,即利用串口把数据传输到电脑端,变成可视性数据,可助于对区域垃圾分类积极程度的调查,以加强对于垃圾分类处理的推广。6.3 系统的展望 嵌入式系统的发展非常迅速,且各个行业基本有以嵌入式系统为主导的各种产品。在嵌入式不停发展的背景下,安全问题显得尤为重要,而且也是当下主要解决的问题。在平常生活里,如我们在公路看见的交通灯指导系统,去银行时取钱的ATM机,通讯的手机,家庭使用的汽车里面的控制系统;国家层面的更有如卫星通信,航母控制系统,军队加密通信系统等,嵌入式智能系统无处不在。和我们的电脑手机比较先进的系统相比,普通的嵌入式系统因为其在硬件、处理器、功耗和存储器上相互约束,更需要我们注意其安全问题。跟界面操作系统的区别,嵌入式系统主要承载在硬件上,所以在硬件层面上大多设备容易招到物理破坏,在保密性不好的情况下甚至会被偷窃技术。但是如果软件层面上没有很好的保密性,整个系统更容易受到破坏。而且现在又很多系统都会加上互联网通信,在讯息万变的通信系统中,容易被入侵,篡改、偷窃数据等等。因此,无论在硬件亦或是软件上,都存在着各种的加密手段防止技术和技术泄露。如在软件上有加密算法,硬件通信也有各种的加密算法,一般不会透明传输。 基于系统的安全性考虑,我们本次的设计再投入实际生产前或者说与市面上的成熟的产品相比还有很大的一段距离。我们本次开发的智能垃圾桶无论是在当前万物互联的社会发展前景下或者现在仅仅出于产品的使用安全的层面上分析,还缺乏完整的投入使用数据分析。而且这次设计的开发在所接触的知识上开发,难免遇到了一些已经普遍的技术,如图像识别功能、语音提醒功能和互联网功能。这也是我们在考虑的实际开发应用上的硬伤,没有达到市面上一些智能垃圾桶普遍使用到的性能。在STM32F103处理器强大的计算功能和我们所用到的GPIO外设空余的前提下,会使得拓展其他功能的想法变得相对容易,但也需要我们更多的去学习和应用。总的来说,智能垃圾桶的使用使人们生活的周边环境变得更加整洁、干净,同时也减轻垃圾处理的负担和减少对自然环境的污染。垃圾堆积,周边环境的垃圾乱扔等等问题,影响到大多人的生活质量。现在的大城市,如北京、上海、广州、深圳等都退出不乱扔垃圾、开发智能垃圾桶及在各个小区投入使用的政策,人们在不停地往建造更加良好生活环境的方向发展。参考文献:[1]李桥.嵌入式系统的安全方法研究[J].网络安全技术与应用,2009,(7):30-38.[2]张勇.嵌入式实时操作系统μCOS-Ⅲ应用开发[J].计算机与互联网,2014,(2)98-108.[3]李志明,檀永.STM32嵌入式系统开发实战指南[J].开发指南,2013,(1)2-200.[4]蒙博宇.STM32自学笔记(第2版)[J].芯片详解,2014,(1)30-200.[5]华洪略,金威,沈国荣,金晟,张桂迪,蒋剑飞,何卫锋.近阈值低功耗8位微处理器的设计与实现[J].信息技术.2016(11)1-100.[6]使用低成本FPGA巧妙地扩展微处理器的连接[J].世界电子元器件.2014(03)20-50.[7]章从福.中国嵌入式微处理器年产值近2500亿[J].半导体信息.2009(01)10-50.[8]国防科学技术大学计算机学院微电子与微处理器研究所[J].电子科技.2009(12)17-61.[9]丁力,宋志平,徐萌萌,陶灿辉.基于STM32的嵌入式测控系统设计[J].中南大学学报(自然科学版).2013(S1)5-87.[10]勾慧兰,刘光超.基于STM32的最小系统及串口通信的实现[J].工业控制计算机.2012(09).[11]曹圆圆.基于STM32的温度测量系统[J].仪器仪表与分析监测.2010(01).[12]XiaobaoLee,ChunhuiWang,ZhaoxuLuoetal.OpticaldesignofanewfoldingscanningsysteminMEMS-basedlidar[J]OpticsandLaserTechnology,2020,125[13]RamonaKuhn,RobertJensch,IsaacMbirBryantetal.Photodegradationofethylenediaminetetra(methylenephosphonicacid)–Theeffectofthesystemconfiguration[J]JournalofPhotochemistry&Photobiology,A:Chemistry,2020,388[14]ZhaomengLi,JieJi,WeiqiYuanetal.ExperimentalandnumericalinvestigationsontheperformanceofaG-PV/TsystemcomparingwithA-PV/Tsystem[J]Energy,2020,194[15]ChristinaZompola,LinaPalaiodimou,PanagiotisKokotisetal.ThemutationD313YmaybeassociatedwithnervoussystemmanifestationsinFabrydisease[J]JournaloftheNeurologicalSciences,2020,412[16]KeWang,Xin-huiZhao,JunLiuetal.Nervoussystemandgastriccancer[J]BBA-ReviewsonCancer,2020,1873(1)致辞 时光荏苒,白驹过隙,大学四年将近尾声,四年的努力,再论文和毕业设计答辩通过后就要画上句号,也是一个即将开始进入社会的起点。大学的钟声敲响,即将步入社会的我们在大学四年里畅游知识的海洋,学到的不仅仅是老师教的知识,还懂得与人为善的做人原则。老师不仅在平时教导我们,授人以鱼,不如授人以渔,而这次我们很好的把“渔”用到了毕业设计上。本次毕业设计在黄鸿老师的指导下完成且不停的完善,使实物成品能够投入社会生产中使用,能够反馈相应的价值,让我们明白知识也是能产生社会价值的一种途径。知识的积累是靠平时努力学习得来的,不过学来的知识实际上可以说是虚的,而把理论知识用在生活中,用在平时工作学习中,才能把它变成实实在在被自己所用的东西。学生生涯教会我们的是要保持不断学习的心态,保持自己对新的事物创新的态度,对新的知识的求知欲,能使我们更加充实自己和丰富自己。附录:程序:#include"stm32f10x.h"//STM32头文件#include"sys.h"#include"delay.h"#include"relay.h"#include"oled0561.h"#include"CHS_16x16.h"//引入汉字字体#include"rtc.h"#include"NVIC.h"#include"adc.h"#include"KEYPAD4x4.h"#include"dht11.h"#include"encoder.h"#include"bkp.h"#include"buzzer.h"#include"MY1690.h"#include"touch_key.h"#include"iwdg.h"//#defineFLASH_START_ADDR0x0801f000intmain(void){//主程序 u8b[2]; s16MUNE,num=0,num1=0,num2=0,num3=0,num4=0,num5=0; intcou=0; /* MUNE菜单 num调节时间标志位 num1记录DHT11标志位 num3调节湿度标志位 num4温湿度读取标志位 刷新数据时间大于1秒 */ s16checkhour=0,checkmin=0,checkwen=25,checkwen1=25,checkshi=50,checkshi1=50; /*高温设置低温设置湿度设置*/ delay_ms(1000);//上电时等待其他器件就绪 RCC_Configuration();//系统时钟初始化 RELAY_Init();//继电器初始化// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE);//APB2外设时钟使能// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//启动AFIO重映射功能时钟// GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//改变指定管脚的映射,完全禁用JTAG+SW-DP I2C_Configuration();//I2C初始化 OLED0561_Init();//OLED初始化 RTC_Config();//实时时钟初始化 ADC_Configuration();//ADC初始化 NVIC_Configuration();//嵌套中断控制器的设置// KEYPAD4x4_Init();//微动开关的接口初始化 KEYPAD4x4_INT_INIT(); //中断初始化 ENCODER_Init(); TOUCH_KEY_Init(); MY1690_Init();//MP3芯片初始化 BKP_Configuration();//初始化BKP BUZZER_Init();//蜂鸣器初始化 IWDG_Init();//初始化并启动独立看门狗 checkwen=BKP_ReadBackupRegister(BKP_DR8); checkwen1=BKP_ReadBackupRegister(BKP_DR9); //MUNE= BKP_ReadBackupRegister(BKP_DR1); //if((MUNE!=0)||(MUNE!=10)||(MUNE!=20)||(MUNE!=30)||(MUNE!=40)){ MUNE=0; //} while(1){ IWDG_Feed();//喂狗 if(MUNE==0){ //菜单一 //菜单一 OLED_DISPLAY_8x16_BUFFER(0,""); OLED_DISPLAY_8x16_BUFFER(4,"");//显示字符串 //OLED_DISPLAY_8x16_BUFFER(0,""); RE_OLED_DISPLAY1_16x16(0,2*16,cai4); RE_OLED_DISPLAY1_16x16(0,3*16,dan1); RE_OLED_DISPLAY1_16x16(0,4*16,yi1); //温度 OLED_DISPLAY1_16x16(2,1*16,wen1); OLED_DISPLAY1_16x16(2,2*16,du4); OLED_DISPLAY1_16x16(2,3*16,maohao); //湿度 OLED_DISPLAY1_16x16(4,1*16,shi1); OLED_DISPLAY1_16x16(4,2*16,du4); OLED_DISPLAY1_16x16(4,3*16,maohao); //时间 OLED_DISPLAY1_16x16(6,1*16,shi2); OLED_DISPLAY1_16x16(6,2*16,jian1); OLED_DISPLAY1_16x16(6,3*16,maohao); MUNE=1; } if(MUNE==1||MUNE==2){ //刷新温湿度 //延时,刷新数据的频率(不得小于1秒) if(rsec%2==1&&num4==1){ if(DHT11_ReadData(b)==0){//读出温湿度值指针1是湿度20~90%,指针2是温度0~50C,数据为十进制 OLED_DISPLAY_8x16(2,8*8,b[1]/10+0x30);//显示温度值 OLED_DISPLAY_8x16(2,9*8,b[1]%10+0x30);// OLED_DISPLAY1_16x16(2,5*16+2,tac1); OLED_DISPLAY_8x16(4,8*8,b[0]/10+0x30);//显示湿度值 OLED_DISPLAY_8x16(4,9*8,b[0]%10+0x30);// OLED_DISPLAY1_16x16(4,5*16+2,tac2); } num4=0; } if(rsec%2!=1) num4=1; delay_us(1); } if(MUNE==2){ //修改时间 OLED_DISPLAY_8x16(6,14*8,0+0x30); //秒 OLED_DISPLAY_8x16(6,15*8,0+0x30); if(num==0){ //调小时位 RE_OLED_DISPLAY_8x16(6,8*8,checkhour/10+0x30); //时 RE_OLED_DISPLAY_8x16(6,9*8,checkhour%10+0x30); OLED_DISPLAY_8x16(6,11*8,checkmin/10+0x30); //分 OLED_DISPLAY_8x16(6,12*8,checkmin%10+0x30); if(INT_MARK==1){ //右转 INT_MARK=0; checkhour++; if(checkhour>23){ checkhour=0; } } if(INT_MARK==2){ //左转调小时 INT_MARK=0; checkhour--; if(checkhour<0){ checkhour=23; } } } if(num==1){ //调节分钟位 OLED_DISPLAY_8x16(6,8*8,checkhour/10+0x30); //时 OLED_DISPLAY_8x16(6,9*8,checkhour%10+0x30); RE_OLED_DISPLAY_8x16(6,11*8,checkmin/10+0x30); //分 RE_OLED_DISPLAY_8x16(6,12*8,checkmin%10+0x30); if(INT_MARK==1){ INT_MARK=0; checkmin++; if(checkmin>59)checkmin=0; } if(INT_MARK==2){ INT_MARK=0; checkmin--; if(checkmin<0)checkmin=59; } } if(INT_MARK==3){ //控制调节标志位 INT_MARK=0; delay_ms(200); //去抖 num++; if(num>1){ num=0; MUNE=0; RTC_Set(2019,1,2,checkhour,checkmin,0);//写入当前时间 BUZZER_BEEP1(); checkhour=0; checkmin=0; } } } if(MUNE==10){ //菜单二 //菜单二 OLED_DISPLAY_8x16_BUFFER(0,""); RE_OLED_DISPLAY1_16x16(0,2*16,cai4); RE_OLED_DISPLAY1_16x16(0,3*16,dan1); RE_OLED_DISPLAY1_16x16(0,4*16,er4); //电位 OLED_DISPLAY1_16x16(2,1*16,dian4); OLED_DISPLAY1_16x16(2,2*16,wei4); OLED_DISPLAY1_16x16(2,3*16,maohao); //光强 OLED_DISPLAY1_16x16(4,1*16,guang1); OLED_DISPLAY1_16x16(4,2*16,qiang2); OLED_DISPLAY1_16x16(4,3*16,maohao); MUNE=11; } if(MUNE==11){ if((rsec%2==1)&&(num1==0)){ //电位 OLED_DISPLAY_8x16(2,8*8,ADC_DMA_IN[0]/1000+0x30); OLED_DISPLAY_8x16(2,9*8,ADC_DMA_IN[0]%1000/100+0x30); OLED_DISPLAY_8x16(2,10*8,ADC_DMA_IN[0]%100/10+0x30); OLED_DISPLAY_8x16(2,11*8,ADC_DMA_IN[0]%10+0x30); //光强 OLED_DISPLAY_8x16(4,8*8,ADC_DMA_IN[1]/1000+0x30); OLED_DISPLAY_8x16(4,9*8,ADC_DMA_IN[1]%1000/100+0x30); OLED_DISPLAY_8x16(4,10*8,ADC_DMA_IN[1]%100/10+0x30); OLED_DISPLAY_8x16(4,11*8,ADC_DMA_IN[1]%10+0x30); num1=1; } if((rsec%2)!=1)num1=0; //时间 } if(MUNE==20){ //高低温度 //温度设置 RE_OLED_DISPLAY1_16x16(0,2*16,wen1); RE_OLED_DISPLAY1_16x16(0,3*16,du4); RE_OLED_DISPLAY1_16x16(0,4*16,she4); RE_OLED_DISPLAY1_16x16(0,5*16,zhi4); //高温 OLED_DISPLAY1_16x16(2,1*16,gao1); OLED_DISPLAY1_16x16(2,2*16,wen1); OLED_DISPLAY1_16x16(2,3*16,maohao); //低温 OLED_DISPLAY1_16x16(4,1*16,di1); OLED_DISPLAY1_16x16(4,2*16,wen1); OLED_DISPLAY1_16x16(4,3*16,maohao); MUNE=21; } if(MUNE==21){ //刷新高低温 OLED_DISPLAY_8x16(2,8*8,checkwen/10+0x30);//显示温度值 OLED_DISPLAY_8x16(2,9*8,checkwen%10+0x30);// OLED_DISPLAY1_16x16(2,5*16+2,tac1); OLED_DISPLAY_8x16(4,8*8,checkwen1/10+0x30);// OLED_DISPLAY_8x16(4,9*8,checkwen1%10+0x30);// OLED_DISPLAY1_16x16(4,5*16+2,tac1); } if(MUNE==22){ //设置高低温 if(num2==0){ RE_OLED_DISPLAY_8x16(2,8*8,checkwen/10+0x30); //高温 RE_OLED_DISPLAY_8x16(2,9*8,checkwen%10+0x30); if(INT_MARK==1){ INT_MARK=0; checkwen++; if(checkwen>50)checkwen=1; } if(INT_MARK==2){ INT_MARK=0; checkwen--; if(checkwen<0)checkwen=50; } } if(num2==1){ OLED_DISPLAY_8x16(2,8*8,checkwen/10+0x30); //高温 OLED_DISPLAY_8x16(2,9*8,checkwen%10+0x30); RE_OLED_DISPLAY_8x16(4,8*8,checkwen1/10+0x30); //低温 RE_OLED_DISPLAY_8x16(4,9*8,checkwen1%10+0x30); if(INT_MARK==1){ INT_MARK=0; checkwen1++; if(checkwen1>50||checkwen1>checkwen)checkwen1=0; } if(INT_MARK==2){ INT_MARK=0; checkwen1--; if(checkwen1<0)checkwen1=checkwen-10; } } if(INT_MARK==3){ //当按下时num2++或标志位清零推出 INT_MARK=0; delay_ms(300); num2++; if(num2>1){ //num2>1时,退出MUNE22 num2=0; MUNE=20; BKP_WriteBackupRegister(BKP_DR8,checkwen); BKP_WriteBackupRegister(BKP_DR9,checkwen1); BUZZER_BEEP1(); } } } if(MUNE==30){ OLED_DISPLAY_8x16_BUFFER(4,"");//显示字符串 //湿度设置 RE_OLED_DISPLAY1_16x16(0,2*16,shi1); RE_OLED_DISPLAY1_16x16(0,3*16,du4); RE_OLED_DISPLAY1_16x16(0,4*16,she4); RE_OLED_DISPLAY1_16x16(0,5*16,zhi4); //湿度上限 OLED_DISPLAY_8x16_BUFFER(2,""); OLED_DISPLAY_8x16(2,3*8-2,'M');//显示8x16的单个字符 MAX OLED_DISPLAY_8x16(2,4*8-2,'A');//显示8x16的单个字符 OLED_DISPLAY_8x16(2,5*8-2,'X');//显示8x16的单个字符 OLED_DISPLAY1_16x16(2,3*16,maohao); //湿度下限 OLED_DISPLAY_8x16_BUFFER(4,""); OLED_DISPLAY_8x16(4,3*8-2,'M');//显示8x16的单个字符 MAX OLED_DISPLAY_8x16(4,4*8-2,'I');//显示8x16的单个字符 OLED_DISPLAY_8x16(4,5*8-2,'N');//显示8x16的单个字符 OLED_DISPLAY1_16x16(4,3*16,maohao); OLED_DISPLAY1_16x16(2,5*16+2,tac2); OLED_DISPLAY1_16x16(4,5*16+2,tac2); MUNE=31;//跳转湿度显示菜单 } if(MUNE==31){ OLED_DISPLAY_8x16(2,8*8,checkshi/10+0x30);//显示温度值 OLED_DISPLAY_8x16(2,9*8,checkshi%10+0x30);// OLED_DISPLAY_8x16(4,8*8,checkshi1/10+0x30); OLED_DISPLAY_8x16(4,9*8,checkshi1%10+0x30); } if(MUNE==32){ if(num3==0){ RE_OLED_DISPLAY_8x16(2,8*8,checkshi/10+0x30); //湿度MAX RE_OLE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论