职业技术学院校园电子创意大赛参赛作品基于单片机的水位水温控制系统摘要本文详细阐述了基于单片机的水温水位控制系统的设计方法,此种方法是以AT89C51单片机为主控制单元,对水温水位参数进行控制,从而提高了电器的工作稳定性。以DS18B20为温度传感器的对水温进行数据采集并实现温度控制。该控制系统还可以实时存储相关的温度数据以及水位高度并能记录当前的时间。为了实现功能本系统设计了相关的硬件电路和相关应用程序。硬件电路主要包括AT89C51单片机最小系统,测温电路、测水位电路、LCD12864液晶显示电路以及报警电路、键盘输入参数等。系统程序主要包括主程序,读出温度子程序,计算温度子程序、水位显示子程序、按键处理程序、12864液晶显示程序以及数据存储程序以及时间显示程序等关键词:AT89C51单片机;LCD12864液晶;DS18B20温度传感器;实时存储总体系统方案图及方案单片机AT89C51为主控制芯片,温度采集是采用的DS18B20温度传感器,外围电路搭接来采集水位,用液晶LED12864显示当前的水位水温和时间,键盘控制是输入日期数据以及所需控制的水位水温,报警系统是水温水位超于限制时而采取的报警。详细方案选择控制中心系统:采用传统的数字模似电路,功能可以实现,但电路复杂,温度误差大,成本高,可靠性也比较差;于是我选择采用单片机AT89C51控制,它结构简单,可以减少外围电路的搭接,并且AT89C51使用方便,成本比较低,性能稳定,还可以控制各模块输入输出。温度控制系统:如果采用热电阻,电路需接A/D转换电路,由单片机换算出实际温度,电路结构复杂,而且也精度不高,DS18B20可直接与单片机的1位I/O相接,电路结构简单,占用单片机的口线资源少,精度高,而且成本低,因此对温度控制系统我选用DS18B20去采集温度。水位控制系统:对于水位的控制我想到的是运用水位传感器,但是搜集资料后发现水位的传感器是通过压力传感器变换过来的,看到最多的是浮球式液位传感器,而且此传感器的适用温度范围和测试精度也适合该设计系统,可是价格很昂贵;因此我想利用几根线将容器中的液位分成了几个水位挡,通过和电源正极的结合,利用水导电的特性,通过芯片324和9013三极管等元件构成的驱动电路的电平转换,将液位数据输入到单片机口,通过单片机换算转换成液位数据显示在LCD12864上。显示界面:TC1602的液晶字符性显示器也适合运用于此控制系统当中的,并且功能特性也适用于此设计系统的功能要求。但我还希望此显示系统中能同时显示时间(年月日),所以1602可能就显得力不从心了,于是我选择了液晶LED12864,它的显示特性很适用此设计系统的功能要求,也不会造成资源浪费。过温和水位过高情况:我还希望能设置一个报警装置,希望采用蜂鸣器和二极管的结合,因为伴随着系统故障的产生,此系统可以给予人以视觉和听觉的提示,使人能通过多种方式掌握系统的状态,而且此报警装置也比较经济实惠。DS18B20简介1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温7、测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力8、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。系统控制部分电路图单片机与显示器件连接图软件程序设计框图开始按键控制选择水位时间水温控制水温调整水位调整时间调整加热温度加水结束开始初始化读取DS18B20读取电压计算温度转化成水位启动DS18B20启动外围电路LED显示结束部分程序设计voidmain(){uchari;delay(100);//上电,等待稳定lcd_init();//初始化LCDwhile(1){lcd_pos(1,0);//设置显示位置为第一行for(i=0;i16;i++){lcd_wdat(DIS1[i]);delay(30);}lcd_pos(2,0);//设置显示位置为第二行for(i=0;i16;i++){lcd_wdat(DIS2[i]);delay(30);}lcd_pos(3,0);//设置显示位置为第三行for(i=0;i16;i++){lcd_wdat(DIS3[i]);delay(30);}lcd_pos(4,0);//设置显示位置为第四行for(i=0;i16;i++){lcd_wdat(DIS4[i]);delay(30);}delay(1000);lcdflag();clr_screen();//清屏photodisplay(Photo1);//显示图片1delay(2000);clr_screen();//清屏photodisplay(Photo2);//显示图片2delay(2000);bytecode();//显示字符表代码delay(2000);clr_screen();}}DS18B2的主程序#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^7;//ds18b20与单片机连接口sbitRS=P3^0;sbitRW=P3^1;sbitEN=P3^2;unsignedcharcodestr1[]={};unsignedcharcodestr2[]={};ucharfCode[8];uchardatadisdata[5];uinttvalue;//温度值uchartflag;//温度正负标志结束语完成情况:本设计只是提出设想,没有进行软件验证,可是本设计在理论上可以实施,针对自己的想法,我只是简单的设计了外围电路,一些简单的程序和模块,要想验证必须将电路搭接起来,通过C语言加载去验证,由于我的C语言还不太好,程序只是模块化并没有进行组合。所得收获:在本设计中我对DS18B20温度传感器进一步了解,对液晶LED12864的驱动以及程序的编写也加深了印象,对设计的布局以及设计的所需元器件的选择的能力进行了锻炼。参考文献【1】宋双杰.单片机C语言编程实践.北京:电子工业出版社2011【2】俞雅珍.电子技术基础与技能实训指导.上海:复旦大学出版社,2010谢谢大家