基于单片机控制空气能热水器系统设计毕业设计论文说明书_第1页
基于单片机控制空气能热水器系统设计毕业设计论文说明书_第2页
基于单片机控制空气能热水器系统设计毕业设计论文说明书_第3页
基于单片机控制空气能热水器系统设计毕业设计论文说明书_第4页
基于单片机控制空气能热水器系统设计毕业设计论文说明书_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、编号: 毕业设计说明书题 目 基于单片机控制空气 能热水器系统设计 学 院: 信息与通信学院 专 业: 电子信息工程 学生姓名: 陈圣盟 学 号: 0901120425 指导教师: 胡机秀 职 称: 工程师 题目类型: 理论研究 实验研究 工程设计 工程技术研究 软件开发2013年6月5日摘 要本设计基于单片机控制空气能热水器系统设计,其研究的意义是空气能热水器通过介质交换热量进行加热,不需要电加热元件与水接触,所以没有漏电的危险,它也消除了中毒和爆炸的隐患,更不会因为排放废气造成空气污染,节约能源,提高能源的综合利用,为人民提供一套平安、节能、环保、廉价和可靠的新一代热水器空气能热水器。系统

2、主要采用AT89S52单片机作为空气能热水系统设计控制核心。控制局部主要是以单片机STC89C52RC为控制核心,硬件数据采集局部由DS18B20三路单总线传感器,对水温、压缩机排气温度、外机热交换进行温度采集,人机交互局部并将测试结果通过RS232接口发送至计算机进行显示。软件局部应用单片机C语言实现了本设计的全部控制功能。本设计实现的功能有水位低于最低水位时加水泵开始工作,对保温水箱加水,加满水之后,如果热水的温度低于设置的温度的下限时,压缩机、循环水泵、外机风扇开始工作,模拟吸收空气中的热量,放到保温水箱中,到达设置的温度上限时停止。在压缩机的排气温度大于110时,为保护压缩机被高温烧坏

3、,压缩机停止工作。通过MaxRC232通信把下位机温度数据,各个部件运行状态发送到上位机计算机显示,现实人机交换的显示界面。关键词:空气能;单片机;传感器;通信AbstractThis design based on single chip microcomputer control air sources water heater system design. Air source water heater is the significance of the research through the exchange of heat for heating medium.dont need

4、 electric heating element contact with water. So there is no risk of leakage also. It also eliminates the hidden trouble. Poisoning and explosion will not air pollution caused by the discharge of waste gas. Save energy improve the comprehensive utilization of energy to provide a secure, energy savin

5、g, environmental protection, cheap and reliable of a new generation of water heaters - air sources water heater.System mainly adopts the AT89S52 single chip microcomputer as control core air sources hot water system design. Control part mainly based on microcontroller STC89C52 as the control core. T

6、he hardware of data acquisition part by DS18B20 single bus no 3 sensor of water temperature.Discharge temperature of compressor.Machine heat transfertemperatur acquisition.The human-computer interaction part and the test results sent via RS232 interface to computer for display. Software part of the

7、application Microcontroller C language realize the control function of the designThis design features water level is lower than the minimum water level when the pump starts to work. The heat preservation water tank and water, filled with water.If the temperature of the hot water is below the set tem

8、perature of the lower limit. Compressor circulating water pump, fan starts to work outside the machine.Simulation absorb heat from the air.In the heat preservation water tank, the limit stop on the set temperature is reached. When Compressor Exhaust temperature greater than 110 to protect the compre

9、ssor is high temperature burning.The compressor stop working.Through MaxRC232 communication under the machine temperature data.The running state of the parts sent to the PC computer.According to the practical man-machine exchange display interface.Key words: Air source; Single chip microcomputer; Tr

10、ansducer; communication目 录 TOC o 1-3 h z u HYPERLINK l _Toc293303995 引言 InputMode:设定Input属性取回的数据状态,InputMode=0为以文字形式读出数据,InputMode=1为以二进制形式读出数据。在此系统中,采用的是COM5口,所以设置Commport=5,波特率为4800bps。Inputlen=0即只要缓冲区里有数就会读出来。5 软件设计5.1 系统软件设计实现的功能1、采用单片机作为核心部件对压缩机、外机风扇加水泵、循环水泵电磁阀过行控制;2、采用LCD1602显示当前热水温度等信息;3、采用DS

