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

上传人:文库蛋蛋多 文档编号:3993255 上传时间:2023-03-30 格式:DOC 页数:20 大小:2.05MB
返回 下载 相关 举报
课程设计主从式温度监测报警与控制系统.doc_第1页
第1页 / 共20页
课程设计主从式温度监测报警与控制系统.doc_第2页
第2页 / 共20页
课程设计主从式温度监测报警与控制系统.doc_第3页
第3页 / 共20页
课程设计主从式温度监测报警与控制系统.doc_第4页
第4页 / 共20页
课程设计主从式温度监测报警与控制系统.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

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

1、题目 主从式温度监测报警与控制系统 任务与要求:设计以单片机为从机利用温度传感器对环境温度进行监测,将结果通过标准串行口传送通信给微机主机,由微机跟踪显示目标状态;若超过设定值,则从机目标状态以某种现场变化为提示,主机则以某种直观警方式为提示。设计硬件电路,编写PC机和单片机的控制程序,写出设计报告及详细使用说明。开始日期 2011年6月 20 日完成日期 2011 年6月 21 日主从式温度监测报警与控制系统摘要:本设计分为硬件电路设计和PC设计两部分。硬件电路设计主要由单片机AT89S52、温度传感器DS18B20、MAX232芯片、四位一体共阴极数码管以及RS232母头组成,该电路主要是

2、由对环境温度进行监控,然后用数码管显示出来,再将所测温度通过母头传入PC机。PC机部分主要是对温度进行监测,如果超过设定值,PC机和电路都会以一定的方式进行反应。关键词:单片机AT89S52、温度传感器DS18B20、MAX232芯片、四位一体共阴极数码管以及PC部分程序一、主要器件功能介绍1AT89S52单片机图1 AT89S52单片机管脚图AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,

3、拥有灵巧的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

4、数字温度传感器DS1820DS18B20有三个引脚,GND接地;DQ为数字信号输入输出端;Vdd为外接电源输入端。图3 DS18B20的内部结构DS18B20内结构主要由4部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH、TL和配置寄存器。64位光刻ROM:光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,即ID。它的作用是使每一个DS18B20的地址都各不相,可以实现在相同的总线上挂接多个DS18B20的目的。64位光刻ROM的排列是开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身序列号,最后8位是前面56位的循环冗

5、余校验码(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和一个非易失性的电可擦除的EEPRA

6、M,后者存放高温度和低温度触发器TH、TL和结构寄存器。当温度达到低温或高温的时候,温度报警触发器会发出警报。高速暂存RAM:高速暂存存储器包含了9个连续字节,如表-1,当温度转换命令发出后,经转换所得的温度值存放在高速暂存存储器的第0和第1个字节内,第0个字节存放的是温度的低8位信息,第1个字节存放的是温度的高8位信息,单片机可通过单线接口读到该数据,读取时低位在前,高位在后;第2、3字节是TH、TL的易失性拷贝,第4个字节是结构寄存器的易失行拷贝,这三个字节的内容每一次上电复位时被刷新;第5、6、7字节用于内部计算;第8个字节是冗余检验字节。Ds18B20的设置位有一个字节,该字节的各位定

7、义为TMR1R011111,每一次进行针对DS18B20的读写前,都需要对DS18B20进行设置,从上面的定义可以看出,该字节的低5位一直都是1,TM位是测试模式位,用于设置DS18B20在工作模式及测试模式。在DS18B20出厂时该位被置为0,用户不要进行改动,R1、R0用来设置分辨率。3MAX232芯片图4 MAX232芯片引脚图a)引脚介绍:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、1

