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

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

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

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

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

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

题目主从式温度监测报警与控制系统

任务与要求:

设计以单片机为从机利用温度传感器对环境温度进行监测,将结果通过标准串行口传送通信给微机主机,由微机跟踪显示目标状态;若超过设定值,则从机目标状态以某种现场变化为提示,主机则以某种直观警方式为提示。

设计硬件电路,编写PC机和单片机的控制程序,写出设计报告及详细使用说明。

开始日期2011年6月20日完成日期2011年6月21日

主从式温度监测报警与控制系统

摘要:

本设计分为硬件电路设计和PC设计两部分。

硬件电路设计主要由单片机AT89S52、温度传感器DS18B20、MAX232芯片、四位一体共阴极数码管以及RS232母头组成,该电路主要是由对环境温度进行监控,然后用数码管显示出来,再将所测温度通过母头传入PC机。

PC机部分主要是对温度进行监测,如果超过设定值,PC机和电路都会以一定的方式进行反应。

关键词:

单片机AT89S52、温度传感器DS18B20、MAX232芯片、四位一体共阴极数码管以及PC部分程序

一、主要器件功能介绍

1.AT89S52单片机

图1AT89S52单片机管脚图

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2.数字温度传感器DS1820

图2数字温度传感器DS1820

DS18B20有三个引脚,GND接地;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

#include

 

#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

NOP;

DS18B20_DQ_HIGH;//总线释放

Delay10Us_f(10);//等待DS18B02复位

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

Delay10Us_f(15);

NOP;

NOP;

DS18B20_DQ_HIGH;

returnFlag;

}

 

/*函数名:

Ds18b20Write_Byte(uint8Cmd)*/

/*输入:

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

/*输出:

无*/

/*功能:

对芯片DS18B20进行写命令*/

voidDs18b20Write_Byte(uint8Cmd)

{

uint8i;

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

{

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

Delay10Us_f

(2);

DS18B20_DQ_READ=Cmd&0x01;//控制字的最低位先送到总线

Delay10Us_f(4);//稍作延时,让DS18B20读取总线上的数据

NOP;

NOP;

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

Cmd>>=1;

}

}

 

/*函数名:

Ds18b20Read_Byte*/

/*输入:

无*/

/*输出:

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

/*功能:

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

uint8Ds18b20Read_Byte(void)

{

uint8ReadValue=0,i;

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

{

DS18B20_DQ_LOW;

ReadValue>>=1;

DS18B20_DQ_HIGH;

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);//启动温度转换

Ds18b20Init_f();

Ds18b20Write_Byte(0xcc);//跳过ROM

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>0;b--);

}

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

当前位置:首页 > 高等教育 > 文学

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

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