基于AT89S52的数字温度计设计_第1页
基于AT89S52的数字温度计设计_第2页
基于AT89S52的数字温度计设计_第3页
基于AT89S52的数字温度计设计_第4页
基于AT89S52的数字温度计设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、项目名称基于at89s52的数字温度计设计目录项目名称1基于at89s52的数字温度计设计1第1章 绪 论41.1 概述41.2 数字温度计的特点与问题4第2章 设计方案52.1 设计指标52.1.1检测范围52.1.2 检测误差52.1.3 系统反应速度52.2 基于单总线温度检测芯片的检测方案52.3 关键技术62.3.1单总线技术62.3.2单片机开发技术6第3章 具体设计与实现73.1 系统总体设计73.2 硬件设计83.2.1 温度检测系统设计83.2.2 单片机最小系统设计93.2.3 显示系统设计93.2.4 电源系统设计103.3 软件设计103.3.1温度传感器驱动设计103

2、.3.2显示驱动设计153.3.3开关控制设计183.3.4系统软件设计21第4章 系统集成与测试224.1软件调试224.2硬件调试234.3系统测试23结论24致谢25参考文献26附录127附录228第1章 绪 论1.1 概述 数字温度计相对与传统的温度计,用数字信号来表示温度变化,方便计算机控制系统进行处理和记录,应用单片机使仪器仪表智能化,可以提高测量的自动化程度和精度,广泛应用于各行各业。测量温度的关键是温度传感器。随着技术飞速发展,传感器已进入第三代数字传感器。本测温系统采用的ds18b20就是属于这种传感器。ds18b20是美国dallas半导体公司推出的数字式温度传感器,是ds

3、1820的更新产品。它能够直接读出被测温度,可通过简单的编程实现9位-12位的数字读数方式,并且,从ds18b20读出的信息或写入ds18b20的信息仅需要一根口线(单线接口)读写。温度变换功率来源于数据总线,总线本身也可以向所挂接的ds18b20供电,而无需额外电源,因而使用ds18b20可使系统结构更趋简单、灵活。可靠性高。微控制器层面主要是对系统的工作进行控制,其中包括各个芯片的初始化、对ds18b20的总体控制、对按键的检测和处理以及对led的显示设置。可以说,这个层次是数字温度计系统的基础与支撑。数码管主要解决字符的显示。单片机通过对相应引脚的设置和控制,经过转换之后进行显示。1.2

4、 数字温度计的特点与问题数字温度计相对与传统的温度计,用数字信号来表示温度变化,方便计算机控制系统进行处理和记录,通常采集温度的传感器特性,信号的转换装置,和信号的传输装置对数字温度机的使用范围和性能都有极其重要的影响,传统的数字温度计因为成本和技术等原因,采用热敏电阻的检测方式,采集的模拟电压信号容易收到干扰,且需要模数转换的效果也差。本文设计了一种基于单总线芯片的数字温度计,克服传统数字温度计在信号传输,信号转换上的问题。第2章 设计方案2.1 设计指标 2.1.1检测范围温度检测范围决定了温度计的使用范围和场合,由本设计的温度检测器件ds18b20的性能决定了极限温度检测范围为55125

5、,在系统时间过程中,单片机的处理精度,器件的响应时间等各种因数的影响,实际的检测范围会小于这个范围。2.1.2 检测误差数字温度计必须在检测范围内有良好的精度,也就是在设计温度检测范围内必须有良好的检测线性,在高温和低温场合,系统都应该有相同的精度和误差,本设计的温度检测器件ds18b20内置9位的模拟/数字转换电路,其检测的分辨率可达0.0625。2.1.3 系统反应速度相对传统的靠热胀冷缩原理的液体温度计,数字温度计必须要有很高的检测响应速度,以准确的反映温度变化的过程。这就使本设计的系统方案必须适当缩短采集/转换/处理/显示温度信号的周期,以提高系统的反应速度。影响这个反应速度的主要因素

6、是单总线的读写周期和led显示的读写周期。同时为照顾人眼判读温度数据的反应时间需要,本设计把系统检测反应速度设置在1s左右。2.2 基于单总线温度检测芯片的检测方案单总线的数字温度芯片是集成在芯片内的温度检测电路和单总线接口电路构成的,由于模拟信号在芯片内就转换成为数字信号并以总线的方式串行输出,使得温度/电磁环境对信号传输的干扰最小,单总线的接口也能满足长距离信号传输的布线成本问题。同时单总线系统还可以扩展出一个总线上接入采集多个温度采集点的形式,给设计和应用带来更多的灵活性。综上所述:本设计选择使用单总线温度检测芯片的检测方案。图2-1 单总线温度检测结构2.3 关键技术2.3.1单总线技

