课程设计主从式温度监测报警与控制系统Word格式.docx

上传人:b****8 文档编号:22735351 上传时间:2023-02-05 格式:DOCX 页数:17 大小:669.24KB
下载 相关 举报
课程设计主从式温度监测报警与控制系统Word格式.docx_第1页
第1页 / 共17页
课程设计主从式温度监测报警与控制系统Word格式.docx_第2页
第2页 / 共17页
课程设计主从式温度监测报警与控制系统Word格式.docx_第3页
第3页 / 共17页
课程设计主从式温度监测报警与控制系统Word格式.docx_第4页
第4页 / 共17页
课程设计主从式温度监测报警与控制系统Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

课程设计主从式温度监测报警与控制系统Word格式.docx

《课程设计主从式温度监测报警与控制系统Word格式.docx》由会员分享,可在线阅读,更多相关《课程设计主从式温度监测报警与控制系统Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

课程设计主从式温度监测报警与控制系统Word格式.docx

DQ为数字信号输入输出端;

Vdd为外接电源输入端。

图3DS18B20的内部结构

DS18B20内结构主要由4部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH、TL和配置寄存器。

64位光刻ROM:

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,即ID。

它的作用是使每一个DS18B20的地址都各不相,可以实现在相同的总线上挂接多个DS18B20的目的。

64位光刻ROM的排列是开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

温度传感器:

在DS18B20温度传感器的使用中,以9位转化为例,从DS18B20中得到16位符号扩展的二进制补码读数形式,以0.5℃/LSB的形式表达,其中S为符号位,二进制的数存储在DS18B20的2个8位的RAM中,这是9位转化后得到的16位数据,其中前面5位是符号位,如果测得温度大于0℃,这5位为0,只要将测到的数值乘以0.5即可得到实际温度;

如果温度小于0℃,这5位为1,测得到的数值需要取反加1再乘以0.5即可得到实际温度。

非发挥的温度报警触发器TH、TL:

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的电可擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

当温度达到低温或高温的时候,温度报警触发器会发出警报。

高速暂存RAM:

高速暂存存储器包含了9个连续字节,如表-1,当温度转换命令发出后,经转换所得的温度值存放在高速暂存存储器的第0和第1个字节内,第0个字节存放的是温度的低8位信息,第1个字节存放的是温度的高8位信息,单片机可通过单线接口读到该数据,读取时低位在前,高位在后;

第2、3字节是TH、TL的易失性拷贝,第4个字节是结构寄存器的易失行拷贝,这三个字节的内容每一次上电复位时被刷新;

第5、6、7字节用于内部计算;

第8个字节是冗余检验字节。

Ds18B20的设置位有一个字节,该字节的各位定义为TMR1R011111,每一次进行针对DS18B20的读写前,都需要对DS18B20进行设置,从上面的定义可以看出,该字节的低5位一直都是1,TM位是测试模式位,用于设置DS18B20在工作模式及测试模式。

在DS18B20出厂时该位被置为0,,用户不要进行改动,R1、R0用来设置分辨率。

3.MAX232芯片

图4MAX232芯片引脚图

a)引脚介绍:

第一部分是电荷泵电路。

由1、2、3、4、5、6脚和4只电容构成。

功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。

由7、8、9、10、11、12、13、14脚构成两个数据通道。

其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。

8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;

DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

第三部分是供电。

15脚GND、16脚VCC(+5V)。

b)主要特点

1、符合所有的RS-232C技术标准

2、只需要单一+5V电源供电

3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-

4、功耗低,典型供电电流5mA

5、内部集成2个RS-232C驱动器

6、内部集成两个RS-232C接收器

7、高集成度,片外最低只需4个电容即可工作。

4.四位一体共阴极数码管

图5四位一体共阴极数码管

最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。

所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。

数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。

二、温度显示设计电路:

图6温度显示电路图

说明:

根据感应的温度,在数码管里显示。

三、电路图片

图7电路正面

图8电路背面

图9温度显示照片

图10温度上升

四、总结:

这个电子综合课程设计包括了硬件电路和PC部分两大块,硬件电路方面做了一个温度的显示电路,总体的难度也是体现在温度传感器DS1820的理解和应用上,至于PC部分就是体现在对传入温度进行处理的编程,但是这次由于时间太急,因此只是做了温度显示的部分而没有做PC机的部分。

这次课程设计同时锻炼了我们电路设计能力和编程能力,经过这次的锻炼,我们的能力得到长足的进步。

另外,关于这次课程设计的所有资料的查找,也锻炼了我们的资料搜索能力。

这次课程设计完成的时间实在是很紧迫,但在我们看来这也是对我们意志的一种考验,每一次面对困难时,只有勇于面对,我们也明白只有通过磨练,人的能力才会提升。

五、参考文献:

[1]郭瑜茹,张朴.《光电子技术及其应用》.化学工业出版社,2006

[2]康华光.《电子技术基础数字部分》.高等教育出版社,2006

[3]康华光.《电子技术基础模拟部分》.高等教育出版社,2006

[4]李朝青.《单片机原理及接口技术》.北京航空航天大学出版社.2009.34-39

附录:

单片机程序:

程序名:

芯片DS18B20驱动程序

自身函数:

voidDelay10Us_f(uint16Count)

uint8Ds18b20Init_f(void)

voidDs18b20Write_Byte(uint8Cmd)

uint8Ds18b20Read_Byte(void)

uint16Ds18b20ReadTemp_f(void)

voidTemperatureUpdate(void)

全局变量:

uint16idataTempDat以十进制形式保存所获得温度值

