课程设计--电加热水温控制系统

湖南文理学院课程设计报告

课程名称: 自动化专业控制系统课程设计 课题名称: 电加热水温控制系统 系 部: 电气与信息工程学院 专业班级:学生姓名:指导教师:完成时间: 2012年12月18日 报告成绩:

目录

摘要…………………………………………………………………………………..2 Abstract …………………………………………………………………... ………3 第一章 系统设计…………………………………………………………………4

1.1 项目概要 ………………………………………………………………………4 1.2 设计任务和要求 ………………………………………………………………4

第二章 硬件设计 ……………………………………………………………. ….5

2.1 硬件设计概要 …………………………………………………………………5 2.2 信息处理模块 …………………………………………………………………5 2.3 温度采集模块 …………………………………………………………………6 2.3.1 传感器DS18B20简介 …………………………………………………….6 2.3.2 实验模拟电路图 ………………………………………………………….6 2.3.3 程序流程图 ……………………………………………………………….7 2.4 控制调节模块 …………………………………………………………………9 2.4.1 升温调节系统 ………………………………………………………... ….10 2.4.2 温度上下限调节系统 …………………………………………….. …. ….10 2.5 显示模块 …………………………………………………………………... …12

第三章 仿真显示成果 …………………………………………………... ……13 实习总结 ………………………………………………………………………….15 致谢 ………………………………………………………………………………..16 参考文献 ……………………………………………………………………. ……17 附录 ……………………………………………………………………………. ….18

1、原理图 ……………………………….. …………………………………. ……..18 2、源程序 ………………………………. ………………………………. ……. …..19

摘要:在现代工业生产中,温度是常用的测量被控因素。本设计是基于51单片

机控制,将DS18b20温度传感器实时温度转化,并通过1602液晶对温度实行实时显示,并通过加热片(PWM 波,改变其占空比)加热与步进电机降温逐次逼近的方式,将温度保持在设定温度,通过按键调节温度报警区域,实现对温度在0℃-99℃控制的自动化。实验结果表明此结构完全可行,温度偏差可达0.1℃以内。 关键字: 单片机;传感器;温控;DS18b20

Abstract : In modern industrial production, the temperature is

commonly measured controlled factors.The design is based on the 51 SCM control, the DS18b20 temperature sensor real time temperature transformation, and through the 1602 LCD on the temperature of the real-time display, and by heating the sheet (PWM wave, changing its duty cycle) heating and stepper motor cooling successive approximation approach, keeping the temperature at the set temperature, through the buttons adjust temperature alarm area, the temperature at 0 ℃ -99 ℃ control automation.The experimental results show that this structure is completely feasible, the deviation of temperature can reach 0.1 DEG C. Key word: monolithic integrated circuit ; Sensors; Temperature control; DS18b20

1.1 项目概要

温度控制系统无论是工业生产过程,还是日常生活都起着非常重要的作用,

过低或过高的温度环境不仅是一种资源的浪费,同时也会对机器和工作人员的寿命产生严重影响,极有可能造成严重的经济财产损失,给生活生产带来许多利的因素,基于AT89S52的单片机温度控制系统与传统的温度控制相比具有操作方便、价价格便宜、精确度高和开展容易等优点,因此市场前景好。

1.2设计任务和要求:

1、采用DS18B20作为温度传感器进行温度检测。 2、对采集温度进行显示(显示温度分辨率0.1℃); 3、采集温度数值应采用数字滤波措施,保证显示数据稳定。

4、设计相应的温度控制电路,根据测得的温度情况对加热器进行控制,将温度保持在设定温度。

5、通过按键设置温度上下限,超限通过LED 、蜂鸣器报警。

2.1 硬件设计概要

根据需求,我们将系统分为五个模块,信息处理模块,温度采集模块、控制调节模块、报警电路模块,显示模块。

2.2 信息处理模块

AT89C52是ATMEL 公司的以8031核构成的8位Flash 单片机系列。这个系列

单片机的最大特点就是在片内含有Flash 存储器,AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB 可在线编程闪存。该器件采用Atmel 公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI 串行口改写或用同用的非易失性存储器改写。通过把通用的8位CPU 与可在线下载的Flash 集成在一个芯片上,AT89S52便成为一个高效的微型计算机。它的应用范围广,可用于解决复杂的控制问题,且成本较低。单片机模块如图(1) 所示。

图(1)单片机模块

2.3 温度采集模块

2.3.1传感器DS18b20简介

DALLAS 最新单线数字温度传感器DS18b20简介新的“一线器件”,体积更小、

适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器DS18b20是世界上第一片支持“一线总线”接口温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新的概念。DS18b20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18b20也支持“一线总线”接口,测量温度范围为-55℃ ~ +125℃,在-10℃~ +85

