课程设计主从式温度监测报警与控制系统_第1页
课程设计主从式温度监测报警与控制系统_第2页
课程设计主从式温度监测报警与控制系统_第3页
课程设计主从式温度监测报警与控制系统_第4页
课程设计主从式温度监测报警与控制系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 ; delay10us_f( 3 ) ; return readvalue ; /*函数名:ds18b20readtemp_f*/*输入:无 */*输出: returntemp(读取的温度值)*/*功能:读取当前的温度数据(只保留一位小数)*/uint16 ds18b20readtemp_f( void ) uint8 temph, templ ;

20、 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 = ds18b20read_byte() ; /读温度值高位(内部ra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论