您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于DS18B20温度计课程设计报告
洛阳理工学院课程设计报告课程名称单片机应用设计题目基于DS18B20和1602的温度计专业计算机应用技术班级Z120551学号Z12055123姓名李浩冰完成日期2014年6月12日课程设计任务书设计题目:基于DS18B20和1602的温度计设计内容与要求:设计内容:采用STC89C51单片机,DS18B20数字温度采集器件,单总线驱动等电路设计制作一个点在温度计,能利用1602LCD液晶显示温度。设计要求:1)单片机系统扩展设计;、2)温度采集设计;3)显示功能设计;指导教师:_______________年月日课程设计评语成绩:指导教师:_______________年月日洛阳理工学院课程设计报告1一、设计目的在本设计中选用STC89C51型单片机作为主控制器件,采用DS18B20数字温度传感器作为测温元件,通过1602LCD液晶显示器实现温度显示。本设计的内容主要分为三部分,一是系统硬件设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用C语言实现温度的采集与显示;三是通过1602LCD液晶显示与DS1302芯片显示其时间。通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。其系统构成简单,信号采集效果好,数据处理速度快,便于实际检测使用。二、设计指标2.1设计要求(1).具有实时显示温度的功能,精度为1;(2).具备在液晶上显示年、月、日、星期、时、分、秒的功能;(3).具备年、月、日、星期、时、分、秒校准功能;(4).具有与实时时间同步的功能。2.2单片机芯片的选择采用STC89C51芯片作为硬件核心,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。2.3显示模块的选择采用1602液晶显示屏,该液晶显示屏的显示功能强大,内置192种字符,可显示大量符号、数字,清晰可见,而且功率消耗小寿命长抗干扰能力强。所以在此设计中采用1602液晶显示屏。2.4时钟的选择采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。2.5温度传感器的选择采用数字温度芯片DS18B20测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。2.6电路设计最终方案决定洛阳理工学院课程设计报告2综上各方案所述,对此次设计的方案选定:采用AT89C51作为主控制芯片,DS1302时钟芯片计时,DS18B20采集温度,LCD1602作为显示模块。三、总体框图设计四、功能模块及原理说明1.单片机芯片模块:STC89C51RC是采用8051核的ISP(InSystemProgramming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。STC89C51RC实物图如图一所示,引脚图如图二所示:单片机STC89C51DS1302时钟芯片1602LCD液晶显示器DS18B20数字温度传感器按键模块洛阳理工学院课程设计报告3图一图二2.显示模块:1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。1602LCD显示器实物图如图三:图三图四3.时钟芯片模块:DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放洛阳理工学院课程设计报告4数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。DS1302时钟芯片实物图如图四:4.温度传感器模块:DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。DS1802数字温度传感器DS18B20内部结构图如图五所示,实物管脚分布图如图六所示:图五图六五、设计验证1.在仿真软件上选取以上元件,元件图如图七所示:图七图八2.在仿真软件上进行布局连线,如图八所示:洛阳理工学院课程设计报告53.程序设计:(1)温度传感器代码如下:DS18B20.h:#includeintrins.h#includereg51.hvoidDisplay_char(unsignedcharaddr,unsignedchardat);unsignedcharcodetime[]=0123456789;sbitDQ=P2^7;staticunsignedcharLCD_Dis_sign;voiddelay_100ms()//延时函数100ms{{unsignedchara1,a2,a3;for(a3=1;a30;a3--)for(a2=232;a20;a2--)for(a1=214;a10;a1--){}}}voiddelay_750us(){unsignedchara1;for(a1=149;a10;a1--){_nop_();_nop_();_nop_();}}voiddelay_15us(){unsignedchara1;洛阳理工学院课程设计报告6for(a1=5;a10;a1--){}}voiddelay_45us(){unsignedchara1;for(a1=20;a10;a1--){}}voiddelay_240us(){unsignedchara1;for(a1=43;a10;a1--){_nop_();_nop_();_nop_();}}/************************DS18B20初始化函数**********/voidDS18B20_Init(){DQ=1;//拉为高电平_nop_();DQ=0;//拉为低电平delay_750us();//延时750usDQ=1;//释放总线delay_15us();//延时15us,如果DS18B20初始化成功,会把总线DQ拉低while(DQ);//等待总线被拉低delay_240us();DQ=1;//拉高电平释放总线}洛阳理工学院课程设计报告7/***********************DS18B20写函数***************/voidWrite_DS18B20(unsignedcharcommand){unsignedchari,temp;for(i=0;i8;i++){temp=command&0x01;//*********作用?DQ=1;//拉为高电平_nop_();DQ=0;delay_15us();if(temp==1)//判断写0还是写1DQ=1;elseDQ=0;delay_45us();//延时45usDQ=1;command=1;}DQ=1;//释放总线}/****************DS18B20读函数**********************/unsignedcharRead_DS18B20(){unsignedchari,temp;for(i=0;i8;i++){temp=1;//先右移一位,消耗一个for循环,如果不这样做,读出的数据会不正确DQ=0;_nop_();_nop_();DQ=1;//根据手册,需释放总线_nop_();_nop_();_nop_();_nop_();洛阳理工学院课程设计报告8if(DQ)//判断总线读出的数据temp=temp|0x80;//temp与0x80或运算的作用?delay_45us();}returntemp;}/************DS18B20转换温度函数******************/voidDS18B20_Start_Conversion(){DS18B20_Init();//复位Write_DS18B20(0xcc);//跳过ROMWrite_DS18B20(0x44);//开始转换温度对芯片写入0x44//芯片接收转换指令后,把一些温度有关的模拟量转变成数字信号,再把此数值放入相应的RAM上delay_100ms();//延时100ms,转换时间这里如果太长,读出的会慢DS18B20_Init();//复位Write_DS18B20(0xcc);//Write_DS18B20(0xbe);//0xbe读取暂存器指令}/**************获得转换温度函数*****************/unsignedcharGet_temperature(){unsignedchartemp1,temp2;DS18B20_Start_Conversion();//温度开始转换并发出读取命令temp1=Read_DS18B20();temp2=Read_DS18B20();//读取暂存器前两个字节DS18B20_Init();//读取完前两个字节后,终止读取if((temp2&0xf8)==0xf8)//判断,如果读取的温度是负数{LCD_Dis_sign=1;//液晶显示标志温度为负数return((~((temp28)|temp1)+1)*0.0625);//单片机二进制转十进制//把Temp2的值左移8位,然后或Temp1,非运算,再加1洛阳理工学院课程设计报告9}//得到的数再乘以0.0625,将值赋给TemperatureLCD_Dis_sign=0;//温度小于100度且为正return(((temp28)|temp1)*0.0625);}/***************液晶显示函数*************************/voidLCD_Dis_temperature(){unsignedinttemp;temp=Get_temperature();//获得温度if(temp=100)//如果温度大于等于100度,置液晶显示标志为3LCD_Dis_sign=3;//温度大于等于100度switch(LCD_Dis_sign){case0:Display_char(0xcb,'');/
本文标题:基于DS18B20温度计课程设计报告
链接地址:https://www.777doc.com/doc-3614613 .html