℃范围内,精度为0.5℃。DS18b20的精度较差为2℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测量类消费电子产品等。与前一代产品不同,新的产品支持3V~ 5V 的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。DS18b20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH 和TL 、配置寄存器。DS18b20的实验板原理接线图如图(2):

图(2) DS18b20的实验板接线图

其中:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)

2.3.2实验模拟电路图

温度检测控制模拟电路图ds18b20原件及其连线如图(3)温度此传感器上

显示的温度同步显示到LED 显示器上,并有加温,减温按钮。

图(3)温度检测控制模拟电路图

2.3.3程序流程图

图(4)主程序流程图

图(5)初始化子程序流程图

图(6)读按键的程序流程图

2.4控制调节模块

2.4.1升温调节系统

通过继电器的开合来控制加热片电路的通断,来达到设温效果,我们预设温度

为25度,当温度低于25度时,单片机P3.6引脚输出高电平,继电器导通,对温度传感器加热,加热模块如图(7)所示。

图(7)加温控制电路

2.4.2温度上下限调节系统

通过按键控制键选着调节对象,通过上升下降调节值大小,模拟电路图如

图(78主控电路:我们设定温度为0--30度,为表示方便,这里让,控制开关,升温开关,降温开关分别为,k1,k2,k3,开始显示的是当前温度,K1主控开关,用来控制进入的是当前温度,温度上限,下限的调节界面。按k1,一次进入三个界面。按K2为加1开关,按一下,加1,k3减1开关,按一下,减1. 例如:开始时显示的是当前温度界面,按下k1进入高温设定界面,显示器上显示当前温度和温度上限,按k2,上限加1,按k3,上限减1,再按k1进入显现设定界面,显示器显示当前温度,和温度下限,按k2,下限加1,按k3,下限减1,再按k1,进入显示当前温度界面。如图(8) 2.4.3 报警电路系统

通过led 灯的闪烁以及蜂鸣器的鸣叫实现报警,如果温度超过上限灯D4亮,蜂鸣器鸣叫,低于下限灯D2亮,蜂鸣器鸣叫。常温D1亮如图(9)(10)。

图(8)温度设定开关

图(9)报警模块

图(10)P3.7接蜂鸣器

2.5显示模块

通过采集ds18b20的温度,同步显示到LED 显示器上,精确到小数点后第一位。

如下图

图(11)显示电路

第三章 仿真显示成果

3.1 运用proteus 仿真

图(12)开始启动时,显示学号

图(13)显示当前温度

图(14)温度低于低温下限,低温报警灯亮,蜂鸣器鸣叫

图(15)温度高于温度上限,高温报警灯亮,蜂鸣器鸣叫

实习总结

刚开始接触到题目,一头雾水,第一周,我从网上下载了,《基于8051+PROTEUS仿真100实例》这个文档,从最简单的点亮一个流水灯,让数码管显示数字开始,第一周就做了这些简单的例子,100例做了20多个。刚开始很慢,仿真模型里的原器件都不会找,编的程序编译时总出现报警、错误。一遇到错误我们就慌了神了,所以起步很难。后来在老师和同学的帮助下,慢慢积累,知道了常见的报警和错误的解决方法,编完调试成功20个例子后,算是对单片机有了一定的基础。但这时一周已经过去了,别的小组已经仿真通过,开始实际运行了,而我们这组才开始。

第二周开始了,第一天我们没做设计,把各个小组的程序,电路图都拿来看,不懂得就请他们帮忙讲解。由于前面有了知识,一些模块都看得懂,学得很快了。发现主要是把各个模块融合到一起,头文件写到最前面,通过函数的调用! 给单片机接口高低电平,来实现功能。这正好是我们的强项,一星期20个例子的功劳。第二天我们开始自己编程,但是融合的过程中总出现错误,要嘛是变量没定义,要嘛是头文件重复!还有一个,报警电路的数码管总是不亮,但单片机对应的接口有高低电平的变化,实际电路板上也成功,这个问题困扰了我们很久,怎么办都不亮,当时有想砸电脑的冲动,后来还是解决了,原来,是标号标错了位置,一点小问题,困扰了我们2天。当解决这个问题时,那心灵的喜悦是这辈子都忘不了的!

通过两周的实习,我们从一个小白成长为一个对单片机入了门,并能实现简单的编程,还能解决实际问题的小人物了!虽然过程很苦,每天对着电脑,就吃饭和上洗手间离开板凳!一直盯着屏幕看!不过2周熬过来了,收获蛮大的!例如后来我又在我们的程序中加入了降温程序!温度高,调动电动机吹风降温! 感觉无论做什么事都要吃得了苦受得了罪,天下没有什么事是难的,只有懒惰的人,只要用心去做,什么事都能成功!

致谢

两周的实习中,我遇到了许许多多的困难,但我能走过来,这和我组成员共同研究,共同讨论问题的辛勤是分不开的,灰心时我们相互鼓励,相互打气,。感谢同组成员。开始接触单片机,我是一个小白级人物,谢谢把我领入门的同班同学们,当我有问题请教时,他们会放下手头的工作,倾心为我解答,程序编译错误时,他们会帮我一起看提示,该错误!谢谢同班同学们!

当然,我们实习时,老师一直陪伴着我们,尽管我没有问过老师问题,老师也没有帮我调试程序,但还是要谢谢刘老师,吕老师,你和我们在一起,无形中给了我们莫大的动力!同时也起到了监督我们的作用,使我们不能够偷懒,不会出现有一组同学完成了,那么全班都完成了的情况!正由于你们的严格的要求,我们这次实习才能圆满的完成,同学们都做出了想要的结果。

参考文献

[1] 郭天祥. 新概念51单片机C 语音教程——入门提高开发拓展攻略 京:电子工业出版社,2009.

[2] 韩广兴. 电子元器件与实用电路基础[M].北京:电子工业出版社,2005. [3] 方大千,朱丽. 电子控制系统装置制作入门[M].北京:国防出版社,2006. [4] 刘向举, 刘丽娜. 基于单片机的智能温度测控系统的设计[J]. 齐齐哈尔大 (自然科学版). 2012(03)

[5] 黄文力, 邓小磊. DS18B20数字温度传感器接口程序的时序[J]. 仪器仪表 2011(06)

[6] 黄晓林. 一种实用型智能恒温控制系统设计[J]. 自动化技术与应用. 2011(11)

[7] 王文, 王直. 基于ARM 和DS18B20的温度监测系统[J]. 电子设计工程.

2011(20)

用户. 学学报

[M].北 京:北

[8] 陈锡华, 贾磊磊. 温度传感器DS18B20序列号批量搜索算法[J]. 单片机与 嵌入式系统应用. 2011(09)

附录:

Proteus

系统原理图

:

图(16)系统原理图

源程序:

#include #include #define uchar unsigned char #define uint unsigned int

sbit DQ=P3^3;//ds18b20与单片机连接口 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit keyadd=P1^4; sbit keydel=P1^5; sbit keyok=P1^6; sbit led_green=P2^3; sbit led_yellow=P2^4; sbit led_red=P2^5; sbit shengwen=P3^6; sbit jiangwen=P3^5; sbit BEEP = P3 ^ 7;

uchar code str1[]={" Temperature is "}; uchar code str2[]={""};

uchar code str3[]={"set_hightemp: "}; uchar code str4[]={"set_lowtemp: "}; uchar code str5[]={"studentN0: "}; uchar code str6[]={"32209104 "};

uchar data disdata[5];

uchar set_hightemp=33,set_lowtemp=0;

uchar p=0;

uchar aa[2];

uint tvalue;//温度值

uchar tflag;//温度正负标志

//*************************lcd1602程序**************************/ void delay1ms(uint ms)//延时1毫秒

{

}

void delay1s(uint s)

{

}

//////////////////////[***********][***********]1 报警程序

void baojing(void)

{

unsigned int j;

for (j = 49; j > 0; j--)//响30ms

{

BEEP = ~BEEP; //输出频率800Hz P0 = 0x7E; //点亮D00 和D07 delay1ms(10); //延时310us

delay1ms(10); //延时310us

}

uint i,j; for(i=0;i

}

/////////////////////[***********][***********]1 报警程序

void wr_com(uchar com)//写指令//

{

delay1ms(1);

RS=0;

RW=0;

EN=0;

P0=com; //

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void wr_dat(uchar dat)//写数据//

{

delay1ms(1);

RS=1;

RW=0;

EN=0;

P0=dat;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void lcd_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);

}

void display(uchar *p)//显示//

{

while(*p!='\0')

{

wr_dat(*p);

p++;

delay1ms(1);

}

}

void init_play()//初始化显示

{

lcd_init();

wr_com(0x80);

display(str5);

wr_com(0xc0);

display(str6);

delay1s(3);

lcd_init();

wr_com(0x80);

display(str1);

wr_com(0xc0);

display(str2);

}

/***************************ds18b20程序****************************/ void delay_18B20(uint i)//延时1微秒

{

while(i--);

}

void ds1820rst()/*ds1820复位*/

{

}

uchar ds1820rd()/*读数据*/

{

uchar x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10);

}

return(dat);

}

