数字温度传感器课程设计论.doc_第1页
数字温度传感器课程设计论.doc_第2页
数字温度传感器课程设计论.doc_第3页
数字温度传感器课程设计论.doc_第4页
数字温度传感器课程设计论.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

目录课题要求:41.原理分析42.方案选择43.元器件选择53.1单片机53.2温度传感器73.3 显示屏83.4 蜂鸣器93.5其他元件94.proteus原理图绘制94.1设计步骤94.2 设计过程94.2.1单片机系统模块104.2.2晶体振荡模块104.2.3扬声器报警模块114.2.4温度传感器模块124.2.5液晶显示模块135.综合调试166.总结17附录118附录221附录323附录424基于数字温度传感器的数字温度计设计报告课题要求: 利用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为55125,精确到0.5。数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,实现温度显示。1. 原理分析(刘星)采用AT89C51单片机作为控制核心对温度传感器DS18B20控制,读取温度信号并进行计算处理,并送数码管显示。采用数字温度芯片 DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计 DS18B20 和微控制芯片AT89C51 构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用AT89C51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制而且体积小,硬件实现简单,安装方便。用 AT89C51 芯 片 控 制 温 度 传 感 器DS18B20 进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片 DS1302以获取时间数据,在数据处理同时显示时间,并可以利用 AT24C16 芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过 MAX232 芯片与计算机的 RS232 接口进行串口通信,方便的采集和整理时间温度数据。 方案选择(刘星) 按照系统设计功能的要求,确定系统由3个大的模块组成:主控制器、测温电路和显示电路。由AT89C51单片机组成硬件设计,AT89C51的EA接高电平,其外围电路提供能使之工作的晶振脉冲、复位按键,四个I/O分别接8路的单列IP座方便与外围设备连接。 当AT89C51芯片接到来自温度传感器的信号时,其内部程序将根据信号的类型进行处理,并且将处理的结果送到显示模块,发送控制信号控制各模块。 元器件选择(黄学然)3.1单片机AT89C51芯片:AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4K的可反复擦写的FLASH只读存储器和128 BYTES的随机存取数据存储器,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口。AT89C51可以按照常规方法进行编程,也可以在线编程。器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51令系统,片内置通用8位中央处理器和Flash存储单元,其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。 主要特性:与MCS-51 兼容4K字节可编程FLASH存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁定1288位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路管脚说明:VCC: 供电电压。GND: 接地。P0: P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(计时器0外部输入)P3.5 T1(计时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。/EA/VPP: 当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3.2温度传感器DS18B20: DS18B20 封装图 DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 以下是DS18B20的特点: (1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 (2)在使用中不需要任何外围元件。 (3)可用数据线供电,电压范围:+3.0 +5.5 V。 (4)测温范围:-55 - +125 。固有测温分辨率为0.5 。 (5)过编程可实现9-12位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。 (8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。3.3 显示屏 LCD1602液晶显示屏:同时显示摄氏温度与华氏温度。管脚分布:LCD1602模块的管脚分布功能管脚号 管脚名称状态管脚功能1Vss电源地2Vdd电源正极3V0液晶显示偏压信号4RS输入寄存器选着5RW输入读、写操作6E输入使能信号7DB0三态数据总线0(LSB)8DB1三态数据总线9DB2三态数据总线10DB3三态数据总线11DB4三态数据总线12DB5三态数据总线13DB6三态数据总线14DB7三态数据总线(MSB)15LEDA输入背光+5V16LEDK输入背光地3.4 蜂鸣器实现报警振铃音。3.5其他元件电容(30pf,10uf)、电阻(4.7k,8.2k)、三极管(8550)、晶振(12MHZ)、按键、杜邦线、排针若干,万能板。 proteus原理图绘制(余琳玲)4.1设计步骤1.使用proteus 软件画出原理图2.使用keil软件1)建立工程2)为工程选择目标器件3)设置工程的配置参数4) 打开程序文件5)编辑和链接工程6)纠正程序中的书写和错误并重新建立链接7)生成hex文件3.使用proteus软件进行仿真4.2 设计过程硬件接线图见附录44.2.1单片机系统模块4.2.2晶体振荡模块晶振电路是提供系统时钟信号。为了各部分的同步应当引入公用的外部脉冲信号作为振荡脉冲。电容选择在1030pF之间,因为电容的大小影响振荡器振荡的稳定性和起振的速度。电容C1和C2的作用是稳定频率和快速起振,晶振CYS的振荡频率取12MHZ。89C51单片机的时钟信号通常有两种方式产生,外部时钟和内部时钟方式,如下图所示:4.2.3扬声器报警模块系统设有一定的温度范围,当系统检测到的温度不在预设的范围时,则需发出报警,警报系统由PNP三极管和蜂鸣器组成。4.2.4温度传感器模块DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。 4.2.5液晶显示模块硬件连线图:指令:1)Clear display 清显示指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB00000000001清显示指令将空位字符码20H 送入全部DDRAM 地址中,使DDRAM 中的内容全部清除,显示消失;地址计数器AC=0,自动增1 模式;显示归位,光标或者闪烁回到原点(显示屏左上角);但并不改变移位设置模式。2)Return home 归位指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB0000000001*归位指令置地址计数器AC=0;将光标及光标所在位的字符回原点;但DDRAM 中的内容并不改变。3)Entry mode set 设置输入模式指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB000000001I/DSI/D:字符码写入或者读出DDRAM 后DDRAM 地址指针AC变化方向标志:I/D=1,完成一个字符码传送后,光标右移,AC自动加1;I/D=0,完成一个字符码传送后,光标左移,AC自动减1;S:显示移位标志:S=1,将全部显示向右(I/D=0)或者向左(I/D=1)移位;S=0,显示不发生移位;S=1 时,显示移位时,光标似乎并不移位;此外,读DDRAM 操作以及对CGRAM 的访问,不发生显示移位。4)Display on/off control 显示开/关控制指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB00000001DCBD:显示开/关控制标志:D=1,开显示;D=0,关显示;关显示后,显示数据仍保持在DDRAM中,立即开显示可以再现;C:光标显示控制标志:C=1,光标显示;C=0,光标不显示;不显示光标并不影响模块其它显示功能;显示5X8 点阵字符时,光标在第八行显示,显示5X10 点阵字符时,光标在第十一行显示;B:闪烁显示控制标志:B=1,光标所指位置上,交替显示全黑点阵和显示字符,产生闪烁效果,Fosc=250kHz时,闪烁频率为0.4ms左右;通过设置,光标可以与其所指位置的字符一起闪烁。5)Cursor or display shift 光标或显示移位指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB0000001S/CR/L*光标或显示移位指令可使光标或显示在没有读写显示数据的情况下,向左或向右移动;运用此指令可以实现显示的查找或替换;在双行显示方式下,第一行和第二行会同时移位;当移位越过第一行第四十位时,光标会从第一行跳到第二行,但显示数据只在本行内水平移位,第二行的显示决不会移进第一行;倘若仅执行移位操作,地址计数器AC的内容不会发生改变。S/CR/L说明00光标向左移动,AC自动减101光标向右移动,AC自动加110光标和显示一起向左移动,AC值不变11光标和显示一起向右移动,AC值不变6)Function set 功能设置指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB000001DLNF*功能设置指令设置模块数据接口宽度和LCD 显示屏显示方式,即MPU 与模块接口数据总线为4 位或者是8位、LCD 显示行数和显示字符点阵规格;所以建议用户最好在执行其它指令设置(读忙标志指令除外)之前,在程序的开始,进行功能设置指令的执行;DL:数据接口宽度标志:DL=1,8 位数据总线DB7DB0;DL=0,4 位数据总线DB7DB4,DB3DB0 不用,使用此方式传送数据,需分两次进行;N:显示行数标志:N=1,两行显示模式;N=0,单行显示模式;F:显示字符点阵字体标志:F=1:5X10点阵光标显示模式;F=0:5X7 点阵光标显示模式。7)Set CGRAM address CGRAM地址设置指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB00001ACG5ACG4ACG3ACG2ACG1ACG0CGRAM 地址设置指令设置CGRAM地址指针,它将CGRAM存储用户自定义显示字符的字模数据的首地址ACG5ACG0送入AC中,于是用户自定义字符字模就可以写入CGRAM 中或者从CGRAM中读出。8)Set DDRAM address DDRAM地址设置指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB0001ADD6ADD5ADD4ADD3ADD2ADD1ADD0DDRAM 地址设置指令设置DDRAM 地址指针,它将DDRAM 存储显示字符的字符码的首地址ADD6ADD0送入AC中,于是显示字符的字符码就可以写入DDRAM 中或者从DDRAM 中读出;值得一提的是:在LCD 显示屏一行显示方式下,DDRAM 的地址范围为:00H4FH;两行显示方式下,DDRAM的地址范围为:第一行00H27H,第二行40H67H。9) Read busy flag and address 读忙标志BF和AC指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB001BFAC6AC5AC4AC3AC2AC1AC0当RS=0 和R/W=1 时,在E 信号高电平的作用下,BF和AC6AC0被读到数据总线DB7DB0的相应位;BF:内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块不接收任何外部指令和数据,直到BF=0为止;AC6AC0:地址计数器AC 内的当前内容,由于地址计数器AC 被CGROM、CGRAM和DDRAM的公用指针,因此当前AC 内容所指区域由前一条指令操作区域决定;同时,只有BF=0 时,送到DB7DB0 的数据AC6AC0才有效。10)Write data to CGRAM or DDRAM 写数据到CGRAM或DDRAM指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB010D7D6D5D4D3D2D1D0写数据到CGRAM 或DDRAM 指令,是将用户自定义字符的字模数据写到已经设置好的CGRAM 的地址中,或者是将欲显示字符的字符码写到DDRAM 中;欲写入的数据D7D0 首先暂存在DR 中,再由模块的内部操作自动写入地址指针所指定的CGRAM 单元或者DDRAM单元中。11) Read data from CGRAM or DDRAM 从CGRAM或DDRAM中读数据指令码:RSR/WDB7DB6DB5DB4DB3DB2DB1DB011D7D6D5D4D3D2D1D0从CGRAM 或DDRAM 中读数据指令,是从地址计数器AC指定的CGRAM或者DDRAM单元中,读出数据D7D0;读出的数据D7D0 暂存在DR中,再由模块的内部操作送到数据总线DB7DB0 上。 5.综合调试(刘星、余琳玲、黄学然) 系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度 子程序、显示等等,由余琳玲同学编写。程序于附录硬件方面主要由黄学然和刘星调试焊接,一开始存在少许不易发现的焊点虚焊漏焊现象,导致显示屏无显示,后改正后可以得出正常显示温度,证明我们的课程设计实验初步取得成功。6.总结(刘星、余琳玲、黄学然)本次课程设计经过我们小组三个同学的齐心协力最终获得了成功,此次实验中我们还有不少需要改善的地方,比如这个温度计不能快速的反应温度变化,不能做到接触测量(由于DS18B20焊接在电路板上),同时焊接技艺还没有达到极致,美观上略有欠缺。我们在仿真调试中也获得不少感悟:画图的时候应仔细连线,线一旦连错,程序无法正常运行。程序烧写到单片机,实物运行不能显示正常结果,要认真检查仿真图的连线正确与否以及焊接电路是否出现虚焊、漏焊,元器件是否错放。附录1C语言程序#include#include#include18b20.h /18b20头文件#include1602.h /18b20头文件/宏定义#define uchar unsigned char #define uint unsigned int/定义变量uint bw,sw,gw;uchar table=0123456789;uchar alarm= Alarm ;uchar j; /1602显示的字符个数long int tem,tem1; /tem为摄氏温度,tem1为华氏温度,baojing为警报温度值long int baojing=38; sbit speaker=P10;void beep(); /函数声明蜂鸣器函数 void display(void)/18b20显示摄氏温度 EX0=0; tem=duqu_wendu(); if(tembaojing) beep(); bw=tem/10;sw=tem%10; write1602(0x80+0x00);read1602(tablebw);write1602(0x80+0x01); read1602(tablesw);write1602(0x80+0x02);read1602(0xdf);write1602(0x80+0x03);read1602(C); write1602(0x80+0x04); read1602( ); EX0=1; void display1(void)/18b20显示华氏温度 EX0=0; tem1=duqu_wendu()*1.8+32; if(tem1(baojing*1.8+32) beep(); bw=tem1/100;sw=(tem1%100)/10;gw=tem1%10; write1602(0x80+0x0b); read1602(tablebw);write1602(0x80+0x0c); read1602(tablesw);write1602(0x80+0x0d); read1602(tablegw);write1602(0x80+0x0e); read1602(0xdf);write1602(0x80+0x0f); read1602(F); EX0=1; void displaybaojing(void)/显示报警温度值 bw=baojing/100;sw=baojing/10;gw=baojing%10; write1602(0x80+0x4b); read1602(tablebw);write1602(0x80+0x4c); read1602(tablesw);write1602(0x80+0x4d); read1602(tablegw);write1602(0x80+0x4e); read1602(0xdf);write1602(0x80+0x4f); read1602(C); void xianshi() /1602显示 alarm int i; write1602(0x80+0x40); for(i=0;i=9;i+) read1602(alarmi); delayms(5); void beep(void) /蜂鸣器子程序 uchar i; for(i=0;i=100;i+) speaker=1; delayus(80); speaker=0; delayus(80); void startinterrupt(void) TMOD=0x01; /T0模式1定时TH0=0xD8; /装入初值,定时20msTL0=0xF0;IT0=1; /外部中断0为边沿触发方式EA=1; /中断允许总控制位EX0=1; /外部中断0允许EX1=1;ET0=1; /定时器0允许中断ET1=1;TR0=1; /启动定时器0 void main() inte1602();/1602初始化 xianshi();displaybaojing(); delayms(1000);startinterrupt(); while(1)void timeer(void) interrupt 1 /定时器0处理函数 TR0=0;TH0=0xD8; /装入初值,定时20ms TL0=0xF0;display();/18B20显示 display1(); TR0=1; /启动定时器计数附录2 /*18b20时序*/#include#define uchar unsigned char#define uint unsigned intsbit DQ=P36;uint temp;float f_temp;/单精度实行/延时函数void delayus(uint us) while(us-);/18

温馨提示

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

评论

0/150

提交评论