11、18B20芯片作为数字温度传感器部件;4、采用浮球水位开关进行对水位控制;5、能实现通过路串口通信发送数据到PC机的进行显示与控制 软件设计流程图开始开串口中断、定时器LCD1602初始化读写DS18B20数据温度数据处理串口中断发送按键扫描Y/N按键设置子程序Y温度比较N热水加温程序L热水停止加热LCD1602温度值显示H图5.1 系统控制程序流程系统控制程序流程:系统上电后,首先单片机初始化,对串口初始化,DS18B20初始化,LCD1602初始化,然后启动采集器开始测量温度,采集端扫描完3路数据,并且将采集到的数字量,放到单片的数据存储区,并读取所测量的温度值放在数据存储器,把采到的热水

12、温度值放到LCD1602上显示,对键盘扫描,假设有按键被按下,进入按键控制子程序;如没有按键被按下,执行温度比较,假设监测到满足加执条件,进入热水加温程序,串口中断发送,返回对DS18B20对读写数据。5.3 系统软件C程序设计本文采用 C 语言编写系统的软件,C 语言是一种面向微处理器的机构化程序设计语言。它除了具有程序设计快、可读性好、易于移值和维护扩充等一般结构化程序设计语言所具有的优点外,还直接面向微处理器内部结构,所以用于应用系统的开发,可以得到一种不同于传统的用汇编语言编程的开发方式,能够极大地提高应用系统的开发效率。为了便于软件的编写、测试、修改和维护,在软件设计中,采用了模块化

13、和结构化设计方法。5.3.1模块化设计采用模块化设计是为了便于系统的移植和维护,防止代码的重复,从而节省数据的存储空间。在该设计中六个模块单元采用类似的硬件电路,因此功能的模块活设计可以使代码的重复利用率提高,减少工作量。5.3.2结构化编程采用结构化编程能使得程序结构清晰、逻辑性强、便于设计修改,符合自顶向下的程序设计规那么。“自顶向下是基于从最顶层开始向下层划分的分解过程,其注重于程序的控制流程和控制结构。6 调试与分析6.1 下位机整体调试分析整个调试所使用的测试仪器仪表和工具:微机一台;万用表;直流稳压电源;单片机开发系统一套;本系统的调试主要分为硬件调试、软件调试和PC机调试三大局部

14、。经过初步的分析设计后,在制作硬件电路的同时,软件调试也在穿插进行。这样有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而需要检查整体电路,从而可以节约大量的调试时间。软件编程中,作者首先完成的是单元功能模块的调试,然后进行系统调试,整体上与硬件调试的方法差不多。联机调试是最重要的一局部,同时也是本装置成功的关键,有许多问题都比较棘手。电路调试1、单片机最小系统板调试首先检测所制作的电路板是否有虚焊,短路等现象。然后接上+12V电源,检测各个芯片的电源是否为+5V,如果是+5V的话,说明供电正确。接上电压,看单片机是否发热,如不发热说明电源连接正确。测单片机30脚ALE是否有

15、脉冲波形输出,看EA引脚是否接了+5V,如果以上条件满足,说明单片机正常工作。2、LCD1602显示电路调试先对显示进行编程调试,通过后才能继续完成其他模块的调试,这一步很关键,也是最难调试的一步。给SCT89C52RC烧入单个DS18B20的程序先调试显示电路。显示电路调试步骤如下:1查看LCD1602的数据引脚和控制引脚与单片机I/O的连接是否一致,调试电位器能是否能改变LCD1602的背景高度。2给单片机接上一个DS18B20,把采到DS18B20的分为整数局部和小数局部显示在LCD1620的第二行,显示为TEMP:当时温度值。对DS18B20的加温看到温度显示是否也在增加,如果有增加说

16、明正确。3在LCD1602的第一行显示设置值,把要设置的写到LCD1602的第一行,看显示的值与给写的初值是否一致,显示为SET:设置下限值设置上限值3、DS18B20电路调试先将单总线DS18B20程序烧入单片机,首先检测DS18B20的接线是不正确,如果接线不正确DS18B20会发热,甚至会烧坏,如果正确向DS18B20写搜索到世界一唯64位的地址,放到三个数组中,在读取温度时,写DS18B20的的地址到DS18B20中,DS18B20的收到与它相配的地址起动温度转换,把数据发回单片机中。数据经过处理,存入数组中。写入三个DS18B20的地址,分别取得三个DS18B20的温度值。4、串口通

17、信电路调试检查MaxRS232所的电容是否正确,如果不正确无法进行通信的。先能单片机下载程序,再串口助手向单片机发一个数据,如果能收到刚刚发送的数据通信说明单片机与能够正常通信。把要发送到上位机的16个数据放到一个数组中,一次中断发送16个数据,在串口助手中检查数据是不正确。如果收收的是16个数据与下位机的数据一致,说明正确。5、按键电路调试该系统设计采用四个独立按键,第一个按键用来设计设置模式,第一次按一下时,进入上、下限设置的减模式,第二次时,进入上、下限设置模式,再一次进入,进入上、下限设置减模式,减加两个循环设置。第二个按键用对上限的加减,当第一个按键进入减模式时,按一下该键,对温度的