void ds1820wr(uchar wdata)/*写数据*/

{

uchar i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = wdata&0x01;

delay_18B20(10);

DQ = 1;

wdata>>=1;

}

}

read_temp()/*读取温度值并转换*/

{

uchar a,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue

} if(tvalue

/*******************************************************************/ void ds1820disp()//温度值显示

{

uchar flagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) else flagdat=0x2d;//负温度显示负号:- flagdat=0x20;//正温度不显示符号 if(disdata[0]==0x30) { disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30)

}

} } disdata[1]=0x20;//如果百位为0,十位为0也不显示 wr_com(0xc0+4); wr_dat(flagdat);//显示符号位 wr_com(0xc1+4); wr_dat(disdata[0]);//显示百位 wr_com(0xc2+4); wr_dat(disdata[1]);//显示十位 wr_com(0xc3+4); wr_dat(disdata[2]);//显示个位 wr_com(0xc4+4); wr_dat(0x2e);//显示小数点 wr_com(0xc5+4); wr_dat(disdata[3]);//显示小数位

void key_count(uint ok)

{

wr_com(0x80); if(ok==1) d isplay(str3); else display(str4); wr_com(0x8d); wr_dat(aa[0]); wr_com(0x8e); wr_dat(aa[1]); if(keyadd==0) {

}

} if(keyadd==0) { } if(ok==1) set_hightemp++; else set_lowtemp++; while(!keyadd); else if(keydel==0) { delay1ms(5); if(keydel==0) { } if(ok==1) set_hightemp--; else set_lowtemp--; while(!keydel); }