7、术单总线技术是指接收和发射都在同一条线上的数字总线通信技术,其收发需要遵循严格的逻辑时序,在初始化设备后,主机要先访问总线上所有设备的地址,然后对所需要的设备发出工作指令,随后接受总线设备发出的数据信息,这就要求本设计的主机要在总线的时间序列协议下双向的读写。图2-2 单总线接口电路2.3.2单片机开发技术单片机是单片微机的简称,是在单一芯片上实现计算机系统的简称。靠简单的外围电路,就可构件一个单片机运行的最小系统,但是单片机的开始需要借助个人电脑,在个人电脑上,编写和调试开发语言,并将编译好后的机器语言通过下载器烧写到单片机内,使单片机运行预先设计的程序。单片机的开发需要个人电脑上运行的单片

8、机开发环境,程序下载器和开发板,如所用的at89s52单片机,就需要keil开发环境,并口下载线和开发板。在本设计方案中,选用的是atmel公司的52系列的at89s52单片机,属于复杂指令(cisc)运算单片机,at89s52是一种低功耗、高性能cmos 8位微控制器,它具有8k字节flash,256字节ram,32 位i/o 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,at89s52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继

9、续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。使该型号的单片机有极高的性能价格比。它的keil开发环境支持在windows平台上的c语言及汇编语言程序开发,方便软件设计的模块化和结构化的开发模式。第3章 具体设计与实现3.1 系统总体设计该系统由单总线温度检测系统,显示系统,开关系统三个部分构成,同时把系统设计分为硬件和软件两部分来设计。本设计采用atmel的52系列at89s52单片机应用系统来实现设计要求,高性能、低功耗的8位微处理器,非易失性的程序和数据存储器, 在单芯片上,拥有灵巧的 8 位 cpu 和在系统可编程flash,

10、使得 at89s52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。温度采集及a/d转换,采用dallas公司的ds18b20。ds18b20是dallas公司生产的总线式数字温度传感器,具有3个引脚;温度测量范围为55125,可编程为9位12位a/d转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个ds18b20可以并联到3根或2根线上,cpu只需一根端口线就能与诸多ds18b20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使ds18b20非常适用于远距离多点温度检测系统。数据显

11、示装置采用的是led数码管,led数码管结构简单,价格便宜。分为共阴和共阳两类,八段led显示管是通过同名管脚上所加的电平高低来控制发光二极管是否点亮从而显示不同的字形。数字温度计系统基本工作原理为:首先检测单总线情况,判断是否有单总线芯片在工作,然后对于数字温度传感器采集到的温度数值,单片机对温度数值进行处理,然后作温度显示。在图3-1中,在系统中控制模块主要由at89s52负责整个系统的控制工作,显示模块主要由led数码管显示信息,温度采集是由数字温度传感器ds18b20实现的。图3-1 系统模块图3.2 硬件设计3.2.1 温度检测系统设计ds18b20数字温度计提供912位温度读数,只

12、是器件的温度。信息经过单线接口送入ds18b20或从ds18b20送出,因此从主机cpu到ds18b20仅需要一条线。ds18b20的电源可以由数据线本身提供而不需要外部电源。因为每一个ds18b20在出厂时已经给定了唯一的序号,因此任意多个ds18b20可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件。ds18b20的测量范围从-55到+125 ,增量值为0.5,可在1s内把温度变成数字。每一个ds18b20包括一个唯一的64位长的序号,该序号值存放在ds18b20内部的rom中。开始8位是产品类型编码。接着的48位是每个器件唯一的序号。最后8位是前面56位的crc(循环冗

13、余校验)码。ds18b20中还有用于贮存测得的温度值的两个8位贮存器ram,编号为0号和1号。1号存贮器存放温度值的符号,如果温度为负,则1号存贮器8位全为1,否则全为0。0号存贮器用于存放温度值的补码,lsb(最低位)的1表示0.625。将存贮器中的二进制数求补再转换成十进制数并除以2,就得到被测温度值。每只ds18b20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长;采取外部供电方式则多用一根导线,但测量速度较快。本设计采用ds18b20单总线温度检测芯片,在芯片上只有3个接口,分别对应电源vcc,地线gnd,信号

