水温测量课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

水温测量

摘要:设计一种基于AT89C51单片机的温度测量及报警电路,该电路采用DS18B20作为温度监测元件,测量范围0℃-~+100℃,使用LED模块显示,能设置温度报警上下限。

关键词:温度测量;DS18B20;AT89C51

1. 引言

1.1 问题的提出

随着人们生活水平的提高,对生活环境的要求也越来越高,家用电器越来越趋向于自动控制控制乃至于智能控制,针对目前家庭的实际需要,自动控制水温报警系统比较方便实用,本文通过51系列单片机来实现一种控制水温报警系统的设计。

1.2 设计目的

1. 巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。

2. 培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。

3. 通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。

2. 系统设计与原理

2.1 结构设计与分析[1]

系统基本方框图

1.主控制器

图1:AT89C51单片机部分

单片机A T89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。

2.温度传感器

图2:数字温度传感器DS18B20

温度传感器采用DS18B20温度传感器。DS18B20输出信号全数字化。便于单片机处理及控制,在0—100 摄氏度时,最大线形偏差小于1 摄氏度,采用单总线的数据传输,可直接与计算机连接。

3.报警电路

图3:上下限报警电路

采用两个LED发光二级管,超出设定范围二极管发光。

4.显示电路

图4:LED显示模块

显示电路采用LED液晶显示数码管,从P3口RXD,TXD串口输出段码。显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。

3. 设计结果与数据

3.1 单元电路调试

图5:程序调试、编译

图6:LED测试正常图7:温度报警显示正常

3.2 系统联调

1.当温度在正常范围内时,LED显示温度,二极管不发光

2.当温度低于报警下限(40°C)时,LED显示温度,绿色二极管发光。

3.当温度高于报警上限(90°C)时,LED显示温度,红色二极管发光。

4. 结论与心得

4.1 设计结论

4.2 心得

参考文献

[1] 李群芳,张士军,黄建.单片微型计算机与接口技术[M].第三版,北京:电子工业出版社,

2008.5

[2] 胡键.单片机原理及接口技术实践教程[M].第一版,北京:机械工业出版社,2004.8

[3] 彭伟.单片机C语言程序设计实训100例:基于8051+Proteus仿真[M].第一版,北京:电子工

业出版社,2009.6

附件:

完整电路图

程序:

#include

#define uchar unsigned char

#define uint unsigned int

uchar i;

sbit lcdrs=P3^0;

sbit lcdrw=P3^1;

sbit lcden=P3^2;

sbit d1=P1^0;

sbit d2=P1^1;

uchar code t0[]="the temperature ";

uchar code t1[]=" is ";

uchar code wendu[]="0123456789"; //利用一个温度表解决温度显示乱码sbit DQ = P3^7;//定义ds18B20总线IO

//液晶显示模块

void delay(uint z)

{

uint x,y;

for(x=100;x>1;x--)

for(y=z;y>1;y--);

}

void write_com(uchar com) {

lcdrs=0;

P2=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_date(uchar date) {

lcdrs=1;

P2=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init_lcd()

{

lcden=0;

lcdrw=0;

write_com(0x38);

write_com(0x01);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

for(i=0;i<16;i++)

{

write_date(t0[i]);

delay(0);

}

write_com(0x80+0x40);

for(i=0;i<16;i++)

{

write_date(t1[i]);

delay(0);

}

}

//温度采集模块

void tmpDelay(int num)//延时函数

{

while(num--) ;

}

/******************************************************************************/ void Init_DS18B20()//初始化ds1820

{

unsigned char x=0;

DQ = 1; //DQ复位

tmpDelay(8); //稍做延时

DQ = 0; //单片机将DQ拉低

tmpDelay(80); //精确延时大于 480us

DQ = 1; //拉高总线

tmpDelay(14);

x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败

tmpDelay(20);

}

unsigned char ReadOneChar()//读一个字节

{

unsigned char i=0;

相关文档
最新文档