void keyboard()

{

char ok=0; //if(p==0) set_hightemp=tvalue/10,set_lowtemp=tvalue/10; if(keyok==0) { delay1ms(5); if(keyok==0) { ok++;

p=1; while(ok==1) { aa[0]=set_hightemp/10+0x30; aa[1]=set_hightemp%10+0x30; key_count(1); if(keyok==0) { delay1ms(5); if(keyok==0) { ok++; while(!keyok); delay1ms(10); while(ok==2) { aa[0]=set_lowtemp/10+0x30; aa[1]=set_lowtemp%10+0x30; key_count(2); if(keyok==0) { delay1ms(5); if(keyok==0) { ok=0; while(!keyok); delay1ms(10); wr_com(0x80); display(str1);

}

///////////////////**********************/////////////////////// 升温程序 void led_shengwen(void)

{

uchar i;

shengwen=0; if( tvalue/10

{

for(i=0;i

{ shengwen=1;

delay1ms(100);

}

}

}

//////////////////***********************///////////////////////// 升温程序

void led_temp()

{ if(tvalue/10

{ } else if(tvalue/10 > set_hightemp) { led_red=0; led_green=1; led_yellow=1; delay1ms(10); baojing(); led_red=1; led_green=1; led_yellow=0; delay1ms(10); baojing(); } else if((set_lowtemp

}

} led_yellow=1; delay1ms(10);

//********************主程序***********************************// void main()

{

while(1) { P2=0xff; init_play();//初始化显示 read_temp();//读取温度

ds1820disp();//显示

keyboard(); led_temp(); if( tvalue/10

if (tvalue/10>=30)

}

31 } led_jiangwen();

32

湖南文理学院课程设计报告

课程名称: 自动化专业控制系统课程设计 课题名称: 电加热水温控制系统 系 部: 电气与信息工程学院 专业班级:学生姓名:指导教师:完成时间: 2012年12月18日 报告成绩:

目录

摘要…………………………………………………………………………………..2 Abstract …………………………………………………………………... ………3 第一章 系统设计…………………………………………………………………4

1.1 项目概要 ………………………………………………………………………4 1.2 设计任务和要求 ………………………………………………………………4

第二章 硬件设计 ……………………………………………………………. ….5

2.1 硬件设计概要 …………………………………………………………………5 2.2 信息处理模块 …………………………………………………………………5 2.3 温度采集模块 …………………………………………………………………6 2.3.1 传感器DS18B20简介 …………………………………………………….6 2.3.2 实验模拟电路图 ………………………………………………………….6 2.3.3 程序流程图 ……………………………………………………………….7 2.4 控制调节模块 …………………………………………………………………9 2.4.1 升温调节系统 ………………………………………………………... ….10 2.4.2 温度上下限调节系统 …………………………………………….. …. ….10 2.5 显示模块 …………………………………………………………………... …12

第三章 仿真显示成果 …………………………………………………... ……13 实习总结 ………………………………………………………………………….15 致谢 ………………………………………………………………………………..16 参考文献 ……………………………………………………………………. ……17 附录 ……………………………………………………………………………. ….18

1、原理图 ……………………………….. …………………………………. ……..18 2、源程序 ………………………………. ………………………………. ……. …..19

摘要:在现代工业生产中,温度是常用的测量被控因素。本设计是基于51单片

机控制,将DS18b20温度传感器实时温度转化,并通过1602液晶对温度实行实时显示,并通过加热片(PWM 波,改变其占空比)加热与步进电机降温逐次逼近的方式,将温度保持在设定温度,通过按键调节温度报警区域,实现对温度在0℃-99℃控制的自动化。实验结果表明此结构完全可行,温度偏差可达0.1℃以内。 关键字: 单片机;传感器;温控;DS18b20

Abstract : In modern industrial production, the temperature is

commonly measured controlled factors.The design is based on the 51 SCM control, the DS18b20 temperature sensor real time temperature transformation, and through the 1602 LCD on the temperature of the real-time display, and by heating the sheet (PWM wave, changing its duty cycle) heating and stepper motor cooling successive approximation approach, keeping the temperature at the set temperature, through the buttons adjust temperature alarm area, the temperature at 0 ℃ -99 ℃ control automation.The experimental results show that this structure is completely feasible, the deviation of temperature can reach 0.1 DEG C. Key word: monolithic integrated circuit ; Sensors; Temperature control; DS18b20

1.1 项目概要

温度控制系统无论是工业生产过程,还是日常生活都起着非常重要的作用,

过低或过高的温度环境不仅是一种资源的浪费,同时也会对机器和工作人员的寿命产生严重影响,极有可能造成严重的经济财产损失,给生活生产带来许多利的因素,基于AT89S52的单片机温度控制系统与传统的温度控制相比具有操作方便、价价格便宜、精确度高和开展容易等优点,因此市场前景好。

1.2设计任务和要求:

1、采用DS18B20作为温度传感器进行温度检测。 2、对采集温度进行显示(显示温度分辨率0.1℃); 3、采集温度数值应采用数字滤波措施,保证显示数据稳定。

4、设计相应的温度控制电路,根据测得的温度情况对加热器进行控制,将温度保持在设定温度。

5、通过按键设置温度上下限,超限通过LED 、蜂鸣器报警。

2.1 硬件设计概要

根据需求,我们将系统分为五个模块,信息处理模块,温度采集模块、控制调节模块、报警电路模块,显示模块。

2.2 信息处理模块

AT89C52是ATMEL 公司的以8031核构成的8位Flash 单片机系列。这个系列

单片机的最大特点就是在片内含有Flash 存储器,AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB 可在线编程闪存。该器件采用Atmel 公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI 串行口改写或用同用的非易失性存储器改写。通过把通用的8位CPU 与可在线下载的Flash 集成在一个芯片上,AT89S52便成为一个高效的微型计算机。它的应用范围广,可用于解决复杂的控制问题,且成本较低。单片机模块如图(1) 所示。

图(1)单片机模块

2.3 温度采集模块

2.3.1传感器DS18b20简介

DALLAS 最新单线数字温度传感器DS18b20简介新的“一线器件”,体积更小、

适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器DS18b20是世界上第一片支持“一线总线”接口温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新的概念。DS18b20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18b20也支持“一线总线”接口,测量温度范围为-55℃ ~ +125℃,在-10℃~ +85

℃范围内,精度为0.5℃。DS18b20的精度较差为2℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测量类消费电子产品等。与前一代产品不同,新的产品支持3V~ 5V 的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。DS18b20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH 和TL 、配置寄存器。DS18b20的实验板原理接线图如图(2):

图(2) DS18b20的实验板接线图

其中:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)

2.3.2实验模拟电路图

温度检测控制模拟电路图ds18b20原件及其连线如图(3)温度此传感器上

显示的温度同步显示到LED 显示器上,并有加温,减温按钮。

图(3)温度检测控制模拟电路图

2.3.3程序流程图

图(4)主程序流程图

图(5)初始化子程序流程图

图(6)读按键的程序流程图

2.4控制调节模块

2.4.1升温调节系统

通过继电器的开合来控制加热片电路的通断,来达到设温效果,我们预设温度

为25度,当温度低于25度时,单片机P3.6引脚输出高电平,继电器导通,对温度传感器加热,加热模块如图(7)所示。

图(7)加温控制电路

2.4.2温度上下限调节系统

通过按键控制键选着调节对象,通过上升下降调节值大小,模拟电路图如

图(78主控电路:我们设定温度为0--30度,为表示方便,这里让,控制开关,升温开关,降温开关分别为,k1,k2,k3,开始显示的是当前温度,K1主控开关,用来控制进入的是当前温度,温度上限,下限的调节界面。按k1,一次进入三个界面。按K2为加1开关,按一下,加1,k3减1开关,按一下,减1. 例如:开始时显示的是当前温度界面,按下k1进入高温设定界面,显示器上显示当前温度和温度上限,按k2,上限加1,按k3,上限减1,再按k1进入显现设定界面,显示器显示当前温度,和温度下限,按k2,下限加1,按k3,下限减1,再按k1,进入显示当前温度界面。如图(8) 2.4.3 报警电路系统

通过led 灯的闪烁以及蜂鸣器的鸣叫实现报警,如果温度超过上限灯D4亮,蜂鸣器鸣叫,低于下限灯D2亮,蜂鸣器鸣叫。常温D1亮如图(9)(10)。

图(8)温度设定开关

图(9)报警模块

图(10)P3.7接蜂鸣器

2.5显示模块

通过采集ds18b20的温度,同步显示到LED 显示器上,精确到小数点后第一位。

如下图

图(11)显示电路

第三章 仿真显示成果

3.1 运用proteus 仿真

图(12)开始启动时,显示学号

图(13)显示当前温度

图(14)温度低于低温下限,低温报警灯亮,蜂鸣器鸣叫

图(15)温度高于温度上限,高温报警灯亮,蜂鸣器鸣叫

实习总结

刚开始接触到题目,一头雾水,第一周,我从网上下载了,《基于8051+PROTEUS仿真100实例》这个文档,从最简单的点亮一个流水灯,让数码管显示数字开始,第一周就做了这些简单的例子,100例做了20多个。刚开始很慢,仿真模型里的原器件都不会找,编的程序编译时总出现报警、错误。一遇到错误我们就慌了神了,所以起步很难。后来在老师和同学的帮助下,慢慢积累,知道了常见的报警和错误的解决方法,编完调试成功20个例子后,算是对单片机有了一定的基础。但这时一周已经过去了,别的小组已经仿真通过,开始实际运行了,而我们这组才开始。

第二周开始了,第一天我们没做设计,把各个小组的程序,电路图都拿来看,不懂得就请他们帮忙讲解。由于前面有了知识,一些模块都看得懂,学得很快了。发现主要是把各个模块融合到一起,头文件写到最前面,通过函数的调用! 给单片机接口高低电平,来实现功能。这正好是我们的强项,一星期20个例子的功劳。第二天我们开始自己编程,但是融合的过程中总出现错误,要嘛是变量没定义,要嘛是头文件重复!还有一个,报警电路的数码管总是不亮,但单片机对应的接口有高低电平的变化,实际电路板上也成功,这个问题困扰了我们很久,怎么办都不亮,当时有想砸电脑的冲动,后来还是解决了,原来,是标号标错了位置,一点小问题,困扰了我们2天。当解决这个问题时,那心灵的喜悦是这辈子都忘不了的!

通过两周的实习,我们从一个小白成长为一个对单片机入了门,并能实现简单的编程,还能解决实际问题的小人物了!虽然过程很苦,每天对着电脑,就吃饭和上洗手间离开板凳!一直盯着屏幕看!不过2周熬过来了,收获蛮大的!例如后来我又在我们的程序中加入了降温程序!温度高,调动电动机吹风降温! 感觉无论做什么事都要吃得了苦受得了罪,天下没有什么事是难的,只有懒惰的人,只要用心去做,什么事都能成功!

致谢

两周的实习中,我遇到了许许多多的困难,但我能走过来,这和我组成员共同研究,共同讨论问题的辛勤是分不开的,灰心时我们相互鼓励,相互打气,。感谢同组成员。开始接触单片机,我是一个小白级人物,谢谢把我领入门的同班同学们,当我有问题请教时,他们会放下手头的工作,倾心为我解答,程序编译错误时,他们会帮我一起看提示,该错误!谢谢同班同学们!

当然,我们实习时,老师一直陪伴着我们,尽管我没有问过老师问题,老师也没有帮我调试程序,但还是要谢谢刘老师,吕老师,你和我们在一起,无形中给了我们莫大的动力!同时也起到了监督我们的作用,使我们不能够偷懒,不会出现有一组同学完成了,那么全班都完成了的情况!正由于你们的严格的要求,我们这次实习才能圆满的完成,同学们都做出了想要的结果。

参考文献

[1] 郭天祥. 新概念51单片机C 语音教程——入门提高开发拓展攻略 京:电子工业出版社,2009.

[2] 韩广兴. 电子元器件与实用电路基础[M].北京:电子工业出版社,2005. [3] 方大千,朱丽. 电子控制系统装置制作入门[M].北京:国防出版社,2006. [4] 刘向举, 刘丽娜. 基于单片机的智能温度测控系统的设计[J]. 齐齐哈尔大 (自然科学版). 2012(03)

[5] 黄文力, 邓小磊. DS18B20数字温度传感器接口程序的时序[J]. 仪器仪表 2011(06)

[6] 黄晓林. 一种实用型智能恒温控制系统设计[J]. 自动化技术与应用. 2011(11)

[7] 王文, 王直. 基于ARM 和DS18B20的温度监测系统[J]. 电子设计工程.

2011(20)

用户. 学学报

[M].北 京:北

[8] 陈锡华, 贾磊磊. 温度传感器DS18B20序列号批量搜索算法[J]. 单片机与 嵌入式系统应用. 2011(09)

附录:

Proteus

系统原理图

:

图(16)系统原理图

源程序:

#include #include #define uchar unsigned char #define uint unsigned int

sbit DQ=P3^3;//ds18b20与单片机连接口 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit keyadd=P1^4; sbit keydel=P1^5; sbit keyok=P1^6; sbit led_green=P2^3; sbit led_yellow=P2^4; sbit led_red=P2^5; sbit shengwen=P3^6; sbit jiangwen=P3^5; sbit BEEP = P3 ^ 7;

uchar code str1[]={" Temperature is "}; uchar code str2[]={""};

uchar code str3[]={"set_hightemp: "}; uchar code str4[]={"set_lowtemp: "}; uchar code str5[]={"studentN0: "}; uchar code str6[]={"32209104 "};

uchar data disdata[5];

uchar set_hightemp=33,set_lowtemp=0;

uchar p=0;

uchar aa[2];

uint tvalue;//温度值

uchar tflag;//温度正负标志

//*************************lcd1602程序**************************/ void delay1ms(uint ms)//延时1毫秒

{

}

void delay1s(uint s)

{

}

//////////////////////[***********][***********]1 报警程序

void baojing(void)

{

unsigned int j;

for (j = 49; j > 0; j--)//响30ms

{

BEEP = ~BEEP; //输出频率800Hz P0 = 0x7E; //点亮D00 和D07 delay1ms(10); //延时310us

delay1ms(10); //延时310us

}

uint i,j; for(i=0;i

}

/////////////////////[***********][***********]1 报警程序

void wr_com(uchar com)//写指令//

{

delay1ms(1);

RS=0;

RW=0;

EN=0;

P0=com; //

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void wr_dat(uchar dat)//写数据//

{

delay1ms(1);

RS=1;

RW=0;

EN=0;

P0=dat;

delay1ms(1);

EN=1;

delay1ms(1);

EN=0;

}

void lcd_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);

}

void display(uchar *p)//显示//

{

while(*p!='\0')

{

wr_dat(*p);

p++;

delay1ms(1);

}

}

void init_play()//初始化显示

{

lcd_init();

wr_com(0x80);

display(str5);

wr_com(0xc0);

display(str6);

delay1s(3);

lcd_init();

wr_com(0x80);

display(str1);

wr_com(0xc0);

display(str2);

}

/***************************ds18b20程序****************************/ void delay_18B20(uint i)//延时1微秒

{

while(i--);

}

void ds1820rst()/*ds1820复位*/

{

}

uchar ds1820rd()/*读数据*/

{

uchar x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10);

}

return(dat);

}

void ds1820wr(uchar wdata)/*写数据*/

{

uchar i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = wdata&0x01;

delay_18B20(10);

DQ = 1;

wdata>>=1;

}

}

read_temp()/*读取温度值并转换*/

{

uchar a,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue

} if(tvalue

/*******************************************************************/ void ds1820disp()//温度值显示

{

uchar flagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) else flagdat=0x2d;//负温度显示负号:- flagdat=0x20;//正温度不显示符号 if(disdata[0]==0x30) { disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30)

}

} } disdata[1]=0x20;//如果百位为0,十位为0也不显示 wr_com(0xc0+4); wr_dat(flagdat);//显示符号位 wr_com(0xc1+4); wr_dat(disdata[0]);//显示百位 wr_com(0xc2+4); wr_dat(disdata[1]);//显示十位 wr_com(0xc3+4); wr_dat(disdata[2]);//显示个位 wr_com(0xc4+4); wr_dat(0x2e);//显示小数点 wr_com(0xc5+4); wr_dat(disdata[3]);//显示小数位

void key_count(uint ok)

{

wr_com(0x80); if(ok==1) d isplay(str3); else display(str4); wr_com(0x8d); wr_dat(aa[0]); wr_com(0x8e); wr_dat(aa[1]); if(keyadd==0) {

}

} if(keyadd==0) { } if(ok==1) set_hightemp++; else set_lowtemp++; while(!keyadd); else if(keydel==0) { delay1ms(5); if(keydel==0) { } if(ok==1) set_hightemp--; else set_lowtemp--; while(!keydel); }

void keyboard()

{

char ok=0; //if(p==0) set_hightemp=tvalue/10,set_lowtemp=tvalue/10; if(keyok==0) { delay1ms(5); if(keyok==0) { ok++;

p=1; while(ok==1) { aa[0]=set_hightemp/10+0x30; aa[1]=set_hightemp%10+0x30; key_count(1); if(keyok==0) { delay1ms(5); if(keyok==0) { ok++; while(!keyok); delay1ms(10); while(ok==2) { aa[0]=set_lowtemp/10+0x30; aa[1]=set_lowtemp%10+0x30; key_count(2); if(keyok==0) { delay1ms(5); if(keyok==0) { ok=0; while(!keyok); delay1ms(10); wr_com(0x80); display(str1);

}

///////////////////**********************/////////////////////// 升温程序 void led_shengwen(void)

{

uchar i;

shengwen=0; if( tvalue/10

{

for(i=0;i

{ shengwen=1;

delay1ms(100);

}

}

}

//////////////////***********************///////////////////////// 升温程序

void led_temp()

{ if(tvalue/10

{ } else if(tvalue/10 > set_hightemp) { led_red=0; led_green=1; led_yellow=1; delay1ms(10); baojing(); led_red=1; led_green=1; led_yellow=0; delay1ms(10); baojing(); } else if((set_lowtemp

}

} led_yellow=1; delay1ms(10);

//********************主程序***********************************// void main()

{

while(1) { P2=0xff; init_play();//初始化显示 read_temp();//读取温度

ds1820disp();//显示

keyboard(); led_temp(); if( tvalue/10

if (tvalue/10>=30)

}

31 } led_jiangwen();

32


相关内容

  • 太阳能热利用系统 课程设计
  • 淮 海 工 学 院 课程设计报告书 题 目: <太阳能热利用系统>课程设计 学 院: 理学院 专 业: 光信息科学与技术 班 级: 光能101 姓 名: X X 学 号: 2013年 12 月 16 日 目 录 一.设计资料提供与使用要求„„„„„„„„„„„„„„3 二.依据标准„„„ ...

  • 自动水位水温控制系统设计
  • 湖南电气职业技术学院 课程设计报告 系别: 专业:班级组别:学生姓名:指导老师: 电气信息工程系 电气及自动化 09自动化01班 刘其涛 余立 方译民 李辉 张龙慧 2011年3月28日 至2011年4月8日 目录 一. 设计题目及要求--------- 2 二. 方案论证及选择--------- ...

  • 汽轮机课程设计
  • 目录 1. 设计基本参数选择.............................................................................................5 1.1 汽轮机类型 ............................... ...

  • 热水器温度控制
  • <计算机接口技术> 课程设计 题目:热水器温度控制与监测 学生姓名: 黄诗宗 学 号: 100120007 专业班级:电气学院电机电器研2010级 指导教师: 江和 二○一○ 年 五 月 二十七 日 目录 1 意义与要求.................................. ...

  • 基于单片机的电热水器控制器设计
  • 毕业论文 课程设计题目:基于单片机的电热水器 控制器设计 学 院:机械与电子工程学院 学生姓名:彭晓武 班 级:080621 学 号:08062137 指导教师:付志坚 2011年11月1日 摘 要 本文设计的控制器采用AT89S51单片机作为控制核心来设计智能电热水器.本设计也对单片机控制电热水器 ...

  • AT89C51单片机水温控制系统
  • 张鹏:基于AT89C51单片机的水温控制系统设计 正文第 1 页 共 25 页 1 引 言 1.1 单片机 1.1.1 单片机简介 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 随机存储器RAM .只读存储器ROM .多种I/O口和中断系统.定时器/计时 ...

  • 如何体现实验的价值
  • 全县小学科学"实验课"课堂教学观摩研讨活动 发 言 稿 各位领导,老师,大家上午好: 科学学科的理念:学科思想的渗透远比传授学科知识重要! 怎么理解这句话,举个例子:玻璃杯倒满水,问学生:水满了吗?满了.加一个硬币.发现什么?水没有溢出来!说明什么?原来水并没有满!现在呢,水满不 ...

  • 基于单片机水温控制系统
  • 摘要 本文介绍了基于AT89S52单片机水温测量及控制系统的设计.系统硬 件部分由单片机电路.温度采集电路.键盘电路.LED 显示电路.继电器控制电路等组成.软件从设计思路.软件系统框图出发,逐一分析各模块程序算法的实现,通过C 语言编写出满足任务需求的程序.本系统采用数字式温度传感器DS18B20 ...

  • 大学物理学实验指导书.
  • 大学物理学实验指导书 大学物理实验 力学部分 实验一 长度与体积的测量 实验类型:验证 实验类别:专业主干课 实验学时:2 所属课程:大学物理 所涉及的课程和知识点:误差原理 有效数字 一.实验目的 通过本实验的学习,使学生掌握测长度的几种常用仪器的使用,并会正确读数.练习作好记录和误差计算. 二. ...