基于AT89C52单片机的高精度家用空调温度控制系统设计_第1页
基于AT89C52单片机的高精度家用空调温度控制系统设计_第2页
基于AT89C52单片机的高精度家用空调温度控制系统设计_第3页
基于AT89C52单片机的高精度家用空调温度控制系统设计_第4页
基于AT89C52单片机的高精度家用空调温度控制系统设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

基于AT89C52单片机的高精度家用空调温度控制系统设计接口技术课程设计报告基于单片机的空调温度控制器设计设计了基于AT89C52的高精度家用空调温度控制系统,系统硬件主要由电源电路.温度采集电路(DS18B20).键盘.显示电路.输出控制电路及其他辅助电路组成;软件采用8051C语言编程;该系统可以完成温度的显示.温度的设定、空调的控制等多项功能。关键词:单片机;DS18B20;温度检测;显示目录目录1设计目的及要求1.1设计目的和意义1.1设计目的和意义21・2设计任务与要求22硬件电路设计 TOC\o"1-5"\h\z2・1总体方案设计 22.2功能模块电路设计 32.2.1单片机的选型2.2.2振荡电路设计223复位电路设计2.2.4键盘接口电路设计 62.2.5温度测量电路设计2.2.5温度测量电路设计2.2.6系统显示电路设计 72.2.7输出控制电路设计2.2.7输出控制电路设计2.3总电路设计3软件系统设计 92.43软件系统设计 9TOC\o"1-5"\h\z3.1软件系统总体方案设计 10103.2软件流程图设计10\o"CurrentDocument"4系统调试 11\o"CurrentDocument"5总结 14\o"CurrentDocument"5.1本系统存在的问题及改进措施 14\o"CurrentDocument"参考文献 15\o"CurrentDocument"附录1:系统的源程序清单 16附录2:系统的PCB图 41#1设计目的及要求1.1设计目的和意义21世纪的人们生活质量不断提高,同时也对高科技电子产业提出了更高的要求,为了使人们生活更人性化、智能化。我设计了这一基于单片机的空调温度控制系统,人们只有生活在一定的温度环境内才能长期感觉舒服,才能保证不中暑不受冻,所以对室内温度要求要高。对于不同地区空调要求不同,有的需要升温,有的需要降温。一般都要维持在21-26°Co目前,虽然我国大量生产空调制冷产品,但由于我国人口众多,需求量过盛,在我国的北方地区,还有好多家庭还没有安装有效地室内温控系统。温度不能很好的控制在一定的范围内,夏天室内温度过高,冬天温度过低,这些均对人们正常生活带来不利的影响,温度、湿度均达不到人们的要求。以前温度控制主要利用机械通风设备进行室内、外空气的交换来达到降低室内温度,实现室内温度适宜人们生活。以前通风设备的开启和关停,均是由人手动控制的,即由人们定时査看室内外的温度、湿度情况,按要求开关通风设备,这样人们的劳动强度大,可靠性差,而且消耗人们体力,劳累成本过高。为此,需要有一种符合机械温控要求的低成本的控制器,在温差和湿度超过用户设定值范围时,启动制冷通风设备,否则自动关闭制冷通风设备。鉴于目前大多数制冷设备现在状况,我设计了一款基于MCS51单片机的空调温度控制系统。1.2设计任务与要求系统要求利用单片机设计一空调温度控制器,能够实时检测并显示室温,能够利用键盘设定温度,并且和室温进行比较,当室温低于设定温度时,系统能够驱动加热系统工作,当室温高于设定温度时,系统能够驱动制冷系统工作,当两者温度相等时,不做动作。2硬件电路设计2.1总体方案设计空调温度控制系统,主要要完成对温度的采集、显示以及设定等工作,从而实现对空调的控制。传统釆用钳电阻充当测温器件的方案,虽然其中段测量线性度好,精度较高,但是测量电路的设计难度高,且测量电路系统庞大,难于调试,而且成本相对较高。鉴于上述原因,本系统采用DS18B20充当测温器件。外部温度信号经DS18B20将输入的模拟信号转换成8位的数字信号,通过并口传送到单片机系统(AT89C52)。单片机系统将接收的数字信号译码处理,通过LCD1602将温度显示出来,同时单片机系统还将完成键盘扫描、按键温度设定、超温报警等程序的处理,将处理的温度信号与系统设定温度值比较,形成可以控制空调制冷、制热与停止工作三种工作状态,从而实现空调的智能化。另外,键盘输入方面,釆用了软件来修正误操作输入,即输入的温度范围必须在系统硬件所确定的范围内,直接降低由于误操作带来的风险,提高了系统的可靠性,体现了人性化的系统设计原则。系统的整体框图如图1所示:图1系统整体框图2.2功能模块电路设计2.2.1单片机的选型由于本系统只需要单片机完成矩阵键盘检测以及处理DS18B20送来的温度数据并送LCD1602进行显示对于I/O资源以及处理速度无特殊要求,故选择ATMEL公司生产的AT89C52单片机,AT89C52增加了在线调试功能,即程序可以通过JTAG接口下载,调试和固化,因而该芯片的开发不再需要昂贵的硬件仿真器,可实现实时仿真,所有的资源都可以为用户所使用,可以在线编程或在系统编程,更进一步地说,在线编程或在系统编程是开发的系统具有了通过网络进行升级、维护的潜在功能。AT89C52的性能及特点⑴:•与MCS-51系列单片机兼容。•片内有8K可在线重复编程的快速内存可擦写存储器(FlashMemory)。•存储器可循环写入/擦写10000次以上。•存储器数据保存时间为10年以上。宽工作电压范围:Vcc可为2.7V.6.5V。•全静态工作:可从0Hz・24MHz。•程序存储器具有三级加密保护。256字节的内部RAMo32条可编程I/O口线。•三个16位定时器/计数器。•中断结构具有5级(6级)中断源和两个优下级。可编程全双工串行通讯。•空闲维持低功耗和掉电状态保护存储数据。AT89C52引脚图如图2所示。vccDO页D2D3D4D5D61D7RSTP3.0pTTpT2pHpieXTAL218XTAL119•'IDO页D2D3D4D5D61D7RSTP3.0pTTpT2pHpieXTAL218XTAL119•'IP10VCCP11POOP12P01P13P02P14P03P15P04P16P05P17P06RESETP07P30RXDP20P31/TXDP21P32:INT0P22P33/INT1P23P34丿TOP24P35/T1P25WR/P36P26RDP37P27PSENX2ALE/PRDGXIGNDEA」VPP4061020些 RS丟LCDEN13 DOU135^§7cold^8wami .301图2AT89C52引脚图VCC:+5V电源输入GND:接地PO口是一个双向8位三态I/O口,每个口可独立控制。使用时需外接上拉电阻。P1口是一个准双向8位I/O口,它的功能是单一的,只能用作数据的输入或者输出。P2口是一个准双向8firI/O口,输出时,从P2.X端口可输出CPU写到锁存器上的信号。当该接口用做数据输入接口是,应先向该位写1,然后,读该位即可读入输入数据。P3口是具有第二功能的准双向8位I/O口。ALE/PROG:地址所存/编程信号线。当P0口工作在第二功能时从该端口可复用工作,某时刻该端口可以送出地址信号A0-A7,而另外的时刻该端口传送的是数据信号D0~D7。利用ALE可以将地址信号A0~A7锁存到地址锁存器。