18、上限的减1,当第一个按键进入加模式时,按一下该键,对温度的上限的加1。第三个按键用来下限的加减,当第一个按键进入减模式时,按一下该键,对温度的下限的减1,当第一个按键进入加模式时,按一下该键,对温度的下限的加1。第四个按键是退出设置模式。能够进行正确设置温度的上下限设置,说明四个独立按键是正确的。6、下位机测试结果根据保温水箱的水位达低于低水位时,开始开启加水水泵加水,水位到达高水位进,水泵停止加水。在水位满足要求下,根据当时热水的温度25我们温度定为30时,压缩机、循环水泵,外机风扇开始工作,对热水加热,一直加热到达设定温度的上限值60,压缩机、循环水泵,外机风扇停止工作。如果压缩机排气温度

19、大于110,压缩时机停止工作。如果当外机热交换器的结了很厚的冰-5,接通电磁阀,切换制冷剂的流动的方向,即高温的制冷剂先到达外热交换器,再到热水热热交换器,把冰除去以后大于5,化霜电磁阀停止,又开始对热水加热。MaxRX232通信,当我的上位机向下位机发送请求发送信号时,能够兴旺16个数据到达上位机来,温度不断更新,也不断发送到达上位机来显示。上位机发下的去的温度设置信号也能接收到,并能改变设置的温度值。所以说明通信是正确的。 上位机调试与分析本系统采用事件驱动方式进行串口通信设计,上位机设置的界面如所示6-1,设计7个命令按纽,分别为开始送运行,停止发送数据、退出系统、温度设置的下限减、温度

20、设置的下限加、温度设置的下限减、温度设置的上限加、温度设置的上限减。5文本框,Text1用于显示需从下位机读取的热水温度,Text2用于显示从下位机读取的压缩机排气温度温度,Tex3用于显示需从下位机读取的外机热交换器的温度,Text4用于显示需从下位机的发送来的设置温度下限值,Text5用于显示下位机发送来设置温度上限值;5个Shape对象,分别用于压缩机、循环水泵、外机风扇、加水水泵和电磁阀运行状态显示。下位机发送到上位机的的一帧数据为16个字节,第1个字节和第2个字节数据分别是热水的整数分部和小数局部,这个两个字节组成一个热水的温度值。第3个字节和第4字节数据用于压缩机排气温度,第5个字

21、节和第6字节数据用于外机热交换器的温度,第7个字节和第8字节数据用于设置温度下限值,第9个字节和第10字节数据用于设置温度上限值。第11字节的数据用于外机热交换器的温度的负温度的符号。第12个字节的数据用于压缩机运行状态,当第12个字节收到的0 x01时,表示压缩机运行。第13个字节的数据用于循环水泵运行状态,当第13个字节收到的0 x02时,表示循环水泵运行。第14个字节的数据用于外机风扇运行状态,当第14个字节收到的0 x03时,表示外机风扇运行。第15个字节的数据用于加水水泵运行状态,当第15个字节收到的0 x04时,表示加水水泵运行。第16个字节的数据用于电磁阀运行状态,当第16个字节

22、收到的0 x05时,表示电磁阀运行。上位机向下位机的发送数据,当设置下限温度加按钮按下时,向下位机发送0X01,进行设置下限温度加,当设置下限温度减按钮按下时,向下位机发送0X02,进行设置下限温度减。当设置上限温度加按钮按下时,向下位机发送0X03,进行设置上限温度加,当设置上限温度减按钮按下时,向下位机发送0X04,进行设置上限温度减。1、借助串口助手先检发上位机的数据是不是正确,向下位机发一个数据,当下位机接收到一个数据时,下位机产生一次中断,并向上串口助手发送16进制的数据,通过分析发送到串口助手的的数据与下位机的数据一志,说明发送的数据是确正的。2、,设计好通信MSComm按键的属性

23、和定时器的属性,以二进制的形式接收数据,把接收到的数据放到相应的窗口中显示出来。翻开开始运行按键时,开定时器和通信MSComm,并向下位机送一个请求发送数据信号,当下位机收到请求信号时,向上位机发送16个数据,并把相应的数据放到相应的窗口显示出来。当上位机要设计下位机时,按一下上位机的设置温度的按键,就会向下位机发送一个码,下位机收到这个码时,进行判断,对温度设置的上下限设计。定时器每隔0.5S向下位机送一个请求信号,所以能实现显示的不断的更新,能监测到系统的所有运行状态。通过设置温度的上下限设计向下位机发送加减设定温度,很好的控制系统的运行。 图6.1 上位机的设计7 总结在设计和制作的过程

