基于ARM的智能健康饮水机控制系统的研究_第1页
基于ARM的智能健康饮水机控制系统的研究_第2页
基于ARM的智能健康饮水机控制系统的研究_第3页
基于ARM的智能健康饮水机控制系统的研究_第4页
基于ARM的智能健康饮水机控制系统的研究_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

-基于ARM的智能健康饮水机控制系统的研究【摘要】:论文详细阐述了基于ARM的智能健康饮水机系统的硬件组成、软件设计以及系统调试。系统以OPEN103Z开发板作为控制核心,使用单线数字温度传感器DS18B20构成前置信号采集电路,对在普通饮水机进行加热检测并通过TAD-K220BD人体感应开关控制饮水机工作,再由PC817光电耦合器检测其加热次数,以及通过按键模拟出饮水机各种工作状态,最后实现LCD液晶屏显示运行天数、空闲时间、饮水次数、工作状态、健康指导等信息。【关键词】:OPEN103Z温度传感器DS18B20人体感应开关TAD-K220BD光电耦合PC817-i-Abstract:ThispaperexpoundstheintelligenthealthywatermachinesystembasedonARMhardwarecomposition,softwaredesignandsystemdebugging.SystemtoOPEN103Zdevelopmentboardasthecontrolcore,usingthesinglelinedigitaltemperaturesensorDS18B20afirstsignalacquisitioncircuit,heatedinordinarywarmwatermachinefortestingandthroughtheTAD-K220BDhumanbodyinductionswitchcontrolwatermachinework,againbyPC817photoelectriccouplertodetectitsheatingtime,andvariousworkingstatethroughthebuttontosimulatewaterdispenser,finallyrealizetheLCDscreendisplaydaysrunning,freetime,frequencyofdrinkingwater,workingstatus,healthguidance,etc.Keywords:OPEN103ZDS18B20TAD-K220BDPC817-ii-目录前言.2第1章设计方案.3第1.1节课题分析.3第1.2节饮水机的发展与现状.3第1.3节系统硬件方案分析.3第1.4节系统软件方案分析.4第2章系统的硬件设计.5第2.1节电路系统框图.5第2.2节主控制单元的设计.5第2.3节饮水机内部电路图.7第2.4节光电耦合器pc817.8第2.5节人体感应开关TAD-K220BD.10第2.6节温度传感器电路设计.11第2.7节键盘电路的设计.13第2.8节显示电路的设计.13第3章系统的软件设计.15第3.1节系统的主程序设计.15第3.2节系统主程序流程图.15第3.3节温度传感器电路程序的设计.16第4章系统调试及性能分析.17第4.1节系统测试.17第4.2节性能分析.19结论.20参考文献.21致谢.22附录.23附录1:实物照片说明.23附录2:部分源程序.26第0页前言自动化已深入到各个领域,大到军事、航天,小到楼宇、电梯。自动化控制在工业生产领域,不断的发挥着提高效率,控制质量,节约成本等重要作用,已经成为除“工艺”、“电气”等之外,不可或缺的生产保障范围。从饮水机问世以来,在中国的市场发展趋势逐年上升。人们对饮水机的选择已经不是停留在过去的眼光,而是高标准,不仅使用而且要求外形脱俗,而在功能上,我们也有了更高的要求。因此,智能健康的饮水机已是饮水机发展的必然趋势。设计出一个全新的智能饮水控制系统可以满足人们的需求,该系统具有温度检测、是否需要启动饮水机加热,检测是否有人饮用等功能。本次设计的智能饮水机控制,就是要符合人们需求的生活用水,先要把水烧开,然后使水温保持一定的温度,同时检测此次加热的水有多长时间没有被饮用,是否需要放水换水。掌握好对饮水机的控制,就能在一定程度上把我们身边的水充分利用起来,防止了每次加热都使水沸腾,既节能又能更好的满足人们的需求。目前广泛使用的饮水机,具有价格低廉,制造简便等优点。但随着用户长时间的使用,这些饮水机功能单一、能耗较大、长时间饮用饮水机的水对健康不利等缺点逐渐暴露出来。因此,本次设计的主要目的在于,设计出一个全新的智能健康控制系统。第1页第1章设计方案第1.1节课题分析根据任务书的要求,设计一个基于ARM的健康智能饮水机的装置,要利用温度传感器检测实时温度,通过人体感应开关控制饮水机工作,利用光电耦合器检测加温次数,由按键模拟出饮水机各种工作状态,最后实现LCD液晶屏显示运行天数、空闲时间、饮水次数、工作状态、健康指导等信息,本次毕业设计的主要任务是能对饮水机各种工作状态下进行检测和控制。设计中采用ARM来实现控制,涉及的模块有温度的采集模块,键盘显示模块,人体感应模块,光电耦合模块等几个部分。要实现系统的设计要用到的知识点有单片机的原理和应用,温度传感器的原理和应用,人体感应开关的原理和应用,光电耦合器的原理和应用,以及按键电路和LCD显示电路的设计等。第1.2节饮水机的发展与现状我国的水家电产业还处在萌芽期,发展很不规范,还不能解决人类的健康饮水问题。主要体现在水家电产品国家标准不完善,行业不规范,没有统一的执行标准,比如已经发展几十年的饮水机产品,到现在还没有一个行业标准,其次市场上的水家电不能满足消费者的健康需求,人为地限制了水家电产品的快速发展。这些问题对水家电企业来说除了挑战外,更是机遇。从1992年安吉尔生产出中国第一台饮水机开始,饮水机加桶装水的方便、快捷、健康的饮水方式便在中国兴起,到了1999年,市场逐渐成熟,美的、沁园、浪木等企业也开始生产符合国家安全的饮水机9。2006年以后,研究发现,有内胆饮水机的水垢和节能问题渐渐暴漏。所以安吉尔和美的推出了外置加热的沸腾胆饮水机产品,以独特的热胆外置方式加热饮用水,现喝现烧更节能、更易清洁加热杯内壁。沁园推出了无热胆系列产品,由于宣传角度和内部造型新颖,曾经热卖一时,但是火爆之后,大量问题暴漏,水垢、二次污染、节能、安全这些问题都没有解决,导致客诉增多,名声衰退,低迷不前。所以饮水机的发展趋势近10年左右还会以外形优美的外加热饮水机为主,传统饮水机为辅,无热胆为异形的发展路线走下去。第1.3节系统硬件方案分析单片机是大规模集成电路技术发展的产物,属于第四代电子计算机。它是把中央处理单元CPU、随机存取存储器RAM、只读存储器ROM、定时/计数器以及I/O输入输出接口电路等主要计算机部件都集成在一块集成电路芯片上的微型计算器,它的特点是:第2页功能强大、运算速度快、体积小、价格低廉、稳定可靠、应用广泛。由此可见,采用单片机设计控制系统,不仅可以降低开发成本,精简系统结构,而且控制算法由软件实现,还可以提高系统的兼容性和可靠性。目前,市面上的单片机不仅种类繁多,而且在性能方面也各有所长。ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。更早称作AcornRISCMachine。ARM处理器本身是32位设计,但也配备16位指令集。一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。所以本次设计选用STM32开发板Open103Z是一块以STM32F103ZET6为主控芯片的开发板,它带有丰富的扩展接口,支持各类外围模块的接入,易于实现系统的设计与调试。第1.4节系统软件方案分析目前C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔实验室的DennisM.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序10。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。所以此次设计使用C语言进行软件的设计。第3页第2章系统的硬件设计第2.1节电路系统框图ARM主芯片220V交流电饮水机硬件电路光电耦合电路LCD显示电路温度传感器电路图2-1系统框图从系统框图可以看的出温度传感器信号,光电耦合电路信号均为饮水机温控系统的输入信号,LCD显示电路信号则为饮水机温控系统的输出信号。系统框图也充分的体现出了单片机作为整个系统的核心部件的这一理念。所有的外围的设备围绕单片机作为单片机的功能模块与单片机进行信息交换和通信。核心部件单片机对所有的外围设备数字温度传感器、光电耦合电路等器件反馈的信息在软件的设定下进行综合分析,发出指令信号给LED显示器工作状态。设计框图作为整个设计方案的灵魂将自始至终的指导设计的全过程,在以后的设计中将完全按照框图所列的模块进行分模块设计。这样一来使整个设计简化为六个部分,各部分又可以单独的进行设计,这样一来通过对各个模块的多种方案进行分析比较确定最佳选择并将其作为最终选择,最后将各模块的最佳方案进行组合得到我们的最终设计方案。第2.2节主控制单元的设计在最小系统中,采用STM32F103ZET6微控制器,工作频率可达72MHz,内置2个12位ADC,16个外部模拟信号输入通道,可达1s转换时间,转换范围是03.6V;支持7个DMA通道,可操作多种通用外设,如定时器、ADC、USAR等;按照STM32最小系统的设计规范,最小系统构成如图2-2所示。第4页图2-2STM32F103ZET6最小系统结构图根据图2-2的STM32F103ZET6系统结构图,本课题设计研究主要用到以下模块:2.2.1.STM32F103ZET6STM32功能强大,下面仅列出STM32F103ZET6的核心资源参数:内核:Cortex-M332-bitRISC;工作频率:72MHz,1.25DMIPS/MHz;工作电压:2-3.6V;封装:LQFP144;I/O口:112;存储资源:512KFlash,64KRAM(103Z带E后缀的存储器最大);接口资源:3xSPI,5xUSART,2xI2S,2xI2C,1xFSMC,1xLCD,1xSDIO,1xUSB,1xCAN;模数转换:3xAD(12位,1us,分时21通道),2xDA(12位);调试下载:支持JTAG/SWD接口的调试下载,支持IAP;FSMC+SPI接口(FSMC-A+SPI)方便接入LCD+触摸屏模块。2.2.2.STM32F103性能特点内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。POR、PDR和可编程的电压探测器(PVD)。4-16MHz的晶振。内嵌出厂前调校的8MHzRC振荡电路。内部40kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振。低功耗:3种低功耗模式:休眠,停止,待机模式。为RTC和备份寄存器供电的第5页VBAT。调试模式:串行调试(SWD)和JTAG接口。DMA:12通道DMA控制器。支持的外设:定时器,ADC,DAC,SPI,IIC和USART。2个12位的us级的A/D转换器(16通道):A/D测量范围:0-3.6V。双采样和保持能力。片上集成一个温度传感器。2通道12位D/A转换器:STM32F103xC,STM32F103xD,STM32F103xE独有。最多高达112个的快速I/O端口:根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。除了模拟输入,所有的都可以接受5V以内的输入。最多多达11个定时器:4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。2个16位的6通道高级控制定时器:最多6个通道可用于PWM输出。2个看门狗定时器(独立看门狗和窗口看门狗)。Systick定时器:24位倒计数器。2个16位基本定时器用于驱动DAC。最多多达13个通信接口:2个IIC接口(SMBus/PMBus)。5个USART接口(ISO7816接口,LIN,IrDA兼容,调试控制)。3个SPI接口(18Mbit/s),两个和IIS复用。CAN接口(2.0B),USB2.0全速接口,SDIO接口。ECOPACK封装:STM32F103xx系列微控制器采用ECOPACK封装形式。第2.3节饮水机内部电路图图2-3饮水机硬件走线图电路图分析:当人体红外感应传感器检测到有人来的时候,饮水机通电开始正常工作,此时温度控制开关1、2都处于闭合状态。饮水机处于加热状态,红、绿灯亮。当温度达到设定范围时,温度开关1断开,此时只有黄灯亮。当人体红外传感器在持续3分钟内没有检测第6页到有人,温度控制开关1、2断开,饮水断电不工作。当黄线和蓝线之间有电压时,只有黄灯亮;当黄线和红线之间有电压时,只有红灯亮;当红线和蓝线之间有电压时,蓝灯亮。第2.4节光电耦合器pc817本次设计中连接加热器体的加热控制器将采用光耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。目前它已成为种类最多、用途最广的光电器件之一3。光耦合器一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。这就完成了电光电的转换,从而起到输入、输出、隔离的作用。由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。在计算机数字通信及实时控制中作为信号隔离的接口器件,可以大大增加计算机工作的可靠性。光耦合器的主要优点是:信号单向传输,输入端与输出端完全实现了电气隔离隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。光耦合器是70年代发展起来产新型器件,现已广泛用于电气绝缘、电平转换、级间耦合、驱动电路、开关电路、斩波器、多谐振荡器、信号隔离、级间隔离、脉冲放大电路、数字仪表、远距离信号传输、脉冲放大、固态继电器(SSR)、仪器仪表、通信设备及微机接口中6。在单片开关电源中,利用线性光耦合器可构成光耦反馈电路,通过调节控制端电流来改变占空比,达到精密稳压目的。由PC817的基本应用电路可知,三个基本元件分别为发光二极管限流电阻R2,光敏三极管集电极限流电阻R1和PC817,Vin为指示灯两端,Vo为输出响应电压。依照图2-5搭建测试电路,R2取5K,R1取60K,R3取10K,VCC为5V,测量Vout是否有高电平信号,则送入单片机。第7页图2-4光电耦合设计电路图2-5光电耦合实际电路第8页表2-1光电耦合参数Parameter参数Symbol符号Rating数值Unit单位Forwardcurrent正向电流IF50mA*1Peakforwardcurrent峰值正向电流IFM1AReversevoltage反向电流VR6V输入侧Powerdissipation功耗P70mWCollector-emittervoltage集电极发射极电压VCEO35VEmitter-collectorvoltage发射极集电极电压VCEO6VCollectorcurrent集电极电流IC50mW输入侧Collectorpowerdissipation集电极功耗PC150mWTotalpowerdissipation总功耗Ptot200mW*2IoslationVoltage隔离电压Vios5000VrmsOperatingtemperature操作温度Topr-30to+100第2.5节人体感应开关TAD-K220BD基于红外线技术的自动控制产品,当有人进入开关感应范围时,专用传感器探测到人体红外光谱的变化,开关自动接通负载,人不离开感应范围,开关将持续接通;人离开后,开关延时自动关闭负载。人到灯亮,人离灯熄,亲切方便,安全节能。在本文的设计中主要通过人体红外感应开关检测到房间内是否有人进来,在检测到有人来的同时,人体红外感应开关开始工作,此时会有一个5分钟的时间对人体红外感第9页应开关进行充电准备。当充电完成后,饮水机开始上电工作进行加热。人体红外感应开关每3分钟对周围环境进行检测一次,判断人是否已经走了或者人还在,人要是走了,那么开关断开,饮水机不工作断电,如果人还在,则开关继续保持闭合,饮水机正常工作。图2-6人体红外感应开关表2-2电性参数感应方式被动式工作电压180V-AC240V(50Hz/60Hz)感应原理人体红外自身功率#include#includepc817.hintmain(void)/=定义局部变量uint16_ta0;chara2A=0,a2B=0;chara4A=0,a4B=0;uint16_ta3;intn;uint8_tkk;charcc50;u8i;u8*p,id8;/-与DS18B20相关的变量Barb_days,b_idle;/-定义运行天数和空闲时间指示条变量Barb_heat,b_drink;/-定义加温和饮水指示条变量Winw_work,w_temp;/-定义工作和温度窗口变量/=初始化/-变量初始化/-运行天数指示条变量-初始化10,30b_days.dir=Right;/向右增长b_days.x0=10+90;/窗口原点,左上角x坐标b_days.y0=30;/窗口原点,左上角y坐标b_days.width=200;/窗口宽度b_days.high=16;/窗口高度b_days.x1=b_days.x0+b_days.width;/窗口对角点,右下角x坐标b_days.y1=b_days.y0+b_days.high;/窗口对角点,右下角y坐标b_days.bk=Black;/背景色Background;b_days.fg=Green;/前景色Foreground;b_days.fg2=Red;/前景色2Foreground;第26页b_days.edge=Yellow;/边框色b_days.lim_high=par.days;/上限系数;b_days.lim_low=0;/下限系数;/-空闲指示条变量-初始化b_idle.dir=Right;/向右增长b_idle.x0=10+90;/窗口原点,左上角x坐标b_idle.y0=50;/窗口原点,左上角y坐标b_idle.width=200;/窗口宽度b_idle.high=16;/窗口高度b_idle.x1=b_idle.x0+b_idle.width;/窗口对角点,右下角x坐标b_idle.y1=b_idle.y0+b_idle.high;/窗口对角点,右下角y坐标b_idle.bk=Black;/背景色Background;b_idle.fg=Green;/前景色Foreground;b_idle.fg2=Red;/前景色2Foreground;b_idle.edge=Yellow;/边框色b_idle.lim_high=par.idle;/上限系数;b_idle.lim_low=0;/下限系数;/-加温指示条变量-初始化10,30b_heat.dir=Right;/向右增长b_heat.x0=10+90;/窗口原点,左上角x坐标b_heat.y0=70;/窗口原点,左上角y坐标b_heat.width=200;/窗口宽度b_heat.high=16;/窗口高度b_heat.x1=b_heat.x0+b_heat.width;/窗口对角点,右下角x坐标b_heat.y1=b_heat.y0+b_heat.high;/窗口对角点,右下角y坐标b_heat.bk=Black;/背景色Background;b_heat.fg=Green;/前景色Foreground;b_heat.fg2=Red;/前景色2Foreground;b_heat.edge=Yellow;/边框色b_heat.lim_high=par.heat;/上限系数;b_heat.lim_low=0;/下限系数;/-饮水指示条变量-初始化b_drink.dir=Right;/向右增长b_drink.x0=10+90;/窗口原点,左上角x坐标b_drink.y0=90;/窗口原点,左上角y坐标b_drink.width=200;/窗口宽度b_drink.high=16;/窗口高度b_drink.x1=b_drink.x0+b_drink.width;/窗口对角点,右下角x坐标b_drink.y1=b_drink.y0+b_drink.high;/窗口对角点,右下角y坐标b_drink.bk=Black;/背景色Background;b_drink.fg=Green;/前景色Foreground;b_drink.fg2=Red;/前景色2Foreground;b_drink.edge=Yellow;/边框色b_drink.lim_high=par.drink;/上限系数;第27页b_drink.lim_low=0;/下限系数;/-工作和温度窗口变量-初始化w_work.dir=Right;w_work.x0=10+90;/窗口原点,左上角x坐标w_work.y0=120;/窗口原点,左上角y坐标w_work.width=200;/窗口宽度w_work.high=32;/窗口高度w_work.x1=w_work.x0+w_work.width;/窗口对角点,右下角x坐标w_work.y1=w_work.y0+w_work.high;/窗口对角点,右下角y坐标w_work.bk=Black;/背景色Background;w_work.fg=Green;/前景色Foreground;w_work.pen1=Green;/前景色Foreground;w_work.edge=Yellow;/边框色w_work.lim_pen1_high=par.work;/画笔1上限系数;w_work.lim_pen1_low=0;/画笔1下限系数;w_work.pen1=Red;/画笔1颜色;/-温度窗口变量-初始化w_temp.dir=Right;w_temp.x0=10+90;/窗口原点,左上角x坐标w_temp.y0=160;/窗口原点,左上角y坐标w_temp.width=200;/窗口宽度w_temp.high=50;/窗口高度w_temp.x1=w_temp.x0+w_temp.width;/窗口对角点,右下角x坐标w_temp.y1=w_temp.y0+w_temp.high;/窗口对角点,右下角y坐标w_temp.bk=Black;/背景色Background;w_temp.fg=Magenta;/前景色Foreground;w_temp.edge=Yellow;/边框色w_temp.lim_pen1_high=par.temp_h+10;/画笔1上限系数;w_temp.lim_pen1_low=par.temp_l-10;/画笔1下限系数;w_temp.pen1=Green;/画笔2颜色/-时间变量-初始化/memset(/初始化时间t_time.tm_year=2013;/初始化时间t_time.tm_mon=12;t_time.tm_wday=0;t_time.tm_mday=9;t_time.tm_hour=0;t_time.tm_min=0;t_time.tm_sec=0;t_time.tm_isdst=0;t_time.tm_yday=365-30;/=部件初始化Init_Dispenser();/-初始化饮水机参数和状态变量LCD_Initializtion();/-初始化LCDLCD_Clear(Blue);/-LCD清屏第28页Joy_Key_GPIO_Init();/-初始化Joy_KeyLED_GPIO_Init();/-初始化LEDUSART_Configuration();/-初始化USARTADC_Configuration();/-初始化ADC和DMARTC_Init(t_time);/-初始化RTCDelay_Init();/-初始化延时程序Onewire_Enable_GPIO_Port();/-初始化Onewirep=readID();/-读DS18B20的IDwhile(*p)idi=*p;p+;i+;t_time=Time_GetCalendarTime();/-获取RTC时间t_time1=t_time;USART_Transmitter_Str(tt);/-串口发送Logo原始数据PC817_GPIO_Init();/=显示屏幕/-显示标签GUI_String(sc.Logo.c.x,sc.Logo.c.y,sc.Logo.lab,Yellow,Blue);/Logo标签GUI_String(sc.L_days.c.x,sc.L_days.c.y,sc.L_days.lab,Yellow,Blue);/累计运行天数标签GUI_String(sc.L_heat.c.x,sc.L_heat.c.y,sc.L_heat.lab,Yellow,Blue);/空闲时间标签GUI_String(sc.L_work.c.x,sc.L_work.c.y,sc.L_work.lab,Yellow,Blue);/加温次数标签GUI_String(sc.L_temp.c.x,sc.L_temp.c.y,sc.L_temp.lab,Yellow,Blue);/近期饮用时间标签GUI_String(sc.L_drink.c.x,sc.L_drink.c.y,sc.L_drink.lab,Yellow,Blue);/工作状态标签GUI_String(sc.L_idle.c.x,sc.L_idle.c.y,sc.L_idle.lab,Yellow,Blue);/温度标签GUI_String(sc.L_health.c.x,sc.L_health.c.y,sc.L_health.lab,Yellow,Blue);/健康指示标签/-显示指示条LCD_BarDisp(b_days);LCD_BarDisp(b_idle);LCD_BarDisp(b_heat);LCD_BarDisp(b_drink);/-显示窗口LCD_WindowsDisp(w_work);/-显示工作窗口LCD_WindowsDisp(w_temp);/-显示温度窗口/=主循环while(1)/-读取串口if(USART_Receiver_Str(tt)cmd.nu=sscanf(tt,%s%f%f%f%f%f%f%f%f%f%f%f%f%f%f第29页%f%f,cmd.cmd,&cmd.p0,&cmd.p1,&cmd.p2,&cmd.p3,&cmd.p4,&cmd.p5,&cmd.p6,&cmd.p7,&cmd.p8,&cmd.p9,&cmd.p10,&cmd.p11,&cmd.p12,&cmd.p13,&cmd.p14,i=0;n=cmd.nu;if(n)sprintf(tt,%s,cmd.cmd);while(-n)sprintf(tt,%s%d,tt,(int)cmd.pi+);USART_Transmitter_Str(tt);USART_Transmitter_Str(r);LCD_DrawSquare(10,210,310,230,Black);GUI_Text(10,210,(uint8_t*)tt,White,Black);/-检测外部数据a3=(uint16_t)readTemp();/DS18B20时a0=a3+25;IO.In_temp0=IO.In_temp;/-比较前后温度,用于判断加温IO.In_temp=(uint16_t)a0;/-检测键盘kk=Read_Joy_Key_State();if(NULL_KEY!=kk)/-LED和按键指示switch(kk)caseUSER_KEY:GUI_Text(300,220,US,White,Black);L.LED1=L.LED2=L.LED3=L.LED4=1;LED_lights(L);IO.In_replace=1;/-模拟:换水break;caseJOY_A_KEY:GUI_Text(300,220,_A,White,Black);LED_lights(L);IO.Out_day=1;/-模拟:饮水机使用天数break;caseJOY_B_KEY:GUI_Text(300,220,_B,White,Black);LED_lights(L);IO.Out_heat=1;/-模拟:模拟加温次数break;caseJOY_D_KEY:第30页GUI_Text(300,220,_D,White,Black);LED_lights(L);IO.In_move=1;/-模拟:发现有人移动,进行使用饮水机break;caseJOY_CTR_KEY:GUI_Text(300,220,CT,White,Black);par.work=2;/-模拟:状态break;default:GUI_Text(180,180,_,White,Black);if(IO.In_replace)/模拟换水,所有的都置零st.days=0;st.idle=0;st.heat=0;st.drink=0;IO.In_replace=0;if(flag_update)/-有刷新标志,则显示。flag_update=0;if(a0=4)IO.Out_work=0;/读取PC817a2B=a2A;a2A=Read_PC817_State();a4B=a4A;a4A=Read_PC817_State1();if(a2A=1&a2B=0&a4A=0&a4B=0)/a2为PA0端口,a4为PA2端口IO.Out_heat=1;/判断饮水机是否处于加热状态,保温状态不算加温if(a4A=1|a2A=1)/当饮水机工作时空闲时间清零st.idle=0;/按键A模拟运行天数第31页if(IO.Out_day=1)st.days+;IO.Out_day=0;L.LED1=L.LED2=L.LED3=L.LED4=0;L.LED2=1;/按键B模拟加温if(IO.Out_heat=1)st.heat+;IO.Out_heat=0;L.LED1=L.LED2=L.LED3=L.LED4=0;L.LED3=1;/按键D模拟饮水if(IO.In_move)st.drink+;IO.In_move=0;L.LED1=L.LED2=L.LED3=L.LED4=0;L.LED4=1;/按键CTR的模拟工作状态if(par.work=2)IO.Out_work+;par.work=0;/健康指示if(st.heat=0|st.drink=0)st.health=0;if(st.heat0|st.drink0)st.health=1;if(st.heat10|st.drink10)/当加热次数大于20次或者饮水次数超过60次(调试时设置为10和20)st.health=2;if(st.days5|st.idle1440)/运行天数大于15天或者空闲时间大于24小时st.health=3;/-显示变量/累计运行天数标签sprintf(cc,%02d,st.days);GUI_String(sc.L_days.c.x+40,sc.L_days.c.y,(uint8_t*)cc,Green,Black);/空闲时间标签第32页sprintf(cc,%02d:%02d,st.idle/60,st.idle%60);GUI_String(sc.L_idle.c.x+40,sc.L_idle.c.y,(uint8_t*)cc,Green,Black);/加温次数标签sprintf(cc,%04d,st.heat);GUI_String(sc.L_heat.c.x+40,sc.L_heat.c.y,(uint8_t*)cc,Green,Black);/近期饮用时间标签sprintf(cc,%02d,st.drink);GUI_String(sc.L_drink.c.x+40,sc.L_drink.c.y,(uint8_t*)cc,Green,Black);/工作状态标签sprintf(cc,%04d,IO.Out_work);GUI_String(sc.L_work.c.x+40,sc.L_work.c.y,(uint8_t*)cc,Green,Black);/温度标签sprintf(c

温馨提示

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

评论

0/150

提交评论