EAAPP:该控制信号线也具有双重功能,是允许访问片外ROM/编程高电压引线。PS™:程序存储器允许输出控制端,常用作片外ROM的读控制信号,低电平有效。RESET:复位引脚,当该端加上超过24个时钟周期的高电平时,可是8051复位。系统复位电路如图2・3所示。XI、X2:外接时钟引脚。XI为片内振荡电路的输入端,X2为片内振荡电路的输出端。2.2.2振荡电路设计AT89C52内部有一个用于构成片内振荡器的高增益反相放大器,振荡器产生的信号送到CPU,作为CPU的时钟信号,驱动CPU产生执行指令功能的机器周期。引脚XTAL1和XTAL2是此放大器的输人端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器,振荡电路的连接如图所示图8所示,外接石英晶体或陶瓷谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容C1和C2的值虽然没有严格的要求,但电容的大小多少会影响振荡器频率的高低.振荡器的稳定性.起振圈内部振荡的接法的快速性和温度稳定性。外接石英晶体时,C1和C2—般取(40pF・10pF),外接的是石英晶体,所以,Cl、C2选择标称值30pF。系统振荡电路如图3所示。XTAL2C01XTAL230pFI□Y1C02 、30pFC02 、30pFXTAL1图3振荡电路2.2.3复位电路设计单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。89系列单片机的复位信号是从RST引脚输人到芯片的施密特触发器中的。当