24、中,根据题目分析,明确作品所要实现功能,发挥更多的功能。经过到图书馆,查阅资料,构思从哪方面入手设计电路及由几个模块去实现功能。分析每一局部的模块有几种方案,通过对每个局部的模块论证选择最正确方案。从节省本钱角度分析,最终的方案是采用STC89C52RC单片机作为单片机主控模块, 采用直流电机作为系统的电机,采用大功率PNP型三极管及其简单外围电路作为直流电机驱动模块,采用LCD1602液晶显示作为系统的显示器件。整个系统的模块驱动电路较为简单、实用性强、性价比高,显示器件LCD1602液晶显示完全可以满足系统的显示要求,主控模块电路根本上就为单片机的最小系统,还省略了不必要的拨码开关、数码管

25、等。对设计的电路最重要的一点就是设计合理、节省本钱,其次是要求作品的性能要稳定,实用性强和应用性广。通过将系统设计进行模块后,设计电路又变成难点了,要设计一个好的电路,不是容易的,要经过多上机练习,才能做出好的电路。对各个模块电路不同方案进行了论证和比较,确定各个模块电路方案后,根据各个模块电路的方案设计出电路原理图,进行PCB进行布局和布线,绘制好PCB后进行转印,制板和焊接。原理图的绘制和设计最为重要,原理图出错会导致导入PCB的网络也是错的,造成PCB中元器件的网络连接会出错或导入的元器件少了,使设计出来的PCB板和原理图是不一致的。PCB的布局也是关键,布局得好电路看起来会比较整齐、美

26、观,跳线相对也比较少,焊接起来相对轻松。在制作PCB板时注意转印时间不要过长,否那么会使电路板发黄留下烙印,转印完电路的PCB板应该等温度冷却下来后再将转印纸撕下来,对照转印纸上的PCB图线路用油性笔将转印不好的线路涂黑,以防止PCB板放入腐蚀液腐蚀时将线路腐蚀掉。在腐蚀PCB板时应该先调好腐蚀液的浓度,浓度过低会造成腐蚀PCB板的速度很慢,浓度过浓会造成腐蚀液氧化PCB板。腐蚀完成后就是对PCB板放置元器件的地方钻孔,钻孔前注意选择好适宜的钻针,使用孔径过大的钻针进行钻孔后会导致元器件的焊盘被钻飞,使用孔径过小的钻针进行钻孔后会导致在焊接时元器件插不进PCB板,还有在进行钻孔时应注意将钻针扭

27、紧以防在打孔时将焊孔钻歪,将焊盘钻掉,使元器件在PCB板上焊接困难。在焊接时应该注意对照PCB图上的元器件图进行焊接,以防止PCB板上的元器件焊错。在焊接过程中应该先焊接跳线,因为跳线比较低,焊接应该从高度比较低的元器件开始焊,最后才焊接高度比较高的元器件。焊接时应该有耐心、心平冷静,没有心浮气躁的情绪,方可确保电路焊接的正确率。焊接方面对功能实现起着关键作用,元器件的焊点不牢或者存在虚焊现象会影响电路功能的实现。焊接完成后,先对电路进行检查,检查焊点的连接是否正常,元器件间连接的线路是否正常导通,电源和地是否存在短路现象等。在确定电路没有问题的情况方可算是完成焊接工作,检查电路也是对后期调试

28、电路起到不可缺少的重要环节。随着电路焊接完成,接着就是对软件程序的编写在编程过程中出现的问题很多,在之前我是没有用学过C语言,所以在一些细微的地方漏掉符号,程序的嵌套使用不对等,主要原因就是编写程序不够细心,对一些细小的问题不注意,在开始编写程序时没对程序进行模块化,想一步登天,想一下就把所有的功能的程序编出来,结果很明显就是失败。在失败之后总结原因,发现“欲速那么不达。理清思路再次分析题目要实现的功能,分模块来编程,一局部一局部地实现题目要求的功能。对软件程序进行各个程序模块分类,分为主程序、LCD1602显示子程序、温度采集子程序、温度设置子程序、按键子程序、温度比较子程序、加水子程序,串