uint8idataTemperature[4]保存温度值的数组.依次存放正负标志,温度值十位,个位,和小数位

引用的外部函数或变量:

功能:

对DS18B20进行初始化

对DS18B20进行数据读写的操作。

实现温度的获取。

***********************************************************************

***********************************************************************/

/*以下为DS18B20的驱动程序*/

#include<

reg52.H>

intrins.h>

 

#defineuint8unsignedchar

#definesint8signedchar

#defineuint16unsignedshort

#definesint16signedshort

#defineNOP_nop_()

/*定义芯片DS18B20的数据输入输出管脚*/

sbitIo_DS18B20_DQ=P3^7;

///////////////////////////////

#defineDS18B20_DQ_HIGHIo_DS18B20_DQ=1

#defineDS18B20_DQ_LOWIo_DS18B20_DQ=0

#defineDS18B20_DQ_READIo_DS18B20_DQ

#defineucharunsignedchar

voiddelay2ms();

/*函数声明*/

voidDelay10Us_f(uint8DT);

uint8Ds18b20Init_f(void);

voidDs18b20Write_Byte(uint8Cmd);

uint8Ds18b20Read_Byte(void);

uint16Ds18b20ReadTemp_f(void);

voidTemperatureUpdate(void);

floatidataTemp_V;

/*声明以十进制形式保存温度值的变量TempDat*/

uint8idataTemperature[4];

/*声明保存温度值的数组.依次存放正负标志,温度值十位,个位,和小*/

ucharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xef,0xdf,0x00,0x40};

uchari;

uchara,b;

ucharcodetemp[]={0xfe,0xfd,0xfb,0xf7};

/*显示哪一位?

*/

/*函数名:

Delay_10us*/

/*输入:

uint16Count(延时的时间大小)*/

/*输出:

无*/

/*功能:

延时10uS函数*/

voidDelay10Us_f(uint8DT)

{

while(--DT>

0);

}

Ds18b20Init_f*/

uint8Flag(复位成功与否标志)*/

初始化芯片DS18B20*/

uint8Ds18b20Init_f(void)

{

bitFlag;

DS18B20_DQ_HIGH;

/*稍作延时*/

NOP;

DS18B20_DQ_LOW;

//总线拉低

Delay10Us_f(50);

//延时大于480us

//总线释放

Delay10Us_f(10);

//等待DS18B02复位

Flag=DS18B20_DQ_READ;

//如果Flag为0,则复位成功,否则复位失败

Delay10Us_f(15);

returnFlag;

Ds18b20Write_Byte(uint8Cmd)*/

uint8Cmd(需要写入的命令)*/

对芯片DS18B20进行写命令*/

voidDs18b20Write_Byte(uint8Cmd)

uint8i;

for(i=8;

i>

0;

i--)

{

//拉低总线,开始写时序

Delay10Us_f

(2);

DS18B20_DQ_READ=Cmd&

0x01;

//控制字的最低位先送到总线

Delay10Us_f(4);

//稍作延时,让DS18B20读取总线上的数据

NOP;

//拉高总线,1bit写周期结束

Cmd>

>

=1;

}

Ds18b20Read_Byte*/

ReadValue(从DS18B20读取的数据)*/

从DS18B20中读取一个字节的数据*/

uint8Ds18b20Read_Byte(void)

uint8ReadValue=0,i;

ReadValue>

if(DS18B20_DQ_READ==1)

ReadValue|=0x80;

Delay10Us_f(3);

returnReadValue;

Ds18b20ReadTemp_f*/

无*/

ReturnTemp(读取的温度值)*/

读取当前的温度数据(只保留一位小数)*/

uint16Ds18b20ReadTemp_f(void)

uint8TempH,TempL;

uint16ReturnTemp;

Ds18b20Init_f();

//复位DS18B20

Ds18b20Write_Byte(0xcc);

//跳过ROM

Ds18b20Write_Byte(0x44);

//启动温度转换

Ds18b20Write_Byte(0xbe);

//读取DS18B20内部的寄存器内容

TempL=Ds18b20Read_Byte();

//读温度值低位(内部RAM的第0个字节)

TempH=Ds18b20Read_Byte();

//读温度值高位(内部RAM的第1个字节)

ReturnTemp=TempH;

ReturnTemp<

<

=8;

ReturnTemp|=TempL;

//温度值放在变量ReturnTemp中

returnReturnTemp;

TemperatureUpdate_f*/

无*/

将读取的温度数据值转化存放在数组Temperature(只保留了一位小数)*/

voidTemperatureUpdate(void)

uint16TempDat;

uint8Tflag=20;

floatTemp;

TempDat=Ds18b20ReadTemp_f();

if(TempDat&

0xf000)

Tflag=21;

TempDat=~TempDat+1;

Temp=TempDat*0.0625;

Temp_V=Temp;

TempDat=Temp*10;

Temperature[0]=Tflag;

//温度正负标志

Temperature[1]=TempDat/100;

//温度十位值

Temperature[2]=(TempDat%100/10)+10;

//温度个位值

Temperature[3]=TempDat%10;

//温度小数位

///////////////////////////////////////////////////////////

voidmain(void)

while

(1)

TemperatureUpdate();

for(i=0;

i<

4;

i++)

{

P2=0xff;

P1=dispcode[Temperature[i]];

P2=temp[i];

/*哪位显示,哪位P2口引脚为低*/

delay2ms();

/*调用延时程序5*/

}

/**********延时2ms****************/

voiddelay2ms(void)

for(a=4;

a>

0;

a--)

for(b=248;

b>

b--);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1