系统处于正常工作状态时,且振荡器稳定后,如果RST引脚有一个高电平并维持2个机器周期(24个振荡周期),则CPU就可响应并且将系统复位。复位分为手动复位和上电复位。本设计系统采用的是上电自动复位。系统复位电路如图4所示。VCC图4复位电路2.2.4键盘接口电路设计独立键盘与单片机连接时,每个按键都需要单片机的一个I/O口,若单片机系统需要较多按键,如果用独立按键会占用过多的I/O口资源。单片机系统中I/O口资源往往比较宝贵,当用到多个按键时,为了节省I/O口线,一般需使用矩阵键盘。本系统共需图5键盘接口电路2.2.5温度测量电路设计本系统的温度测量电路采用DS18B20来实现。DS18B20是美国DALLAS半导

体公司推出的第一片采用“一线总线”接口的温度传感器,它具有微型化.低功耗.IIIK高性能.抗干扰、能力强.易配微处理器等优点,可直接将温度转化成串行数字信IIIK号供处理器处理。DS18B20的性能及特点1叫•适应电压范围宽,电压范围在3.0~5.5V,在寄生电源方式下可由数据线供电。•独特的单线接口方式,它与微处理器连接时仅需一条口线即可实现微处理器与DS18B20的双向通信。•支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。•在使用中不需要任何外接元件,全部传感元件及转换电路集成在形如一只三极管的集成电路里。•测温范围・559〜+1259,在・10・C~+85°C时精度为±0.59。•可编程分辨率为9~12位,对应的可分辨温度分别为0.5BC,0.25-C,0.125#C和0.0625-C,可实现高精度测温。•在9位分辨率时,最多在93.75ms内把温度转换为数字;12位分辨率时,最多在750ms内把温度值转换为数字。•测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。•负压特性。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。系统温度测量电路如图6所示。GNDI/OVDDU2GNDI/OVDDDQ23厂VCCDS18B20图6温度测量电路2.2.6系统显示电路设计本系统采用LCD1602作为系统的显示器件,1602字符型液晶是一种专门用来显示字母、数字、符号等的点阵型液晶模块,能分两行显示,它有若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符。1602型液晶接口信号如下:1脚Vss:电源地。2脚Vdd:电源正极。3脚VO:液晶显示对比度调节端。4脚RS:数据/命令选择端(H/L)。5脚R/W:读写选择端(H/L)。6脚E:使能信号。7~14脚DO〜D7:数据口。15脚BL1:背光电源正极。16脚BL2:背光电源负极。系统显示电路如图7所示。P1图7系统显不电路2.2.7输出控制电路设计系统要求在当前室温低于设定温度时,能够自动驱动加热系统工作;在当前室温高于设定温度时能够自动驱动制冷系统工作。本系统在复位后即置P2F脚和P2W脚为低电平,在当前室温低于设定温度时,通过置P2V脚为高电平来驱动后级加热系统,本系统采用红色LED来代替加热系统;在当前室温高于设定温度时,通过置P2F脚高电平来驱动后级制冷系统,本系统采用蓝色LED来代替制冷系统。输出控制电路如图8所示。DLcoldR1——10艮10KcoldR1——10艮10KI-I-2.3总电路设计图2.3总电路设计图8输出控制电路系统总电路图如图9所示。P3QA3.1HlCOl可.4P35•卜RAL230j>FC02彳pXTALl30pFELZ18,XTAL119.PIOPllP12P13D14P15P16P17RESZTP30.RXDF31.THDPSlfNTCP334NTIP34.T0P35.T1空审6防P57X2XIJilJ.CDEXNXglCIMV220P3QA3.1HlCOl可.4P35•卜RAL230j>FC02彳pXTALl30pFELZ18,XTAL119.PIOPllP12P13D14P15P16P17RESZTP30.RXDF31.THDPSlfNTCP334NTIP34.T0P35.T1空审6防P57X2XIJilJ.CDEXNXglCIMV220GNDP3.4P3.3P352AV?P30P3.7GXD00GXDLOVDDLVCCDS13B2C<oB [10K'•xisi~JWf_*—5W—I图9系统总电路图2.4系统所用元器件本系统所用的元器件清单如表1所示。