29、口通信程序模块的流程图。在编写设置温度子程序时要对按键进行复用,结果在按键嵌套时处理时有问题,按键返回时总是出错,后面在对每按下一次按键后对按键值进行存储和判断,这样按键值在返回时就不容易出错,在对程序编号进行矫正和调节好按键的延时消抖后,设计温度按键工作正常。总而言之在调试程序时要有足够的耐心和细心,对程序进行模块化,各个模块程序要脚踏实地一步一步完成,不能总想着一步登天。在整合程序的过程中也出现了不少问题,如按键按下调节不了温度的上下限,程序运行了出现乱码,程序卡死等,后面在调试好主程序的前提下,一个一个地调用子程序,先调用一个子程序,屏蔽掉其它的子程序,看程序运行是否有问题,如果没有再接

30、着调用下一个子程序,这样就发现问题是出现在哪一个子程序上,容易进行调试,通过仔细地检查和不断地调试,最终完成了所有程序的整合。经过这次毕业作品的设计和制作的成功,我深深的体会到多动手重要性。这次毕业作品的设计又给我一次锻炼的时机,是对我对所学理论知识得到进一步稳固,从另一个角度培养并提高了我们的动手和动脑能力,极大的提高了设计电路的能力,从一个不会懂电路的人到能设计电路的人,学习到很多电子元件的设计方法。好的一面展现在我面前,固然也有缺乏之处,主要的是设计与分析电路方面欠佳,模电、数电不够扎实,这也是今后需要加强的。其次,通过这次作品设计与制作发现了一种比较好的方法,就是根据题目要实现的功能将

31、系统进行模块划分,软件程序的编写进行程序模块化,实现各个模块电路功能后,再对各个模块电路进行整合,这样系统的调试就会变得简单明了。在设计中,由于这次毕业设计大局部是靠自己独立设计或是查找相关资料的,因此困难比想象中的要多,自己的许多缺点也都浮现出来。在设计过程中走了很多弯路。不过从另一方面来看,本次设计在锻炼了我的动手能力同时,分析能力和查找资料的能力也得到了提高,这些都为以后自己正式踏上工作岗位打下了扎实的根底。谢 辞在这即将结束的大学生活之际,我由衷的感谢教育过我的老师们,从他们身上我学到了许多珍贵的知识和何做人的道理,他们在我学业上对我的热心指导,认真负责地育人态度,让我佩服之至,这两年

32、的大学生活下来,我收获很丰富,值得好好珍藏。首先感谢我的指导老师胡机秀老师,在做毕业设计和论文的撰写过程中,她给予了热心的指导和耐心教诲,在她的热心指导下,我的毕业设计和毕业论文得以顺利完成。在我大学生活的日子里,感谢电子信息工程的老师们,不管什么天气,什么困难都能准时到教室勤恳给我们上课,给我们灌输新的知识,在整个学习过程中,老师严谨的治学态度,勤奋塌实的工作作风使我受益匪浅,在此表示我深深的谢意。同时我还要感谢实验室的所有的老师,在毕业设计的进展中,他们给了我很多的关心和帮助,为我们创造一个良好的研究学习环境。感谢与我共同学习的同学,在我做毕业设计过程中,没有他们的帮助我不可能那么顺利的,

33、是他们的热心帮助才让我的毕业设计更加的完善。感谢他们帮我找到解决问题的方法,我将努力工作,用所学到的知识为社会效劳,以出色的工作成绩来回报学校、老师和家人。参考文献1 姜志海,黄玉清,刘连鑫编著 单片机原理及应用.电子工业出版社,20212 张永格,何乃味.51单片机C语言应用技术与实践.北京:北京交通大学出版社,20213 王慧玲主编. 电路根底. 高等教育出版社,20044 5 王如竹,制冷与制热原理.科学出版社,2006.6 李晓东.制冷原理及设备.机械工业出版社,20057 钟国文.电路CAD教程. :华南理工大学出版社,20078 秦获辉,科技英语电子类第三版西安电子科技大学出版社2

34、0219 张昌.热泵技术与应用.工业出版社,202110 Raj Reddy Spoken language processing 2004.11 Jose Rivera, Mariano Carrillo, Self-Calibration and Optimal Response in Intelligent Sensors Design Based on Artificial Neural Networks, Sensors, 2007.12 Jiang wei, Research on Anycast for Lighting Control System,Beijing: Commu

35、nication University of China,2021.13 WU Yue, SHI Changhong,ZHANG Xianghong, Design of Intelligent Street Light Control System, Control and Automation, June 9, 2021.附 录 附录一:系统原理图附 录二:电路PCB图附 录三:程序代码Private Sub Text1_Change()End SubPrivate Sub Timer1_Timer() Dim Data(1 To 6) As Single Dim i%, D1$, D2$

