基于单片机的水温控制系统设计.docx
- 文档编号:9466699
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:18
- 大小:160.94KB
基于单片机的水温控制系统设计.docx
《基于单片机的水温控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的水温控制系统设计.docx(18页珍藏版)》请在冰点文库上搜索。
基于单片机的水温控制系统设计
单片机课程设计
课题名称:
基于单片机的水温控制系统设计
学院:
工学院
班级:
姓名:
学号:
指导老师:
第一章课题介绍
1.1课题名称
基于单片机的温度控制系统
1.2选题背景
单片机温度控制系统是单片机控制的一项简单应用。
近几年来单片机因其独特的,方便,快捷的优势被广泛的应用于各个领域之中。
它的技术指标有:
以AT89C52系列单片机为核心部件、以数字电路和模拟电路为硬件基础、以汇编语言为软件实现语言。
1.3功能概述
在该环境温度控制系统中,单片机作为核心部件进行检测控制,增强了设计的通用性,适时性。
温度控制分为升温和降温控制,升温控制和降温控制分别采用继电器来控制外部的升温和降温设备。
软件部分采用流程图来表示,对各个子程序进行说明,包括控制算法,偏差计算等。
控制是否升温或降温。
第二章系统总体设计及方案
2.1单片机的介绍
随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时/计数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,因此单片机早期的含义称为单片微型计算机,直译为单片机。
它的特点主要有:
具有优异的性能价格比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗。
2.2单片机的基本组成
它由CPU、存储器(包括RAM和ROM)、I/O接口、定时/计数器、中断控制功能等均集成在一块芯片上,片内各功能通过内部总线相互连接起来。
输入/输出引脚P0、P1、P2、P3的功能:
P0.0~P0.7(32~39脚):
P0口是一个8位漏极开路型双向I/O端口。
在访问片外存储器时,它分时作低8位地址和8位双向数据总线用。
在EPROM编程时,由P0输入指令字节,而在验证程序时,则输出指令字节。
验证程序时,要求外接上拉电阻。
P0能以吸收电流的方式驱动8个LSTTL负载。
P1.0~P1.7(1~8脚):
P1是一上带内部上拉电阻的8位双向I/O口。
在EPROM编程和验证程序时,由它输入低8位地址。
P1能驱动4个LSTTL负载。
P2.0~P2.7(21~28脚):
P2也是一上带内部上拉电阻的8位双向I/O口。
在访问外部存储器时,由它输出高8位地址。
在对EPROM编程和程序验证时,由它输入高8位地址。
P2可以驱动4个LSTTL负载。
P3.0~P3.7(10~17脚):
P3也是一上带内部上拉电阻的双向I/O口。
在MCS-52中,这8个引脚还用于专门的第二功能。
P3能驱动4个LSTTL负载。
P3.0RXD(串行口输入)
P3.1TXD(串行口输出)
P3.2INT0(外部中断0输入)
P3.3INT1(外部中断1输入)
P3.4T0(定时器0的外部输入)
P3.5T1(定时器1的外部输入)
P3.6WR(片外数据存储器写选通)
P3.7RD(片外数据存储器读选通)
2.3设计方案:
采用AT89C52单片机作控制器,温度传感器选用DS18B20来设计数字温度计,系统由5个模块组成:
主控制器、测温电路、显示电路、控制电路、报警及指示电路。
主控制器由单片机AT89C52实现,测温电路由DS18B20温度传感器实现,显示电路由液晶显示屏显示,,报警指示电路由蜂鸣器和发光二级管构成,控制电路由按键构成。
本设计所使用传感器与传统的相比,具有读数方便,测温范围广,测温准确等特点,其输出温度采用数字显示,主要用于对温度的精度要求较高的场所,或科研实验室使用,并且加有报警装置,超过限制温度可发出报警信号,还可以调整报警上下限温度。
该设计控制器使用单片机AT89C51,测温传感器使用DS18B20,用液晶显示屏实现温度显示,能准确达到以上要求。
第三章电路设计
3.1时钟电路设计
图3-1时钟电路图
3.2系统复位电路
图3-2复位电路
3.3温度检测电路设计
本次设计所采用的温度传感器为DS18B20,无需A/D转换,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。
图3-3DS18B20与STC89C52单片机的连接
3.4温控电路
图3-4温控电路
3.5按键电路设计
键盘共有三个键,判断K2-K4键是否按下,可采用软件查询和中断的方法,当某个键按下时,低电平有效。
3个键K2-K4的功能定义如表所示。
K2-K4键的定义
按键
键名
功能
K2
功能转换键
此键按下,显示温度设定值,按键松开,显示当前温度
K3
加1键
设定温度值加1
K4
减1键
设定温度值减1
图3-5按键电路
3.6主控电路设计
图3-6主控电路
第四章硬件设计
4.1系统结构框图
图4-1系统硬件总体框图
该系统由核心部件AT89C51来处理从键盘输入电路和温度采集电路送入的数据,并通过温度显示电路进行温度显示,由温度控制电路来进行相应的升温或降温的操作。
第五章软件设计
5.1主程序流程图
根据所学知识,实现本系统的软件部分将使用汇编语言,要配合硬件部分实现输入一个需要恒定的温度值和偏差温度,与从温度传感器所获取的当前实际温度相比较,并向温度控制执行电路发出升温或降温的命令,在这一过程中将随时显示当前温度值和设置的温度值。
其主要实现的部分包括:
键盘输入、温度采集、数据转换、动态显示、温度控制等。
主程序流程图如图5-1所示。
图5-1主程序流程图
5.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
图5-2读温度流程图
第六章总结
通过做本课题,使我们了解传感器的基本理论知识,更深入的了解单片机的开发应用和PC编程控制。
为以后从事单片机软硬件产品的设计开发、PC软件开发打下了良好的基础,树立独立从事产品研发的信心。
同时也培养了我们认真的做事态度。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
从得到题目到查找资料,从对题目的研究设定到电路图的设计,电路图的设计到程序设计……在这一个充满挑战伴随挫折,充满热情伴随打击的过程中,我们感触颇深,它是对我们的钻研精神,创新精神,面对困难的心态,做事的毅力和耐心的考验。
我们在这个过程中深刻的感受到了做设计的意义所在,和我们一样真正投入了身心去做的人也一定会有同样的感触。
参考文献:
[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:
北京航空航天大学出版社,1998
[2] 李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994
[3] 江力.单片机原理与应用技术.清华大学出版社.2006
[4] 蔡美琴等.MCS一51系列单片机系统及其应用[M].北京:
高等教育出版社,1999.
[5]王树勋.MCS一51单片微型计算机原理与开发.北京:
机械工业出版社,1995
[6]何希才.传感器及其应用电路.北京:
电子工业出版社,2001
附录一主程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^2;//ds18b20与单片机连接口
sbitRS=P1^0;//引脚
sbitRW=P1^1;
sbitEN=P1^2;
sbitPSB=P1^6;
sbitzeng=P3^4;
sbitjian=P3^5;
sbitwarn=P2^0;//报警指示灯
sbitbeep=P1^5;//蜂鸣器
sbithigh=P2^7;//温度上限设置指示灯
sbitlow=P2^6;//温度下限设置指示灯
unsignedcharcodestr1[]={"TEMPERATURE:
C"};
unsignedcharcodestr2[]={""};
bitflag;
uchardatadisdata[5];
uinttvalue;//温度值
uchartflag;//温度正负标志
uintsetvalue;//设置温度
/*******************lcd1602程序**************************/
voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)
{unsignedinti,j;
for(i=0;i for(j=0;j<100;j++); } voidwr_com(unsignedcharcom)//写指令// {delay1ms (1); RS=0; RW=0; EN=0; P0=com; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidwr_dat(unsignedchardat)//写数据// { RS=1; RW=0; EN=0; P0=dat; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidlcd_init()//初始化设置// {delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } voiddisplay(unsignedchar*p)//显示// { while(*p! ='\0') { wr_dat(*p); p++; delay1ms (1); } } init_play()//初始化显示 {lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } /*******************ds18b20程序************************/ voiddelay_18B20(unsignedinti)//延时1微秒 { while(i--); } voidds1820rst()/*ds18b20复位*/ {unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(4);//延时 DQ=0;//DQ拉低 delay_18B20(100);//精确延时大于480us DQ=1;//拉高 delay_18B20(40); } uchards1820rd()/*读数据*/ {unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) {DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } voidds1820wr(ucharwdata)/*写数据*/ {unsignedchari=0; for(i=8;i>0;i--) {DQ=0;//给脉冲信号 DQ=wdata&0x01; delay_18B20(10); DQ=1;//给脉冲信号 wdata>>=1; } voidkey_trans()interrupt2 {flag=1; } read_temp()/*读取温度值并转换*/ {uchara,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue>0x0&&tvalue<0x032){tflag=0;} tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); } /********************************************************/ voidds1820disp(uintvalue)//温度值显示 {ucharflagdat; disdata[0]=value/1000+0x30;//百位数 disdata[1]=value%1000/100+0x30;//十位数 disdata[2]=value%100/10+0x30;//个位数 disdata[3]=value%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号: if(disdata[0]==0x30) {disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) {disdata[1]=0x20;//如果百位为0,十位为0也不显示 } } wr_com(0xc0); wr_dat(flagdat);//显示符号位 wr_com(0xc1); wr_dat(disdata[0]);//显示百位 wr_com(0xc2); wr_dat(disdata[1]);//显示十位 wr_com(0xc3); wr_dat(disdata[2]);//显示个位 wr_com(0xc4); wr_dat(0x2e);//显示小数点 wr_com(0xc5); wr_dat(disdata[3]);//显示小数位 } /********************beep蜂鸣器**********************/ voidbeeper()//报警函数 {chari; beep=1; for(i=0;i<10;i++) {beep=! beep;//蜂鸣器报警 delay1ms(100); } } /*******************interrupt******************/ T0_int()interrupt1 {read_temp();//读取温度 TH0=(65536-50000)/256; TL0=(65536-50000)%256; /***************主程序****************************/ voidmain() {zeng=1;//增1 jian=1;//减1 low=1; high=1; setvalue=25;//设置初始温度25度 IP=0x04; IE=0x84; TMOD=0x01; TH0=(65536-1000)/256;//定时器赋初值TH0定时时间为1ms TL0=(65536-1000)%256;//求余运算,因为低八位最大能装255 ET0=1;//允许定时器T0中断 TR0=1;//开定时器 setvalue=setvalue*10;//设置温度扩大10倍 init_play();//初始化显示 while (1) { if(flag==1)//查询INT1键按下显示设置温度 {ds1820disp(setvalue);//显示设置温度 flag=0; } elseif(zeng==0)//加键按下 {delay1ms(500); setvalue++;//设置温度加1 if(setvalue>500)//如果设置温度>50度 setvalue=250;//设置温度恢复初始温度25度 ds1820disp(setvalue);//显示设置温度 } elseif(jian==0)//减键按下 {delay1ms(500); setvalue--;//设置温度减1 if(setvalue<250)//如果设置温度<25度 setvalue=250;//设置温度恢复初始温度25度 ds1820disp(setvalue); } else{ds1820disp(tvalue);//显示采集温度 if(tvalue>350){high=0;beeper();high=1;}//温度超过35度,蜂鸣器报警 if(tvalue<240){low=0;beeper();low=1;}//温度低于24度,蜂鸣器报警 } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 水温 控制系统 设计