表1系统所用元器件元器件名称数量点触式开关1630pF瓷片电容210uF电解电容1蓝色LED1红色RED15V电源插座1自锁开关1LCD160211/4W10K电阻310K可调电阻1AT89C521DS18B20112MHz晶振13软件系统设计3.1软件系统总体方案设计系统软件由主程序模块、测温程序模块、键盘扫描程序模块以及液晶驱动程序模块组成。3.2软件流程图设计系统软件流程图如图10所示。

图10系统软件流程图4系统调试程序在KeiluVision4环境下编写,编译通过后生成.hex文件加载到Protuse下可正常运行。程序默认温度为21.0-C,Protuse下设定DS18B20的温度也为21.O0故开始运行时两路LED灯都不点亮。当利用键盘设定的温度高于DS18B20默认的21.09时,红色LED灯被点亮;当设定的温度低于DS18B20默认的2UTC时,蓝色LED灯被点亮。当设定的温度高于DS18B20默认的21.09时,红色LED灯被点亮,如图11所示。fi?S1f~-lAS2!~~1A£?S3m•.•S4r~iaP3.4&工p-O0p-OGp—O G S5iiaS6ii«.S7i1aS8i1亀P2.6&工^-O 0 |^—OGr-―0 C»——S9SUPSDOWNSCLEAR.-<Lp-OCh-=—P3.8SDKi—iaS0SPOINT»—i4»SSETP27./-o 0-^—£^-O^-oC230uFU74-C3勿uFRESR110kDOOTTyZD304

05

匹D?"?■>XTAL1PO.O/ADOPC.1/AD1P0.2/AHXTAL2P0.3/AD3PC.4/AIXP0.5/AD5PO.Q/ADOR$TP0.7/AD7P2g:P2.1WP2.2/A10PSENP2.3A11址P2.4/A12EAPZ.O/AiUP2.6/A14P2.7XA15P1.0H2P3.0/RXDP1.17T2ECP3.1/TXDP1.2P3.2/IN1DP1.3P3.3/INT1Pl.4P3.4/TOP1.5P2.6/T1P1.6P3.6/yi®P1.7P3.7fRD■21R$.■2310AT8心229■30"21・■39"38«37«36»35-34切-32UATIwcDQGUD• •D318B20■24■16Pj.6■17P3.7图11红色LED灯点亮当设定的温度低于DS18B20默认的21.09时,蓝色LED灯被点亮。如图12所示。C220uFU710C3