14、线tx/rx,由于ds18b20芯片使用5v的供电方式,本设计直接将电源vcc先上直接串入一个4.7k左右欧姆的电阻并上拉到信号线上来实现芯片的供电,这样的供电的方式就叫作寄生供电3,这样设计的原因是单总线的收发都是同一根线,若在总线上有多个设备,这需要在寻找指定设备和设备应答上使总线保持严格的通讯时序。图3-2 单总线电路图3.2.2 单片机最小系统设计at89s52是atmel公司推出的单片机,它是一款采用低功耗cmos工艺生产的8位单片机。系统内可编程特性,使得无需购买昂贵的仿真器和编程器也可进行单片机嵌入系统的设计和开发。at89s52具有8k字节flash,256字节ram,32 位

15、i/o 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,at89s52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。3.2.3 显示系统设计为方便用户直观地看到当前的温度,本设计使用数码管显示器。led显示器常用的工作方式有静态显示方式和动态显示方式。所谓静态显示方式就是当显示器显示一个字符时,相应的发光二极管始终保持导通或截止。在

16、显示的过程中,其状态是静止不变的,直到一个字符显示完毕。而动态显示方式在显示每一个字符的过程中,都是一位一位的轮流点亮要显示的各个位。每一位点亮后保留,然后去点亮下一个要点亮的位,这样反复循环。本系统采用的是led的动态显示。在多位led显示时,为了简化硬件电路,常常将所有位的段选线并联在一起,由一个8位的i/o口控制,而各位的共阳极或共阴极引脚则分别有单独的i/o口来控制,以实现各位的分时复用。3.2.4 电源系统设计电源系统为整个温度检测系统提供稳定可靠的电源,本系统5v稳压电路设计采用的方案是实验板上接口提供的5电源。3.3 软件设计 软件设计和开发本设计使用的是基于c语言的kell环境

17、,使得本设计能够让软件构件更加结构化,模块化,并方便修改和扩展。下面本设计将软件分为单总线驱动,led显示驱动,温度转化模块,主程序大循环三个模块来说明。readtemp()单总线驱动模块温度转化模块led显示模块init_18b20()主程序大循环san()read_byte()worktemp()write_byte()图3-3 软件结构图3.3.1温度传感器驱动设计由于本设计的系统只有一个18b20芯片,所以需要在总线上只访问一个设备。采用单总线数据传输方式,ds18b20的数据i/o均由同一条线完成。因此,对读写的操作时序要求严格。为保证ds18b20的严格i/o时序,需要做较精确的延

18、时。为了得到精确的延时,采用了硬件延时的方法。在ds18b20操作中,用到的延时有15s,90s,270s,540s等。因这些延时均为15s的整数倍,因此可编写一个delay15(n)函数,只要用该函数进行大约15sn的延时即可。有了比较精确的延时保证,就可以对ds18b20进行读写操作、温度转换及显示等操作。同时为了方便程序的模块化,将单总线驱动设计为初始化函数 init_1820( ),读温度函数read_byte( ),写指令函数:write_byte( ) 3个大的函数模块。 (1) 初始化主机发一个复位脉冲(最短为480gs的低电平),接着主机释放总线进入接收状态,ds 18b20在