36、 Dim dStart%, dEnd% Dim WT& Dim outbyte(1 To 1) As Byte outbyte(1) = &H0 ReceiveByte = Comm1.Input 去除缓冲区 TimeDelay 100 Comm1.Output = outbyte 送出指令 WT = GetTickCount() Do DoEvents Loop Until GetTickCount - WT 3000 Or Comm1.InBufferCount = 15 等待字节数到达 If Comm1.InBufferCount 15 Then MsgBox 未收到数据, vbCrit

37、ical + vbOKOnly, 系统信息 Exit Sub End If TimeDelay 100 ReceiveByte = Comm1.Input 接收数据 dStart = LBound(ReceiveByte) 取得字节数组最小索引值 dEnd = UBound(ReceiveByte) 取得字节数组最大索引值 Text1.Text = Text2.Text = Text3.Text = Text4.Text = Text5.Text = For i = 0 To 4 D1 = CStr(ReceiveByte(dStart + 2 * i) 取得小数点前的数据 D2 = CStr

38、(ReceiveByte(dStart + 2 * i + 1) 取得小数点后的数据 Data(i + 1) = Val(D1 & . & D2) 数据组合 最后显示在文本框中 Text1.Text = CStr(Data(1) Text2.Text = CStr(Data(2) Text3.Text = CStr(Data(3) Text4.Text = CStr(Data(4) Text5.Text = CStr(Data(5) Next i 负温度表示If (ReceiveByte(dStart + 10) = &H2) Then Data(3) = Val(- & CStr(Recei

39、veByte(dStart + 2 * 2) & . & CStr(ReceiveByte(dStart + 2 * 2 + 1) Text3.Text = CStr(Data(3) End If 机器运行状态压缩机,循环水泵,外机风扇,加水泵,电磁阀If (ReceiveByte(dStart + 11) = &H1) Then Shape1.FillColor = RGB(0, 255, 0) Else Shape1.FillColor = RGB(255, 255, 255) End IfIf (ReceiveByte(dStart + 12) = &H2) Then Shape2.Fi

40、llColor = RGB(0, 255, 0) Else Shape2.FillColor = RGB(255, 255, 255) End If If (ReceiveByte(dStart + 13) = &H3) Then Shape3.FillColor = RGB(0, 255, 0) Else Shape3.FillColor = RGB(255, 255, 255) End IfIf (ReceiveByte(dStart + 14) = &H4) Then Shape4.FillColor = RGB(0, 255, 0) Else Shape4.FillColor = RG

41、B(255, 255, 255) End IfIf (ReceiveByte(dStart + 15) = &H1) Then Shape5.FillColor = RGB(0, 255, 0) Else Shape5.FillColor = RGB(255, 255, 255) End IfEnd Sub延时程序Public Declare Function GetTickCount Lib kernel32 () As LongSub TimeDelay(DT As Long) Dim TT As Long TT = GetTickCount() Do DoEvents If GetTic

42、kCount - TT = DTEnd Sub等待 RS 字符串传回,或是时间到达Function WaitRS(Comm As MSComm, RS As String, DT As Long) As String Dim buf$, TT As Long buf = TT = GetTickCount Do Loop Until InStr(1, buf, RS) 0 Or GetTickCount - TT = DT If InStr(1, buf, RS) 0 Then WaitRS = buf Else WaitRS = End IfEnd Function附 录四C语言程序代码#i

43、nclude#include LCD_drive.h/包含LCD驱动程序软件包#include DS18B20_drive.h/DS18B20驱动程序软件包#define uchar unsigned char#define uint unsigned intsbit RELAY=P20;/压缩机继电器sbit RELAY1=P21;/外风扇继电器1sbit RELAY2=P22;/循环水泵继电器2sbit woterbong=P23;/加水水泵断电器sbit RELAY4=P24;/电磁阀继电器sbit K1=P10;/按键K1sbit K2=P11;/按键K2sbit K3=P12;/按键

44、K3sbit K4=P13;/按键K4sbit P14=P14; /上限水位sbit P15=P15; /下限水位bit temp_flag ;/判断DS18B20是否正常标志位,正常时为1,不正常时为0uchar sign=0;/定义符号标志位bit K1_flag=0,bool=0;/K1键按下时,该标志位为1,因为K1是一个双功能键,需要设置标志位进行区分bit Flag1,Flag2;unsigned char ReData,SenData;uchar count_50ms=0;/50ms定时器计数器bit flag_500ms=0; /500ms标志位,满500ms时该位置1,用来控

45、制小喇叭的闪烁频率bit key_up;/按键加1减1标志位,用来控制K1键进行加1和减1的切换uchar disp_buf8=0;/显示缓冲uchar TH_buf=0;/报警高位缓冲uchar TL_buf=0;/报警低位缓冲uchar temp_comp;/用来存放比较温度值(即温度值的整数局部),以便和报警值进行比较uchar rest;/用来存放接受数据uchar temp_comp1; /用来存放压缩机比较温度值uchar temp_comp2;/用来存放电磁阀比较温度值uchar temp_data8 = 0 x00,0 x00;/用来存放温度数据的高位和低位uchar send

46、_data16=0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00; /用来发送数据11位用来发负温度符号的uchar temp_TH=25;/高温报警温度初始值uchar temp_TL=23;/低温报警温度初始值uchar code line1_data = DS18B20 OK ; /DS18B20正常时第1行显示的信息uchar code line2_data = TEMP: ; /DS18B20正常时第2行显示的信息uchar code menu

47、1_error = DS18B20 ERR ; /DS18B20出错时第1行显示的信息uchar code menu2_error = TEMP: - ; /DS18B20出错时第2行显示的信息uchar code menu1_set =SET: - ; /设置菜单第1行温度设置信息uchar code menu2_set = SET ; /设置菜单第2行温度设置信息uchar code menu2_H = H ; /温度过高时,第2行显示高温报警符号uchar code menu2_L =L; /温度度过低时,第2行显示低温报警符号/*以下是函数声明,由于本例采用的函数较多,应参加函数声明局

48、部*/void timer0_init();/定时器T0初始化函数声明void SpeakerFlash();/小喇叭符号闪烁函数声明void lcd_write_CGRAM(); /写CGRAM函数声明void TempDisp();/温度值显示函数声明void MenuError();/DS18B20出错菜单函数声明void MenuOk();/DS18B20正常菜单函数声明void THTL_Disp();/报警温度值显示函数声明void GetTemperture();/读取温度值函数声明void TempConv();/温度值转换函数声明void Write_THTL() ; /报警

49、值写入函数声明(写入DS18B20的RAM和EEPROM)void ScanKey();/按键扫描函数声明void SetTHTL();/报警温度值设置函数声明void SetHL(); /设计上下温度void TempComp();/温度比较函数声明void AddWoter();/加水/光刻ROM码unsigned char rom_data2=0 x28,0 xb9,0 x25,0 x7d,0 x04,0 x00,0 x00,0 x0e; /测压缩机的排气温度ROMunsigned char rom_data1=0 x28,0 x62,0 x9a,0 x7d,0 x04,0 x00,0

50、x00,0 x12; /外机热交换器的ROMunsigned char rom_data0=0 x28,0 xb5,0 x8f,0 x3b,0 x04,0 x00,0 x00,0 x14; /测水温的传感器ROM/*以下是温度值显示函数,负责将测量温度值显示在LCD上*/void TempDisp() lcd_wcmd(0 x46 | 0 x80);/从第2行第6列开始显示温度值 lcd_wdat(disp_buf3); /百位数显示 lcd_wdat(disp_buf2); /十位数显示 lcd_wdat(disp_buf1); /个位数显示 lcd_wdat(.); /显示小数点 lcd_

51、wdat(disp_buf0); /小数位数显示 lcd_wdat(0 xdf); /0 xdf是圆圈的代码,以便和下面的C配合成温度符号 lcd_wdat(C); /显示C/*以下是DS18B20正常时的菜单函数*/void MenuOk()uchar i; lcd_wcmd(0 x40|0 x80); /设置显示位置为第2行第0列 i = 0; while(line2_datai != 0) /在第2行显示 TEMP: lcd_wdat(line2_datai); /显示第2行字符 i+; /指向下一字符void SetHL() uchar i, temp1,temp2;lcd_wcmd(

52、0 x00|0 x80); /设置显示位置为第1行第0列 i = 0; while(menu1_seti != 0) /在第1行显示 SET TH: lcd_wdat(menu1_seti); /显示第1行字符 i+; /指向下一字符 TL_buf3= temp_TL /100+0 x30;/TL百位局部变换为ascii码 temp2 = temp_TL %100;/TL十位和个位局部 TL_buf2= temp2 /10+0 x30;/别离出TL十位并变换为ascii码 TL_buf1= temp2 %10+0 x30;lcd_wcmd(0 x04|0 x80); /设置显示位置为第2行第9

53、列 lcd_wdat(TL_buf3); /TL百位数显示 lcd_wdat(TL_buf2); /TL十位数显示 lcd_wdat(TL_buf1); /TL个位数显示 TH_buf3= temp_TH /100+0 x30;/TH百位局部变换为ascii码 temp1 = temp_TH %100;/TH十位和个位局部 TH_buf2= temp1 /10+0 x30;/别离出TH十位并变换为ascii码 TH_buf1= temp1 %10+0 x30;/别离出TH个位并变换为ascii码lcd_wcmd(0 x09|0 x80); /设置显示位置为第1行第9列 lcd_wdat(TH_

54、buf3); /TH百位数显示 lcd_wdat(TH_buf2); /TH十位数显示 lcd_wdat(TH_buf1); /TH个位数显示 lcd_wdat(0 xdf); /0 xdf是圆圈的代码,以便和下面的C配合成温度符号 lcd_wdat(C); /*以下是DS18B20出错时的菜单函数*/void MenuError()uchar i;lcd_clr();/LCD清屏lcd_wcmd(0 x00|0 x80); /设置显示位置为第1行第0列 i = 0; while(menu1_errori != 0) /在第1行显示 DS18B20 ERR lcd_wdat(menu1_err

55、ori); /显示第1行字符 i+; /指向下一字符 lcd_wcmd(0 x40|0 x80); /设置显示位置为第2行第0列 i = 0; while(menu2_errori != 0) / TEMP: - lcd_wdat(menu2_error i); /显示第2行字符 i+; /指向下一字符lcd_wcmd(0 x4b | 0 x80);/从第2行第11列开始显示 lcd_wdat(0 xdf); /0 xdf是圆圈的代码,以便和下面的C配合成温度符号 lcd_wdat(C); /显示C/*以下是报警值TH和TL显示函数,用来将设置的报警值显示出来*/void THTL_Disp(

56、)uchar i, temp1,temp2;lcd_wcmd(0 x00|0 x80); /设置显示位置为第1行第0列 i = 0; while(menu1_seti != 0) /在第1行显示 SET TH: lcd_wdat(menu1_seti); /显示第1行字符 i+; /指向下一字符 lcd_wcmd(0 x40|0 x80); /设置显示位置为第2行第0列 i = 0; while(menu2_seti != 0) /在第2行显示 SET TL: lcd_wdat(menu2_seti); /显示第2行字符 i+; /指向下一字符/*以下是读取温度值函数*/void GetTem

57、perture(void)char i; ET0=0; /关中断,防止读数错误,此句非常有重要 Init_DS18B20();/DS18B20初始化WriteOneByte(0 xCC); / 跳过读序号列号的操作 WriteOneByte(0 x44); / 启动温度转换 Init_DS18B20(); if(yes0=0) / yes0为Init_DS18B20函数的返回值,假设yes0为0,说明DS18B20正常 WriteOneByte(0 x55);for(i=0;i8;i+)WriteOneByte(rom_data0i); WriteOneByte(0 xBE); /读取温度存放

58、器 temp_data0 = ReadOneByte(); /温度低8位 temp_data1 = ReadOneByte(); /温度高8位 temp_flag=1; else temp_flag=0;/否那么,出错标志置0Init_DS18B20();/DS18B20初始化 if(yes0=0) / yes0为Init_DS18B20函数的返回值,假设yes0为0,说明DS18B20正常 WriteOneByte(0 x55);for(i=0;i8;i+)WriteOneByte(rom_data1i); WriteOneByte(0 xBE); /读取温度存放器 temp_data2 =

59、 ReadOneByte(); /温度低8位 temp_data3 = ReadOneByte(); /温度高8位 temp_flag=1; else temp_flag=0;/否那么,出错标志置0 Init_DS18B20();/DS18B20初始化 if(yes0=0) / yes0为Init_DS18B20函数的返回值,假设yes0为0,说明DS18B20正常 WriteOneByte(0 x55);for(i=0;i127) /大于127即高4位为全1,即温度为负值 temp_data4=(temp_data4)+1; /取反加1,将补码变成原码 if(temp_data4)=0 xff)/假设大于或等于0 xff temp_data5=(temp_data5)+1;/取反加1 else temp_data5=temp_data5; /否那么只取反 sign=1; /置符号标志位为1 /热水温度局部temp =temp_data0&0 x0f;/取小数位 disp_buf0=(temp *10/16)+0 x30;/将小数局部变换为ascii码send_data1=(temp *10/16); /将小数局部发到上位机 temp_comp =(temp_data0&0 xf0)4)|(temp_data1&0 x0f)4)

温馨提示

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

最新文档

评论

0/150

提交评论