8、2脚(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+

9、、V- 4、功耗低,典型供电电流5mA 5、内部集成2个RS-232C驱动器 6、内部集成两个RS-232C接收器 7、高集成度,片外最低只需4个电容即可工作。4四位一体共阴极数码管图5 四位一体共阴极数码管最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。二、温度显示设计电路:图6 温度显示电路图说明:根据感应的温度,在数码管里显示。

10、三、电路图片图7 电路正面图8 电路背面图9 温度显示照片图10 温度上升四、总结:这个电子综合课程设计包括了硬件电路和PC部分两大块,硬件电路方面做了一个温度的显示电路,总体的难度也是体现在温度传感器DS1820的理解和应用上,至于PC部分就是体现在对传入温度进行处理的编程,但是这次由于时间太急,因此只是做了温度显示的部分而没有做PC机的部分。这次课程设计同时锻炼了我们电路设计能力和编程能力,经过这次的锻炼,我们的能力得到长足的进步。另外,关于这次课程设计的所有资料的查找,也锻炼了我们的资料搜索能力。这次课程设计完成的时间实在是很紧迫,但在我们看来这也是对我们意志的一种考验,每一次面对困难时

11、,只有勇于面对,我们也明白只有通过磨练,人的能力才会提升。五、参考文献:1郭瑜茹,张朴.光电子技术及其应用.化学工业出版社 ,20062康华光.电子技术基础 数字部分.高等教育出版社,2006 3康华光.电子技术基础 模拟部分.高等教育出版社,20064李朝青单片机原理及接口技术北京航空航天大学出版社. 2009.34-39附录:单片机程序: 程序名: 芯片DS18B20驱动程序 自身函数:void Delay10Us_f( uint16 Count ) uint8 Ds18b20Init_f( void )void Ds18b20Write_Byte( uint8 Cmd )uint8 Ds

12、18b20Read_Byte( void )uint16 Ds18b20ReadTemp_f( void )void TemperatureUpdate( void ) 全局变量: uint16 idata TempDat 以十进制形式保存所获得温度值uint8 idata Temperature 4 保存温度值的数组.依次存放正负标志,温度值十位,个位,和小数位 引用的外部函数或变量: 无 功能: 对 DS18B20 进行初始化对 DS18B20 进行数据读写的操作。 实现温度的获取。 */* 以下为 DS18B20 的驱动程序 */#include #include #define uin

13、t8 unsigned char#define sint8signed char#define uint16 unsigned short#define sint16signed short#define NOP _nop_()/*定义芯片DS18B20的数据输入输出管脚*/sbit Io_DS18B20_DQ = P37 ; / #define DS18B20_DQ_HIGH Io_DS18B20_DQ = 1 #define DS18B20_DQ_LOWIo_DS18B20_DQ = 0 #define DS18B20_DQ_READ Io_DS18B20_DQ #define uchar

14、 unsigned charvoid delay2ms();/* 函数声明 */void Delay10Us_f( uint8 DT ) ;uint8 Ds18b20Init_f( void );void Ds18b20Write_Byte( uint8 Cmd );uint8 Ds18b20Read_Byte( void );uint16 Ds18b20ReadTemp_f( void );void TemperatureUpdate( void );float idata Temp_V ;/*声明以十进制形式保存温度值的变量 TempDat */uint8 idata Temperatur

15、e 4 ; /*声明保存温度值的数组.依次存放正负标志,温度值十位,个位,和小 */uchar code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xef,0xdf,0x00,0x40; uchar i; uchar a,b; uchar code temp=0xfe,0xfd,0xfb,0xf7; /*显示哪一位?*/*函数名:Delay_10us*/*输入:uint16 Count(延时的时间大小)*/*输出: 无*/*功能:延时10

16、uS函数*/void Delay10Us_f( uint8 DT ) while( -DT0 ); /*函数名:Ds18b20Init_f*/*输入:无*/*输出: uint8 Flag(复位成功与否标志)*/*功能:初始化芯片DS18B20*/uint8 Ds18b20Init_f( void ) bit Flag ; DS18B20_DQ_HIGH ; /*稍作延时*/ NOP ; DS18B20_DQ_LOW ; /总线拉低 Delay10Us_f(50) ; /延时大于480us NOP ; DS18B20_DQ_HIGH ; /总线释放 Delay10Us_f(10) ; /等待DS

17、18B02复位 Flag = DS18B20_DQ_READ ; /如果Flag为0,则复位成功,否则复位失败 Delay10Us_f(15) ;NOP ;NOP ;DS18B20_DQ_HIGH ; return Flag ; /*函数名:Ds18b20Write_Byte( uint8 Cmd )*/*输入:uint8 Cmd(需要写入的命令)*/*输出: 无*/*功能:对芯片DS18B20进行写命令*/void Ds18b20Write_Byte( uint8 Cmd ) uint8 i ; for( i = 8 ; i 0 ; i- ) DS18B20_DQ_LOW ;/拉低总线,开始

18、写时序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中读取一个字节的数据*/uint8 Ds18b20Read_Byte( void ) uint8 ReadValue = 0

19、, i ; for( i = 8 ; i 0 ; i- ) DS18B20_DQ_LOW ; ReadValue = 1 ; DS18B20_DQ_HIGH ; if( DS18B20_DQ_READ = 1 ) ReadValue |= 0x80 ; 待添加的隐藏文字内容3 Delay10Us_f( 3 ) ; return ReadValue ; /*函数名:Ds18b20ReadTemp_f*/*输入:无 */*输出: ReturnTemp(读取的温度值)*/*功能:读取当前的温度数据(只保留一位小数)*/uint16 Ds18b20ReadTemp_f( void ) uint8 Te

20、mpH, TempL ; uint16 ReturnTemp ; 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 = Ds18b20Re

21、ad_Byte() ; /读温度值高位(内部RAM的第1个字节) ReturnTemp = TempH ; ReturnTemp = 8 ; ReturnTemp |= TempL ; /温度值放在变量ReturnTemp中 return ReturnTemp ; /*函数名:TemperatureUpdate_f*/*输入:无*/*输出: 无*/*功能:将读取的温度数据值转化存放在数组Temperature(只保留了一位小数)*/void TemperatureUpdate( void ) uint16 TempDat ;uint8 Tflag = 20 ; float Temp ; Tem

22、pDat = 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 ;/温度小数位 /void main(void) while(1) TemperatureUpdate(); for(i=0;i0;a-) for(b=248;b0;b-);

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号