19、检测到1/o引脚上的上升沿之后,等待15-60gs然后发出存在脉冲(60-240gs的低电平)。图3-4 18b20初始化时序图原码如下:/*函数名:init_18b20( ) 函数功能:初始化返回值:presence*/uchar init_18b20(void) unsigned char presence; dq=1;dq = 0; /主机发复位脉冲,延时480960us delay(40); dq = 1; / 释放总线 delay(3); /等待1560uspresence = dq; / 获取存在脉冲 delay(8); / 60240us的低电平 dq = 1; return(p

20、resence); 图3-5 18b20初始化流程图(2)写数据线从高电平拉至低电平,产生写起始信号。在15gs之内将所需写的位送到数据线上,在15gs到60gs之间对数据线进行采样,如果采样为高电平,就写1,如果为低电平,写0就发生。在开始另一个写周期前必须有1gs 以上的高电平恢复期。图3-6 写数据时序图原代码如下:/*函数名:write_byte( ) 函数功能:写一个字节返回值:无*/ void write_byte(uchar data) uchar i=0; for (i=0;i=1; delay(1); 图3-7 写数据流程图 (3)读主机将数据线从高电平拉至低电平1gis 以

21、上,再使数据线升为高电平,从而产生读起始信号。主机在读时间片下降沿之后15gs内完成读位。每个读周期最短的持续期为60gs,各个读周期之间也必须有1gs以上的高电平恢复期。图3-8 读数据流程图原代码如下:/*函数名:read_bit( ) 函数功能:读一位返回值:dq*/uchar read_bit( void )uchar i;dq=0; /总线拉低_nop_();_nop_(); /稍作延时 _nop_();_nop_();_nop_(); dq=1; /释放总线,采样并发送数据位,在15us内完成for(i=0;i6;i+);return (dq);/*函数名:read_byte( )

22、 函数功能:读一个字节返回值:data*/ uchar read_byte(void) uchar data=0; 图3-9 读数据流程图 for(i=0;i8;i+) /循环8次 dq=1;_nop_();_nop_();_nop_(); if(read_bit() data|=(0x01127) /正、负数判断 temp_data1=(256-temp_data1); temp_data0=(256-temp_data0); n=1; /负温度求补码 display0=temp_data0&0x0f; /查表得小数位的值 if (display09) display0=9;/计算出各位 d

23、isplay4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4); display3=display4/100; display1=display4%100; display2=display1/10; display1=display1%10; if(!display3) /高位为0,不显示 display3=0x0a; if(!display2) /次高位为0,不显示 display2=0x0a; if(n)display4=0x0b; /负温度时最高位显示- else display4=0x0a; /+ /*函数名:scan( ) 函数功能:数码管显示返回值

24、:无*/scan() char k; segment = 0x39;/0xc6; /显示 c bt = 0x7f; delay(300); segment = 0x63;/0x9c; /显示 bt = 0xbf; delay(300); for(k=0;k4;k+) /4位led扫描控制 din=0; segment=dis_7displayk; /数据显示 if (k=1)din=1; else din=0; /小数点显示 bt=scan_conk; /位选 delay(100); /延时 3.3.3开关控制设计将单片机与键盘相连,当按下某个键时,开始测量温度,当按下另外一个键时,停止测量温

25、度。否是开 始按下一个键显示温度不显示温度按键是否是0x00图3-11 开关控制流程图代码如下:/*函数名:keyboard_san()函数功能:键盘扫描,采用全扫描返回值:按键的行列位置的指针。*/uchar keyboard_san()p2=0xf0;temp=p2;if(temp0xf0)for(cloum=0x00;cloum0x04;cloum+)if(temp(0x10cloum)=0xf0)keyboard0=cloum;break;p2=0x0f;temp=p2;for(row=0x00;row0x04;row+)if(temp(0x01row)=0x0f)keyboard1=

26、row;returnkeyboard_numberkeyboard0keyboard1;break;elsereturn 0xff;3.3.4系统软件设计开 始初始化温度变量是否关闭开关按照本设计的系统设计功能,系统需要不停地采集当前温度并显示出来,所以本设计的程序设置为大循环结构,也就是当系统上电或复位后,需要不断采集温度数据并显示。复位ds18b20读温度数据初始化硬件显示温度并延时结 束 否 是图3-12 系统流程图主程序原码如下:/*函数名:main( ) 函数功能:主函数返回值:无*/void main(void) char h;get(); /得到按下的键值 if(value=0x

27、00) /开关 while(1) readtemperature(); /读出ds18b20温度数据 worktemperature(); for(h=0;h100;h+) /显示温度值2s scan(); 第4章 系统集成与测试4.1软件调试软件调试,是对单总线驱动程序,显示驱动程序,以及主循环程序的运行进行调试,测试各函数的运算范围和形参的边界问题,以及检查系统是否严重的逻辑缺陷。图4-1 软件调试界面 软件调试我们使用kell开发工具,可以对源程序进行调试/编译/下载烧写。为具体观察单片机的运行流程,我们在程序中加入断点,可以分步跟踪程序的运行流程。4.2硬件调试硬件调试是电路系统进行调

28、试,首先保证电路实物的接线和原电路设计图一致,检查各电路元器件有无损坏和性能参数是否匹配,电路板上的焊点无断路和短路的现象发生。我们调试硬件的主要工具是万用表,在上电前检查主要电路的连接通断情况,在上电后再检查各信号端口,电源接入点的电压和电平信号是否正常,长时间运行时元器件有无严重发热的情况。另外,还可以用示波器对单总线的信号进行测量,观察ds18b20是否正常工作。4.3系统测试 系统测试,主要是将各功能的软硬件功能联合起来调试,如将单总线温度芯片与单片机相联,然后测试单总线驱动程序和温度测试功能,将led数码管显示模块与单片机联合起来测试系统的显示功能,在将电路板焊接好后上电,测试电路的电源系统功能。将

温馨提示

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

评论

0/150

提交评论