30uFZD——'代_X_2_LCDRV2\f&■寸二n■eg11mC1IDjFRESDO0?02D3D4D5D6D7•XT/U1PO.OfALUP0.HAD1P0.2CADZXTA12P0.3fA£GF0.46AD4PO.CfAMP0.8f££6RSTPDRAD7P23跆P2P2.2W0P$ENP2.SW1ALEP2.4W2EAP2.5W3P2.6W4P2.7/AJ5P1.0IT2R3.0/RXOPl.lfTZEKP0.1ZD<DPl.2P3Z1NIDP1.3PS.S/INHP1.4P34T0P1.5P35/T1P1.6P3.6AARP1.7P3.7/RDC5229-TF■?Q■373■32Ul■22LCOBC■23%■24・Z5•20oold■20uam■RSD1vccDQGND• •LEDDLUED2门切12P2212P3314?3415_P35P3JP37LEDRO图12蓝色LED灯点亮5总结5.1本系统存在的问题及改进措施本系统所设计的空调温度控制器仅对温度部分实现了控制,但对于实际空调中的模式选择以及定时运行等工作过程还无法实现,希望在以后的学习研究中能够解决这些问题。5.2心得体会本次课程设计从获得题目开始便着手准备,首先分析系统要求,在Protuse里完成硬件原理图的搭建,然后开始在Keil环境下着手编写各部分程序,调试相应的程序,在调试通过后再下载到Protuse里进行仿真,发现问题后再返回Keil下修改相应程序,直到最后仿真通过,最后在AltiumDesigner6中画出电路原理图。在本次课程设计过程中得到了老师以及许多同学的帮助,感谢那些提供过帮助的老师和同学。参考文献郭文川主编.单片机原理与接口技术.北京:中国农业出版社,2007.郭天祥主编.51单片机C语言教程•北京:电子工业出版社,2009.附录1:系统的源程序清单globaLh:ifndef_global_H#define_global_H#include<reg52>h>#(lefineucharunsignedchar//宏定义#defineuintunsignedint#deflneK_UP0X20〃定义键值#defineK_DOWN0X21#defineK_CLEAR0X24#defineK_OK0X25#deflneK_ONE0X30#defineK_FOUR0X31#defineK_SEVEN0X32#defineK_POINT0X33#deflneK_TWO0X34#defineK_FIVE0X43#defineK_EIGHT0X36#defineK_ZERO0X37#deflneK_THREE0X38#defineK_SIX0X40#defineK_NINE0X41#defineKSET0X42externfloatTEMP_NOVV;externfloatTEMP_SET;externuintexternuintexternuintexternuintexternuintT_Count;S_Count;P^Count;N_Count;M_Count;externucharCurrent_Temp_Display_Buffer[];externucharset_Temp_Display_Buffer[];externintsei;sbitlcden=P2Al;//液晶使能sbitlcdrs=P2A0;//液晶数据/命令选择端sbitDQ =P2A2;//DS18B20数据端sbitXX =P2F;〃读写选择端sbitcold=P2人6;//输出信号sbitwarm=P2^7;〃输出信号#endifmain>c:#include<reg52.h>#includenglobal.h"#include”key.h"include"18B20.hn#lnclude,,LCD.hn////////////////////全局变量/////////////////////////////OoatTEMP_NOVV=0.0;floatTEMP_SET=21.0;HintT_Count=0;HintS_Count=0;HintP_Count=0;HintN_Count=0;HintM_Count=l;ucharCuirent_Temp_Display_BuFfer[]=r' NOW:-23.5 f,};ucharset_Temp_Display_Buffer[]= SET:21.0intsel=0;voidComparison();//////////////////////定时///////////////////////////////voidtimerO_init(void){TMOD= 0x00;〃设置定时器0的工作方式THO=(8192・5000)/32;〃单片机晶振为12MHz,机器周期为lus,t=5ms,//N=5000/l=5000TLO=(8192-5000)%32;IE=0x82;TRO=1;}voidtimerO()Interrupt1{THO=(8192-5000)/32;TL0=(8192-5000)%32;if(++T_Count==100) //////100为0.5s{TR0=0;Read_Temperature();Display_Temperature();T_Count=0;if(++P_Count==6){N_Count=l;}TR0=l;}}////////////////////主程序///////////////////////////////voidmain(){init」cd();Init_DS18B20();timerO_init();while(l){Print();set_num();Comparison();voidComparison()if(N_Count&&M_Count){if(TEMP_NOVV<TEMP_SET){warm=l;cold=0;}if(TEMP_NOVV>TEMP_SET){cold=l;warm=0;}if(TEMP_NOVV==TEMP_SET){cold=0;warm=0;18B20±:#ifndef_18B20_H#deflne_18B20_H#include”global.h"externucharInit_DS18B20();externvoidRead_Temperature();externvoidDisplay_Temperature();#endif18B20.C:#includeV9globaLhv>#includet,intrins.h,t#deflnedelayNOP(){_nop_();_nop_();_nop_();_nop_();}ucharcodeTemperature_Char[8]={OxOc.Ox12,0x12,0x0c,0x00,0x00,OxOO,OxOO};ucharcodedf_Table[]={0,1J,233 5,6,6,7^8,8^9,9};ucharCurrentT=0;ucharTemp_Value[]={0x00,0x00};ucharDisplay_Digit[]={0,0,0,0};bitDS18B20_IS_OK=1;voidDelay_INI(uintx){whlle(-x);}voidDelay(unslgnedintn){do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();n-;}whlle(n);ucharInit_DS18B20()ucharstatus;DQ=1;Delay_INI(8);DQ=O;Delay_INI(90);DQ=1;Delay_INI(8);status=DQ;Delay_INI(100);DQ=1;returnstatus;ucharReadOneByte(){uchari,dat=O;DQ=1;_nop_();for(i=0;i<8;i++){DQ=0;dat»=1;DQ=1;_nop_();_nop_();if(DQ)dat1=0X80;Delay(30);DQ=1;}returndat;voidWriteOneByte(uchardat)uchari;for(i=0;i<8;i++){DQ=O;DQ=dat&0x01;Delay(5);DQ=1;dat»=1;}}voidRead_Temperature(){if(Inlt_DS18B20()==l)DS18B20_IS_OK=0;else{WriteOneByte(Oxcc);WriteOneByte(Ox44);Init_DS18B20();VVriteOneByte(Oxcc);WriteOneByte(Oxbe);Temp_Value[0]=ReadOneByte();Temp_Value[l]=ReadOneByte();DS18B20_IS_OK=1;}}voidDisplay_Temperature(){uchart=150,ng=0;if((Temp_Value[l]&0xf8)==0xf8)Temp_Value[l]=-Temp_Value[l];Temp_Value[0]=-Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;Display_Digit[O]=df_Table[Temp_Value[O]&0xOf];CurrentT=((Temp_Value[O]&0xf0)>>4)I((Temp_Value[l]&0x07)vv4);Display_Dlgit[3]=CurrentT/100;Display_Dlgit[2]=CurrentT%100/10;Display_Digit[l]=CurrentT%10;Current_Temp_Display_Buffer[11]=Display_Dlgit[O]+'O';Current_Temp_Display_Buffer[10]=Current_Temp_Display_Buffer[9]=Dlsplay_Digit[l]+'O1;Current_Temp_Display_Buffer[8]=Display_Digit[2]+'O1;Current_Temp_Display_Buffer[7]=Display_Digit[3]+'O1;TEMP_NOW=Display_Diglt[2]*10+Display_Digit[l]+Display_Digit[0]*0.1;if(Display_Digit[3]==0)Current_Temp_Display_BufTer[7]=1f;if(Display_Digit[2]==0&&Dlsplay_Digit[3]==0)Current_Temp_Display_Biiffer[8]=1f;if(ng){TEMP_NOVV=-(Display_Digit[2]*10+Display_Digit[l]+Display_Digit[0]*0.1);if(Current_Temp_Display_Buffer[8]==1')Current_Temp_Display_Buffer[8]=elseif(Current_Temp_Display_Buffer[7]==1')Current_Temp_Display_Buffer[7]=elseCurrent_Temp_Display_Buffer[6]=';KEY.h:#ifndefKEYH#(Ieflne_KEY_H#include<global.h>externunsignedcharKeys_Scan();externvoidset_num();externvoidset();#endifKEY.c:#include<reg52.h>#include<lntrins.h>#include<global.h>include"18B20.hnucharcodeKeyCodeTable[]=Oxll,0x12,0x14,0xl8,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88voidDelay_key()uchari;for(i=0;i<200;i++);ucharKeys_Scan(){ucharsCode^kCode^k;P3=OxfO;if((P3&0xf0)!=0xf0){Delay_key();if((P3&0xf0)!=0xf0)sCode=Oxfe;for(k=0;k<4;k++){P3=sCode;if((P3&OxfO)!=OxfO){kCode=〜P3;if(kCode==KeyCodeTable[0])returnK_ONE;elseif(kCode==KeyCodeTable[l])returnK_TWO;elseif(kCode==KeyCodeTable[2])returnK_THREE;elseif(kCode==KeyCodeTable[3])returnK_FOUR;elseif(kCode==KeyCodeTable[4])returnK_FIVE;elseif(kCode==KeyCodeTable[5])returnK_SIX;elseif(kCode==KeyCodeTable[6])returnK_SEVEN;elseif(kCode==KeyCodeTable[7])returnK_EIGHT;elseif(kCode==KeyCodeTable[8])returnK_NINE;elseif(kCode==KeyCodeTable[9])returnK_UP;elseif(kCode==KeyCodeTable[10])returnK_DOWN;elseif(kCode==KeyCodeTable[ll])returnK_CLEAR;elseif(kCode==KeyCodeTable[12])returnK_OK;elseif(kCode==KeyCodeTable[13])returnK_ZERO;elseif(kCode==KeyCodeTable[14])returnK_POINT;elseif(kCode==KeyCodeTable[15])returnK_SET;}elsesCode=_crol_(sCodeJ);return-1;}voidset_num()ucharkey;if(sel=O)key=Keys_Scan();if(K_CLEAR==key){whlle(Keys_Scan()==K_CLEAR);set_Temp_Display_Biiffer[8]=fset_Temp_Display-Buffer[9]=ff;set_Temp_Dlsplay_BufTer[10]=tset_Temp_Display_BufTer[11 ;//48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)M_Count=0;cold=0;warm=0;}if(K_UP==key){whlle(Keys_Scan()==K_UP);if((set_Temp_Display_Buffer[ll]>47)&&(set_Temp_Display_Buffer[ll]<57)){set_Temp_Display_Buffer[11]+=1;}elseif(set_Temp_Display_Buffer[ll]==57){set_Temp_Display_Buffer[ll]=48;if((set_Temp_Display_Buffer[9]>47)&&(set_Temp_Display_Buffer[9]v57)){set_Temp_Display_Buffer[9]+=1;}elseif(set_Temp_Display_Buffer[9]==57){set_Temp_Display_Buffer[9]=48;if((set_Temp_Display_Buffer[8]>47)&&(set_Temp_Display_Buffer[8]v57))set_Temp_Display_Buffer[8]+=1;}elseif(set_Temp_Displav_Buffer[8]==57){set_Temp_Display_Buffer[8]=48;}}}}if(K_DOWN==key) //48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9){while(Keys_Scan()==K_DOVVN);if((set_Temp_Display_Buffer[ll]>48)&&(set_Temp_Display_Buffer[ll]v58)){set_Temp_Display_Buffer[11]-=1;}elseif(set_Temp_Display_Buffer[ll]==48){set_Temp_Display_Buffer[11]=57;if((set_Temp_Display_Buffer[9]>48)&&(set_Temp_Display_Buffer[9]<58)){set_Temp_Display_Buffer[9]-=l;}elseif(set_Temp_Display_Buffer[9]==48){set_Temp_Display_Buffer[9]=57;if((set_Temp_Display_Buffer[8]>48)&&(set_Temp_Display_Buffer[8]<58))set_Temp_Display_Buffer[8]-=1;elseif(set_Temp_Display_Buffer[8]==48){set_Temp_Display_Buffer[8]=57;iF(K_ONE==key){whlle(Keys_Scan()==K_ONE);set_Temp_Display_Buffer[11]=T;sel++;}if(K_TVVO==key){while(Keys_Scan()==K_TVVO);set_Temp_Display-Buffer[ll]=t2t;sel++;}if(K_THREE==key){whlle(Keys_Scan()==K_THREE);set_Temp_Display_Buffer[ll]=,3,;sel++;}if(K_FOUR==key){while(Keys_Scan()==K_FOUR);set_Temp_Display-BufTer[ll]=t4,;sel++;if(K_FIVE==key){while(Keys_Scan()==K_FIVE);set_Temp_Display-BufTer[ll]=,5t;sel++;}if(K_SIX==key){whlle(Keys_Scan()==K_SIX);set_Temp_Display_Buffer[ll]=,6t;sel++;}if(K_SEVEN==key){while(Keys_Scan()==K_SEVEN);set_Temp_Display-Buffer[ll]=t7,;sel++;}if(K_EIGHT==key){while(Keys_Scan()==K_EIGHT);set_Temp_Display_Buffer[ll]=t8t;sel++;}if(K_NINE==key){while(Keys_Scan()==K_NINE);set_Temp_Display-BufTer[ll]=t9,;sel++;}if(K_ZERO==key){whlle(Keys_Scan()==K_ZERO);set_Temp_Display_Buffer[ll]=tOt;sel++;if(K_OK==key){whlle(Keys_Scan()==K_OK);TEMP_SET=(set_Temp_Display_Buffer[8]-48)*10+(set_Temp_Display_Buffer[9]-48)+(set_Temp_Display_Buffer[ll]-48)*0.1;sel=O;M_Count=l;}}if(sel==l){key=Keys_Scan();if(K_CLEAR==key){whlle(Keys_Scan()==K_CLEAR);set_Temp_Display_Biiffer[8]=fset_Temp_Display-Buffer[9]=ff;set_Temp_Dlsplay_BufTer[10]=tset_Temp_Display_BufTer[11 ;M_Count=0;cold=0;warm=O;sel=O;}if(K_ONE==key){whlle(Keys_Scan()==K_ONE);set_Temp_Display_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=fr;sel++;if(K_TVVO==key)while(Keys_Scan()==K_TVVO);set_Temp_Display-Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Dlsplay_BufTer[ll]=f2f;sel++;}if(K_THREE==key){whlle(Keys_Scan()==K_THREE);set_Temp_Display_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=,3t;sel++;}if(K_FOUR==key){while(Keys_Scan()==K_FOUR);set_Temp_Display_Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Biiffer[11 ;sel++;}if(K_FIVE==key){while(Keys_Scan()==K_FIVE);set_Temp_Dlsplay_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=t5t;sel++;}if(K_SIX==key){while(Keys_Scan()==K_SIX);set_Temp_Display-Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Dlsplay_BufTer[11]='6‘;sel++;if(K_SEVEN==key)while(Keys_Scan()==K_SEVEN);set_Temp_Dlsplay_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=t7t;sel++;}if(K_EIGHT==key){while(Keys_Scan()==K_EIGHT);set_Temp_Display-Buffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Dlsplay_BufTer[11]=,8,;sel++;}if(K_NINE==key){whlle(Keys_Scan()==K_NINE);set_Temp_Display_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=t9t;sel++;}if(K_ZERO==key){while(Keys_Scan()==K_ZERO);set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_BufTer[ll]=,Ot;sel++;}}if(sel==2)key=Keys_Scan();if(K_CLEAR==key)whlle(Keys_Scan()==K_CLEAR);set_Temp_Display_Biiffer[8]=fset_Temp_Display-Buffer[9]=ff;set_Temp_Dlsplay_BufTer[10]=tset_Temp_Display_BufTer[11 ;M_Count=0;cold=0;warm=O;sel=O;}if(K_POINT==key){whlle(Keys_Scan()==K_POINT);set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10];set_Temp_Display-Buffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Dlsplay_BufTer[11]=\f;sel++;}}if(sel==3){key=Keys_Scan();if(K_CLEAR==key){whlle(Keys_Scan()==K_CLEAR);set_Temp_Display_Biiffer[8]=fset_Temp_Display-Buffer[9]=ff;set_Temp_Dlsplay_BufTer[10]=tset_Temp_Display_BufTer[11 ;M_Count=0;cold=0;warm=O;sel=O;if(K_ONE==key)while(Keys_Scan()==K_ONE);set_Temp_Dlsplay_BufTer[8]=set_Temp_Display_Buffer[9];set_Temp_Display_Biiffer[9]=set_Temp_Display_Buffer[10];set_Temp_Display_Buffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Biiffer[ll]=fr;sel++;}if(K_TVVO==key){while(Keys_Scan()==K_TVVO);set_Temp_Display_Biiffer[8]=set_Temp_Display_Buffer[9];set_Temp_Display_Buffer[9]=set_Temp_Display_Buffer[10];set_Temp_Display-Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Dlsplay_BufTer[ll]=f2f;sel++;}if(K_THREE==key){whlle(Keys_Scan()==K_THREE);set_Temp_Display_Biiffer[8]=set_Temp_Display_Buffer[9];set_Temp_Display-BiifTer[9]=set_Temp_Display_Buffer[10];set_Temp_Dlsplay_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=,3,;sel++;}if(K_FOUR==key){while(Keys_Scan()==K_FOUR);set_Temp_Display-Biiffer[8]=set_Tenip_Display_Buffer[9];set_Temp_Dlsplay_BufTer[9]=set_Temp_Display_Buffer[10];set_Temp_Display_Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Dlsplay_BufTer[11]='4‘;sel++;}if(K_FIVE==key){whlle(Keys_Scan()==K_FIVE);set_Temp_Display_Biiffer[8]=set_Temp_Display_Buffer[9];set_Temp_Display-Biiffer[9]=set_Tenip_Display_Buffer[10];set_Temp_Dlsplay_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=t5t;sel++;}if(K_SIX==key){while(Keys_Scan()==K_SIX);set_Temp_Display-Biiffer[8]=set_Tenip_Display_Buffer[9];set_Temp_Dlsplay_BufTer[9]=set_Temp_Display_Buffer[10];set_Temp_Display_Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_BufTer[ll]=t6t;sel++;}if(K_SEVEN==key)while(Keys_Scan()==K_SEVEN);set_Temp_Dlsplay_BufTer[8]=set_Temp_Display_Buffer[9];set_Teinp_Display_Buffer[9]=set_Temp_Display_Buffer[10];set_Temp_Display_BufTer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_Buffer[ll]=t7l;sel++;}if(K_EIGHT==key)while(Keys_Scan()==K_EIGHT);set_Temp_Dlsplay_Buffer[8]=set_Temp_Display_Buffer[9];set_Temp_Dlsplay_BufTer[9]=set_Temp_Display_Buffer[10];set_Temp_Display_Biiffer[10]=set_Temp_Display_Buffer[ll];set_Temp_Display_BufTer[ll]=,8t

温馨提示

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

评论

0/150

提交评论