《温湿度检测系统(共39页).doc》由会员分享,可在线阅读,更多相关《温湿度检测系统(共39页).doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上重庆科技学院智能仪器仪表设计与调试课程设计报告 学 院: 电气与信息工程学院 专业班级: 测控10-01 学生姓名: 魏钊 学 号: 设计地点(单位)_ _I506_ _ _ _设计题目:_ _基于单片机的温湿度控制器设计_ _ _ 完成日期: 2013年 7月 12日 指导教师评语: _ _ _ _ _ 成绩(五级记分制):_ _ _ 指导教师(签字):_ _ 专心-专注-专业一、设计任务和性能指标1.1 设计任务设计基于单片机的温湿度控制系统,要求完成以下功能:1. 基本功能1)温度采集并显示到LCD;湿度采集并显示到LCD;2)温湿度上、下限报警值设定;温湿度上
2、、下限报警;3)目标温湿度值设定; 2. 扩展功能 1)实现温湿度的存储、调用; 2)其它功能;1.1.2 进度要求1.布置仪表设计任务、方案设计(1天)2.硬件设计、制作、调试(2天)3.软件设计、调试(4天)4.综合调试(1.5天)5.成果展示、答辩、撰写报告(1.5天)1.2 性能指标1.使用传感器:AMT1001,DS18B20;2.湿度测量范围:20%90%RH,湿度测量精度 5%RH;3.温度测量范围:060,测温误差1 C;4.湿度输出电压:03.0V;5.供电电压:4.75V5.25V。二、设计方案接到任务后,首先是对任务的分析,然后设计方案。温湿度监控系统的硬件主要包括单片机
3、最小系统电路、温度采集电路、湿度采集电路、蜂鸣器电路、液晶显示电路、AT24C02存储电路、按键选择电路以及串行通信电路。各个部分的主要思路如下:1STC12C5A16S2单片机是控制部分的核心元件,其主要任务是:1)A/D转换,通过湿度传感器改变湿度值获得不同信号,采用自身的A/D转换功能将模拟电压信号转换为数字信号;2)处理采集到的AD转换的数字信号和温度传感器采集的数字信号,根据换算公式计算出采集的当前温度值和湿度值; 3)控制按键操作和数据显示、存储、查询。2. 温度采集工作通过温度传感器DS18B20进行;湿度的采集工作通过湿度传感器AMT1001进行;把温湿度采集的数字量同时传送数
4、据到单片机内进行处理,得到相应的模拟量,在进行相关的计算的到温度值和湿度值。3. 将采集的温度和湿度值,通过AT24C02芯片进行存储,并且能查询历史数据,可以自由设定采集的时间间隔,本设计是每9秒采集一次,可以存储20组数据。4. 液晶显示电路是采用JM12864LCD液晶显示器,将在单片机内获得的信息显示在液晶显示屏上。5. 蜂鸣器在本设计中起到报警提醒的作用,当温度或者湿度超过设定的上限或者下限时,蜂鸣器响,直到温湿度恢复正常。6. 按键采用四个,具体功能在写程序和调试的过程中定。每一部分的思路确定后,画整个系统的原理图,确定各个元件的引脚,以便写程序时调用。三、系统硬件设计3.1单片机
5、的最小系统STC12C5A60S2的最小系统包括复位电路和时钟电路,复位电路有上电复位、按键复位、看门狗等复位方式,本设计采用按键复位方式。在单片机的X1、X2引脚之间加上11.0592MHZ的晶振,并通过20pF左右的电容接地为单片机提供工作时钟。工作电压3.5-5.5V,内部拥有4个定时器,2个串口,8路高速10位A/D转换,内置看门狗电路,外部掉电检测电路等。原理图如图3.1.1所示:图3.1.1 单片机最小系统电路3.2 湿度采集电路的设计湿度传感器,分为电阻式和电容式两种。空气中的水蒸汽吸附于感湿材料后,元件的阻抗、介质常数发生很大的变化,从而制成湿敏元件。选择湿度传感器首先应考虑以
6、下几个方面:第一是互换性。目前,湿度传感器普遍存在着互换性差的现象,同一型号的传感器不能互换,严重影响了使用效果,给维修、调试增加了困难。第二是湿度传感器的温度系数。温漂非线性,这需要在电路上加温度补偿式。采用单片机软件补偿,或无温度补偿的湿度传感器是保证不了全温范围的精度的,湿度传感器温漂曲线的线性化直接影响到补偿的效果,非线性的温漂往往补偿不出较好的效果,只有采用硬件温度跟随性补偿才会获得真实的补偿效果。湿度传感器工作的温度范围也是重要参数。第三是湿度传感器的供电。金属氧化物陶瓷,高分子聚合物和氯化锂等湿敏材料施加直流电压时,会导致性能变化,甚至失效,所以这类湿度传感器必须是交流电供电。
7、第四是精度和长期稳定性。湿度传感器的精度应达到2%5%RH,达不到这个水平很难作为计量器具使用,湿度传感器要达到2%3%RH的精度是比较困难的。 第五是湿度校正。一般情况,在缺乏完善的检定设备时,通常用简单的饱和盐溶液检定法,并测量其温度。综合各方面考虑最终本系统采用了AMT1001型电阻式湿敏元件,湿度测量范围20%-90%RH。该传感器具有低功耗,小体积、带温度补偿、单片机校准线性输出、使用方便、成本低、完全互换、超长的信号传输距离、精确校准等特点。基于AMT1001的湿度采集电路如下图3.2.1所示:图3.2.1 温湿度传感器采集电路Hot端接P11口,并串联一个10K的下拉电阻,然后接
8、地。数据量通过P11口进入单片机内进行A/D转换成模拟量,通过计算成正确的湿度值,然后显示到液晶屏上面。3.3 温度采集电路的设计温度传感器是指能感受温度并转换成可用输出信号的传感器。若按照传感器材料及电子元器件特性来分可分为热电阻和热电偶两类,按照测量方式可分为接触式温度传感器和非接触式温度传感器。选用美国Dallas 半导体公司的数字化温度传感器DS1820用于温度检测。DS18B20 支持一线总线接口,测量温度范围为-55C+125C,在-10+85C范围内,精度为0.5C。现场温度直接以一线总线的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量。主要特点如下: 1.
9、负压特性,芯片因极性接反时,芯片不会因发热而烧毁。2.转换速度快,12 位分辨率时最多在750ms内把温度转换为数字,速度更快,在9位分辨率时最多在93.75ms内把温度转换为数字;3.独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯;4.适应电压范围更宽,在寄生电源方式下可由数据线供电,电压范围:3.05.5V;5.可编程的分辨率为912位,对应的可分辨温度分别为0.0625、0.125、0.25、0.5,可实现高精度测温。基于DS18B20的温度采集电路如下图3.3.1所示:图3.3.1 温度采集电路数据量通过P10口进入单片机
10、内进行A/D转换成模拟量,通过计算成正确的温度度值,然后显示到液晶屏上面.3.4 AT24C02存储电路的设计存储器AT24C02可以满足系统对采集到的温度和湿度进行存储以及查询分析的要求,其工作电压为1.8V5.5V,采用二线串行接口,输入引脚经施密特触发器滤波抑制噪声,具有双向数据传输协议,支持硬件写保护,其读写次数较多,保存时间很长,可保存100年之久AT24C02时低工作电压的2K位串行点可擦除只读存储器;其内部组织位256个字节,每个字节8位,该芯片被广泛应用于低电压及低功耗的工商领域。AT24C02的操作主要有:1.时钟及数据传输:SDA引脚通常被外围器件拉高,SDA引脚的数据应在
11、SCL为低时变化;2.起始命令:SCL为高,SDA由高到低;必须以起始命令作为任何一次读/写操作命令的开始;3.停止命令:SCL为高,SDA由低到高;4.应答:每收到一组8位的数据后,EEPROM都会在第9个时钟周期时返回,应答信号。将AT24C02的SDA接P37口,SDA引脚可实现双向串行数据传输,该引脚为开漏输出,可与其它多个开漏输出器件或开集电极器件线或连接,SCL接入P36口,在SCL输入时钟信号的上升沿将数据送入EEPROM器件,并在时钟的下降沿将数据读出。本次设计对温度和湿度的采集成功的表示是通过P34口的LED灯闪烁表示已经存入芯片。其电路图如3.4.1所示: 图3.4.1 存
12、储器AT24C02电路3.5 按键选择电路的设计在系统中所需要的按键有四个,采用独立按键方式。其中mode按键与P20口相接,up按键与P21口相接,dn按键与P22口相接,en按键与P32口相接。本设计中按键都有不同的功能:在显示实时温湿度值的界面中,up键可以进入修改温湿度上下限的界面,dn键可以进入查询历史温湿度值界面,查询温湿度时可以按en键返回,在最后的修改界面,mode键有返回的功能,此外,up和en键还有修改上下限的功能。按键电路图如图3.5.1所示:图3.5.1 按键电路3.6 报警电路的设计在本系统中采用蜂鸣器报警作为系统的报警使用,当检测的温度和湿度超过设定的温度和湿度上限
13、或者低于设定的温度和湿度下限,蜂鸣器发出报警声,同时还联合液晶界面显示出报警提示,蜂鸣器报警电路图和发光二极管如图3.6.1和3.6.2所示:图3.6.1 蜂鸣器报警电路图3.6.2 发光二极管电路3.7液晶模块设计液晶显示器显著特点是性能稳定、可进行简单的图形显示,适用于不需要复杂图形显示功能的场合。系统采用的液晶是LCD12864液晶显示器,LCD12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面;可以显示84行1616点阵的汉字,也可完成图形
14、显示;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集。在系统中将液晶的RS(CS)端接P05口,R/W(SID)端接P06口,E(CLK)端接P07口,加上背光以及通上电源就将液晶与单片机连接。液晶显示电路如图3.6.1所示:图3.7.1 液晶显示电路四、系统软件设计4.1 主程序设计对于温湿度监控系统,软件部分主要包括温度采集子程序、湿度采集子程序、AD转换子程序、液晶显示子程序、AT24C02存储子程序以及主程序内按键模式选择程序。首先进行系统初始化,主要是给主要函数赋初值及液晶初始化等。然后在while循环中调用各个子程序,实现温湿度监控
15、的各个功能。温湿度监控系统主函数流程图如图4.1.1所示:图4.1.1 主函数流程图4.2 湿度采集子程序设计由于AMT1001是采集的模拟量信号,所以必须经过单片机的AD转换,将采集到的模拟信号转换成电压信号,再通过湿度值与电压信号的比值,通过公式将电压信号转换成湿度值。在转换过程中需要注意的是AMT1001的0%RH100%RH的湿度值,对应的电压值是03V的电压,所以在计算过程中就不能直接将单片机板子上的5V电压带进公式计算。在本次的数据换算中,其AD转换器是十位的,所以在换算电压时采用的是高八位,低两位的换算。所以采集到的电压值V=d*5000/1024,本来是乘以5,放大1000倍就
16、是乘以5000。而d=(ADC_RES&0x03)*256+ADC_RESL。此时电压值的公式为:d=d/100/3;而这时的d才是最后得到的湿度值。湿度采集子程序流程如图4.2.1所示:图4.2.1 湿度采集模块流程图4.3 温度采集子程序设计DS18B20是采集的数字量信号,可以在单片机内直接进行AD转换再换算成温度。DS18B20采用的是912位的数字值读数方式,能在750ms完成12位的数字量,其中9位的读数方式更快,更方便。分别将采集到的温度上下限值整合成一个16位的温度值,可以通过查表法或者公式法进行换算,本设计采用二分法,最后通过显示数据函数显示于液晶。温度采集子程序流程如图4.
17、3.1所示:图4.3.1 温度采集模块流程图4.4 AT24C02存储子程序设计调用子程序,将采集到的温度值和湿度值通过芯片内的读写操作,把其温度值和湿度值存储在芯片内,调用查询函数,读出存储在存储器的数据,显示到液晶上面。AT24C02的存储地址范围为0x000H0x7FFH,系统的每一次存储占用AT24C02内的5个地址,在不重复檫除地址存储的情况下,芯片内可以存储409个数据。存储查询流程图如图4.4.1所示:图4.4.1 存储查询模块流程图4.5 液晶显示子程序设计LCD液晶显示主要包括文字和数字的显示,通过选择不同按键随即显示不同页面,并对上一页面进行清屏和地址回归于左上角。在显示实
18、时温湿度界面时,采用设定标志位的方式在while循环内对屏幕进行刷屏判断标志位后进入显示页面,这种方式可以减小数据跳变的频率,使之能够平稳显示。液晶显示流程图如图4.5.12所示:图4.5.1 液晶显示模块流程图4.6 按键设置模式子程序设计可以在不同的界面利用按键来显示其他的界面或者进行界面操作,主要的界面有实时温湿度显示界面、温湿度上下限设置界面、历史数据查询界面、报警界面,其中报警界面是以闪烁的形式出现,出现警报时和实时显示界面交替显示,同时也可以进行其他操作。按键设置模式流程图如图4.6.1所示:图4.6.1 按键选择模块流程图4.7 报警子程序设计当温度或者湿度超过设定上下限值是,蜂
19、鸣器就发出声音,如果是温度超限,则还会在液晶上面显示报警界面;温度超过限度时,会在液晶显示报警字样,还会显示超高的度数。报警流程图如图4.7.1所示:图4.7.1 报警模块流程图5、 性能调试及分析5.1 调试步骤调试是按照写程序的进度来的,开始是进行温湿度采集的调试。首先考虑的是温度的显示的位数,开始我是显示的三位数,精确到小数点后面一位,后来改为了四位数。上电后,温度值正常显示,并可以根据周围的温度变化。但是用标准的数字温度计来测量的值和设计的程序显示测量的值相差2度左右,超过了误差的范围,所以便开始对温度的误差进行调试;调试完成后,上电显示温度误差控制在1度以内。其次是对湿度的测量调试。
20、讲传感器红色线接电源,黑色线接地,黄色线接P11口,软件运行后调试,发现可以正常显示数字,但是数值是错误的,后来发现了传感器的0%RH100%RH对应的输出电压是03V,之后在把程序中的算法修改,最后可以正常显示,湿度值的误差在允许的范围内。接着是设计按键的模式。首先构思了每个按键的不同用途,接着在程序里面编写、调试;先是对温湿度上下限的设置问题,每个按键都有用到,可以自由设置,液晶上面也会有提示,在需要用到按键的显示界面用if语句来判断按键是否按下,若按下则进入下一步操作;开始可以进入修改页面 ,但是修改的值出现了点问题,经修改后 ,可以正常按键和显示。最多问题的就是存储模块的调试。最开始的
21、结果是显示的历史数据是乱码,把很多可能的情况都试过,发现还是不能存储,也去检查了硬件电路,发现没有问题,最后发现可能是按键模式设置的问题,便把所有按键用到的地方重新一步一步修改了,最后可以存储,并且可以显示存储的历史数据。5.2 性能分析本系统主要能够实现的功能有数据的实时采集、显示、报警、控制、存储、查询;测量的数据有:实时温度值和湿度值。本系统温度测温范围:0100,测温分辨率:0.01,电压范围:3.05.5V;湿度测量范围 20%90%RH,测量精度 5%RH,输出电压 03.0V,电源4.75V5.25V,使用温度 060。要求的报警是蜂鸣器和发光二极管,本系统还加了液晶屏显示报警,
22、并且可以显示超过温度的具体数值,可以用于区分开是温度超限还是湿度超限。温度值显示的分辨率为0.01,可以更准确。存储和历史查询都是正常的,本系统设置的是9秒存储一次数据,是为了方便采集,可以设置自己想要的存储间隔,例如十分钟,都是可以的,只需要改动计时中断里面cont的数值即可,一共可以存储8个2k的数据,本系统存储的是10组数据。6、 心得体会这次的课程设计任务其实还是挺重的,好在以前接触过AD转换的程序设计,所以在采集温度值和湿度值并显示到液晶上面这一部分还是比较容易上手的,虽然在调试和实现的过程中出现了很多问题,甚至看破眼睛也发现不到起问题的缘由,经常都是为了一个小问题在哪里修改并且上电
23、测试很久,都找不出原因。本来c语言的表达方式都比较多样,有时候就是因为语句的问题导致液晶显示出现乱码或者其他的问题。比如说本来可以用字符显示函数显示规定字数的汉字或者字符,但偶尔一个字就是会出现乱显示,开始以为是输入法的问题,但是改了很多种输入法过后任然有问题,最后发现把要出问题的字单独调用显示函数来显示就不会有问题了。存储的编写也是一个缓慢的过程,因之前没有接触过,所以程序的很多问题还不是很清楚,导致调试非常的复杂,每次送了数据后存储器都要有应答,不然会出错,导致存储器不能正常工作,之前按键是有设置标志位的,所以按键和标志位的模式编写不正确也会存储不上数据。本设计最先制作的就是硬件电路图,这
24、让我熟悉了protel 99 SE的用法,也熟悉单片机的内部结构,特别是之前没用过的存储器结构。对液晶屏的显示问题和AD转换,在这次设计中,我也完全熟练了,也了解了存储器AT24C02的使用方法和程序编写,比如它的起始命令、停止命令、应答命令都是固定的形式,只是需要存储的对象不同,我采用的是定时器计时存储数据的方法,比较简单。但是由于时间的不充足和对Labview的不熟练,这次的设计没能实现上位机和下位机的通信,之后有时间也会自己研究上位机的问题。参考文献1姚永平.STC12C5A60S2系列单片机器件手册OL.宏晶STC单片机官方网站.2011 2乐享电子.温湿度模块AM1001/AMT10
25、01产品手册OL . 广州乐享电子有限公司.20073王景景.单片机原理及应用 M.北京:机械工业出版社.2010.034张元良,王建军.智能仪表开发技术M.北京:机械工业出版社.2009.105蔡明生.电子设计M.北京:高等教育出版社.2004.6李东生.Protel 99SE电路设计教程M.北京:电子工业出版社.2007.17康华光.电子技术基础(模拟部分)M.北京:高等教育出版社.2006.09附录1 系统硬件电路图附录2 程序清单#include #define AddWr 0xa0 /器件地址选择及写标志#define AddRd 0xa1 /器件地址选择及读标志#define TH
26、CO 0x15 /11.0592MHZ晶振#define TLCO 0xa0 /60ms#define uchar unsigned char#define uint unsigned int#define N 10 /*LCD接口定义*/sbit SID = P06; /串行数据sbit SCLK = P07; /串行同步时钟sbit cs = P05; sbit PSB=P15;sbit mode=P20;sbit up=P21;sbit dn=P22;sbit en=P32;sbit Sda= P37; /串行数据sbit Scl= P36; /串行时钟sbit led1=P36;/存储
27、指示灯sbit p34=P34;sbit warm=P25;sbit wlight=P35;void change();void disp();void disp1();void disp2();void hchange();void tchange();void hs1();void hx1();void ts1();void tx1();void time0();void store();void history();/*汉字地址表*/uchar code addr_tab=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,/第一行汉字位置0x90,0x91,
28、0x92,0x93,0x94,0x95,0x96,0x97,/第二行汉字位置0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,/第三行汉字位置0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,/第四行汉字位置;unsigned long hout1=1315 ,1358 ,1401 ,1444 ,1487 ,1531 ,1575 ,1619 ,1663 ,1707 ,1751,1756 ,1776 ,1810 ,1852 ,1903 ,1958 ,2017 ,2079 ,2410 ,2204 ,2266, 2327 ,2386 ,24
29、44 ,2500 ,2554 ,2606 ,2657 ,2706 ,2753 ,2799 ,2844, 2888 ,2931 ,2974 ,3016 ,3057 ,3098 ,3138 ,3178 ,3217 ,3257 ,3295, 3334 ,3372 ,3409 ,3447 ,3483 ,3519 ,3555 ;uchar xdata add21=0x00,0x05,0x0a,0x0f,0x14,0x19,0x1e,0x23,0x28,0x2d,0x31,0x36,0x3b,0x40,0x45,0x4a,0x4f,0x54,0x59,0x5e,0x63;unsigned long cnt
30、,cnt2,x,j;t_flag=1;unsigned int flag=0,hx=5,hs=32,ts=60,tx=30;unsigned int jj=0,cun=0,cont=0;uchar xdata data_15,nn4,n4,mm4;uchar xdata data_25,data_35; /*延时子程序*/void delayms(uint t) uint i;while(t-) for(i=0;i=150)/6s存储一次 cont=0; store(); void hs1() if(hs40) hs=40; if(hs15) hx=15; if(hx80) ts=80; if
31、(ts39) tx=39; if(tx10) tx=10; if(up=0)delayms(250);if(up=0) tx=tx+1;if(dn=0)delayms(250);if(dn=0) tx=tx-1; /*A/D设置*/unsigned int AD(unsigned long j)unsigned long i;P1M1=0x00;P1M0=0x00;P1M1=P1M1|(1j);P1M0=P1M0|(1j); P1ASF=0x00|(1j); /选择 A/D 转换通道 ADC_CONTR=0xe0|j; /开 A/D 转换电源,选择AD速度 ADC_CONTR|=0x08; /
32、启动 A/D 转换 while(ADC_CONTR&0x10)=0); /等待 A/D 转换结束 ADC_CONTR&=0xE0; /将 ADC_FLAG 清 0 i=ADC_RES*256+ADC_RESL;return(i); /*平均滤波*/long d_data(unsigned int j)unsigned long new_dat=0,dat=0;unsigned int k;for(k=0;kN;k+)dat+=AD(j); /开启AD转换并选择通道new_dat=dat/N;return (new_dat);long hout()unsigned long dat,dat1,d
33、at2,dat3;uint max,min,mid;dat=d_data(0)*5000/1024;max=50;min=0; while(1)mid=(max+min)/2;if(dat=hout1mid)return mid*100;break ;if(max-min)=1)dat1=hout1max-hout1min;dat2=(hout1max-dat)*100;dat3=dat2/dat1;mid=(max*100-dat3);return mid;break;if(dathout1mid) max=mid;/小于mid取左边elsemin=mid;/*串行发送一个字节*/void
34、SendByte(uchar Dbyte) uchar i; cs=1; for(i=0;i8;i+) SCLK = 0; if(Dbytei)&0x80)SID=1;elseSID=0;SCLK = 1; SCLK = 0; cs=0;/*送指令*/void Lcd_WriteCmd(uchar Cbyte ) delayms(1);/延时 SendByte(0xf8); /11111,RW(0),RS(0),0 SendByte(0xf0&Cbyte); /高四位 SendByte(0xf0&(Cbyte4); /低四位(先执行)/*送数据*/void Lcd_WriteData(ucha
35、r Dbyte ) delayms(1); SendByte(0xfa); /11111,RW(0),RS(1),0 SendByte(0xf0&Dbyte); /高四位 SendByte(0xf0&(Dbyte4); /低四位(先执行0) Lcd_WriteData(*s); /写数据 s+; /*温度上限修改*/int hchanges()uchar k;for(k=0;k60;k+)Lcd_Init();hanzi_Disp(0,2,键up增大);hanzi_Disp(1,2,键dn减小);hanzi_Disp(2,2,键mode返回);while(1)uchar cc2;cc0=0x3
36、0+hs/10;cc1=0x30+hs%10;hanzi_Disp(3,1,上限:);Lcd_WriteData(cc0);Lcd_WriteData(cc1); hanzi_Disp(3,6,); hs1();delayms(5);if(mode=0)delayms(1);if(mode=0)change();flag=0; break; /*温度下限修改*/int hchangex()uchar k;for(k=0;k60;k+) Lcd_Init();hanzi_Disp(0,2,up键增大);hanzi_Disp(1,2,dn键减小);hanzi_Disp(2,2,键mode返回);w
37、hile(1)uchar bb2;bb0=0x30+hx/10;bb1=0x30+hx%10;hanzi_Disp(3,1,下限:);Lcd_WriteData(bb0);Lcd_WriteData(bb1); hanzi_Disp(3,6,); hx1();delayms(5);if(mode=0)delayms(1);if(mode=0)change();flag=0; break; /*湿度上限修改*/int tchanges()uchar k;for(k=0;k60;k+)Lcd_Init();hanzi_Disp(0,2,键up增大);hanzi_Disp(1,2,键dn减小);hanzi_Disp(2,2,键mode返回);while(1)uchar bb2;bb0=0x30+ts/10;bb1=0x30+ts%10;hanzi_Disp(3,1,上限:);Lcd_WriteData(bb0);Lcd_WriteData(bb1); hanzi_Disp(3,6,%RH); ts1();delayms(5);if(mode=0)delayms(1);if(mode=0) while(1)tchange();if(mode=0)delayms(1);if(mode=0)change();flag=0; break; /*湿度下限修改*/int tchangex()
限制150内