基于单片机的水温自动控制系统设计一、题目要求及分析要求设计一个水温控制系统,能正常控制和测量温度范围,用AT89C51控制DS18B20,读取数据对DS18B20转换后的数据进行处理,转换成实际温度,使用6位数码管显示DS18B20测出的温度。二、系统总体方案1、温度传感器选择采用DS18B20单线数字温度传感器做温度检测器。DS18B20能够直接将所采集的信号进行模|数转换2、LED显示方案系统需要采用6位LED数码管显示,LED显示有动态显示和静态显示。本次采用动态显示,增加74LS245芯片最为LED数码管的驱动,采用共阴极的LED,其中单片机的P1口为LED的段码输出口,P3.0~P3.5分别是LED的位码输出口三、硬件电路组成部分(1)DS18B20温度采集电路DS18B20有3个引脚,GND接地信号、DQ数据输入\输出引脚、VDD外接供电电源输入端。如图示:DS18B20温度值格式表,如下图所示。这是12位转换后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得温度大于0,这5位为0,只要将测得得数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1测得的数值需要取反加1再乘0.0625即可得到实际温度。高8为中的高五位是符号位,表示温度是零上还是零下。高8位中的低三位和低8为中的高4位构成温度的整数部分。低8位中的低4位为温度的小数部分。(2)数码管LED(3)单片机外部时钟电路(4)单片机复位电路四、软件设计1、主程序开始初始化、设置常量调DS18S20初始化子程序读取转换温度值调数据处理子程序生成显示码显示温度值2、DS18B20复位子程序DQ置1短延时,等待DS18B20回应DQ置1DQ置0延时DQ=1?FLAG1置1FLAG1置0延时DQ置1返回YN3、DS18B20读温度子程序设R1=31H设R4=2(2字节)设R2=8(8位数据)进位标志位清零加DQ提供一个低脉冲将DQ值读入CACC带进位右移一位以读8位将ACC中的值读入QB1R1=R1-1读完2字节返回NYYN4、DS18B20数据处理子程序C清零符号位STGH清零将转换数据高字节最高位移入CC=1?C清零SIGH置1,表示负数将转换数据低字节逐位取反再加1转换数据高字节加进位C分离整数与小数,整数存入INTEG,小数存入DECIM返回Y五、程序(一)编写、汇编源程序;变量定义DQBITP2.4;DS18B20数据位FLAG1BIT00HSIGNBIT01HMSBEQU30HLSBEQU31HINTEGEQU32HDECIMEQU33HSEG-SEQU34HSEG-I3EQU35HSEGI2EQU36HSEG-I1EQU37HSEG-D1EQU38HSEG-CEQU39H;主程序ORG0000HMAINLCALLINIT-1820LCALLGET-TEMPERLCALLDATA-PPOCLCALLSEG-GENLCALLDISPLAYSJMPMAIN;DS18B20复位初始化子程序INIT-1820:SETBDQNOPCLRDQMOVR1,#3TSR1:MOVR0,#107DJNZR0,$DJNZR1,TSR1SETBDQNOPNOPNOPMOVR0,#25HTSR2:JNBDQ,TSR3DJNZR0,TSR2LJMPTSR4TSR3:SETBFLAG1LJMPTSR5TSR4:CLRFLAG1LJMPTSR6TSR5:MOVR0,#117DJNZR0,$TSR6:SETBDQRET;读出转换后的温度值GET-TEMPER:SETBDQLCALLINIT-1820JBFLAG1,TSS2RETTSS2:MOVA,#0CCHLCALLWRITE-1820MOVA,#44HLCALLWRITE-1820LCALLDELAYLCALLINIT-1820MOVA,#0CCHLCALLWRITE-1820MOVA,#0BEHLCALLWRITE-1820LCALLREAD-1820RET;写DS18B20的子程序WRITE-1820:MOVR2,#8CLRCWR1:CLRDQMOVR3,#6DJNZR3,$RRCAMOVDQ,CMOVR3,#23DJNZR3,$SETBDQNOPDJNZR2,WR1SETBDQRET;读DS18B20的程序READ-18200:MOVR4,#2MOVR1,#31HRE00:MOVR,#8RE01:CLRCSETBDQNOPNOPCLRDQNOPNOPNOPSETBDQMOVR3,#9RE10:DJNZR3,RE10MOVC,DQMOVR3,#23DJNZR3,$RRCADJNZR2,RE01MOV@R1,ADECR1DJNZR4,RE00RET;数据处理子程序DATA-PROC:CLRCCLRSIGNMOVA,MSBRLCAJCNEGLJMPPROCNEG:CLRCSETBSIGNMOVA,LSBCPLAADDA,#1MOVLSB,AMOVA,MSBCPLAADDCA,#0MOVMSB,APROC:MOVA,LSBANLA,#0FHMOVDECIM,AMOVA,MSBSWAPAANLA,#0F0HMOVINTEG,AMOVA,LSBSWAPAANLA,#0FHMOVR0,INTEGORLA,R0MOVINTEG,ARET;生成显示码子程序SEG-GEN:MOVDPTR,#TABLEJBSIGN,S-NEGMOVSEG-S,#00HSJMPS-INTS-NEG:MOVSEG-S,#40HS-INTMOVA,INTEGMOVB,#100DIVABMOVCA,@A+DPTRMOVSEG-I3,AMOVA,BMOVB,#10DIVABMOVCA,@A+DPTRMOVSEG-I2,AMOVA,BMOVCA,@A+DPTRORLA,#80HMOVSEG-I1,AMOVDPTR,#FLOAT-TABMOVA,DECIMMOVCA,@A+DPTRMOVDPTR,#TABLEMOVCA,@A+DPTRMOVSEG-D1,AMOVSEG-C,#39HRET;显示子程序DISPLAY:MOVP3,#0FFHCLRP3.0MOVP1,SEG-SLCALLDELAYSETBP3.0CLRP3.1MOVP1,SEG-I3CALLDELAYSETBP3.1CLRP3.2MOVP1,SEG-I2LCALLDELAYSETBP3.2CLRP3.3MOVP1,SEG-I1LCALLDELAYSETBP3.3CLEP3.4MOVP1,SEG-D1LCALLDELAYSETBP3.4CLRP3.5MOVP1,SEG-CLCALLDELAYSETBP3.5RET;延时子程序,延时5秒DELAY:MOVR5,#5D1:MOVR6,#248DJNZR6,$DJNZR5,D1RET;TABLE:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FHFLOAT-TABDB00,01,01,02,03,03,04,04,05,06,06,07,08,08,DB09,09END(二)程序仿真1、先在protues仿真软件中搭建硬件电路;2、根据设计思想和硬件电路在keil2中编写程序代码调试通过并生成.axm文件;3、双击protues仿真电路中的单片机,将.axm文件添加到单片机中,然后运行观察结果。(三)结果分析能够从温度传感器中获得温度数据,程序能正常执行,测得结果有一定的误差,总之,效果还行。六、心的体会本设计以单片机为核心部件的控制系统,利用软件编程,最终实现设计要求。这次课程设计历时两个星期,从一开始的确定课题,理论学习,到后来的资料查找,再到调试仿真,这一切都使我的理论知识和动手能力进一步提高。在本次课程设计中,遇到了很多困难,如查找元器件,写程序,调试仿真,但通过仔细分析以及查找资料后解决了问题,提高了自己解决问题的能力。在这个过程中我感受颇多,它不仅是一个对我这学期知识学习情况和我的应用动手能力的检验,而且还是我面对困难的心态,做事的毅力和耐心的考验,同时让我深刻感受到了做课程设计意义的所在,在整个过程中受到了同学的帮助,在此表示感谢!