基于51单片机设计简单的温度计毕业论.doc_第1页
基于51单片机设计简单的温度计毕业论.doc_第2页
基于51单片机设计简单的温度计毕业论.doc_第3页
基于51单片机设计简单的温度计毕业论.doc_第4页
基于51单片机设计简单的温度计毕业论.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

淮北师范大学2012届学士学位论文 温度计学院、 专业 物理与电子信息学院 电子信息工程 研 究 方 向 单板微型计算机 学 生 姓 名 姜维 学 号 20091342047 指导教师姓名 窦德招 指导教师职称 讲师 2012年11月2日基于51单片机设计简单的温度计姜维淮北师范大学物理与电子信息学院 235000摘要 随着科技的不断发展,电子设备的应用已经取得了非凡的成就。即使是高度集成化的今天,单片机技术依旧在我们的日常生活中占据着重要的地位。温度是日常生活、工业、医学、环境保护、化工、石油等领域最常用到的一个物理量。测量温度的基本方法是使用温度计直接读取温度。最常见到得测量温度的工具是各种各样的温度计。它们常常以刻度的形式表示温度的高低,人们必须通过读取刻度值的多少来测量温度。利用单片机和温度传感器构成的电子式智能温度计就可以直接测量温度,得到温度的数字值,既简单方便,有直观准确。本文讲叙了一种基于51系列单片机的数字温度计的设计过程与仿真结果。通过Proteus画图以及Keil编程,成功的仿真出了能够实时测量温度并显示温度的数字温度计。关键字单片机,温度计,仿真,AT89C52,DS18B20The Design of The Intelligence IC card Ammeter姓名英文(姓在前,名在后)School of Physics and Electronic Information, Huai Bei Normal University, Anhui Huaibei, 235000Abstract With the continuous development of science and technology,the application of electronic equipment has made remarkable achievementsEven the highly integrated single-chip technology today,still in our daily life plays an important role inTemperature is the daily life, industry, medicine, environmental protection,chemical industry,petroleum and other areas of the most commonly used of a physical quantityTemperature measurement is the basic method used to directly read temperature thermometerThe most common to measuring the temperature of the tool is various thermometerThey often graduated form high and low temperature,people must read through the scale value number to measure temperatureUsing single chip computer and a temperature sensorThe electronic type intelligent thermometer can measure temperature,the temperature of the digital values,are simple and convenient,is intuitive and accurateThis article tells of a microcontroller based on the Series 51 digital thermometers design process and simulation resultsThrough the Proteus drawing and keil programming,a successful simulation of a real-time temperature measurement and display the temperature of the digital thermometer。Keywords:Single-chip Microcomputer,Thermometer,simulation,AT89C52,DS18B20。目 录1 引言11.1设计的目的11.2设计的背景12 方案设计22.1 DS18b20的选取22.2 AT89C51单片机的选取22.3 LCD1602液晶的选取23 硬件设计33.1 时钟电路33.2 复位电路33.3 DS18b20温度传感电路43.4 1602液晶显示电路44 软件设计64.1 DS18b20与单片机之间的信息交换程序74.2 单片机向1602发送命令及数据的程序74.3 主函数对各子函数的调用过程75 仿真结果96 总结与体会10参考文献11附录1121 引言1.1设计的目的通过本次设计,锻炼自己的动手能力,加深对protel,protues等软件的了解,加深对单片机原理、接口课程的全面认识、复习和掌握,对单片机的应用进一步的了解。1.2设计的背景温度计在现在的生活、工业生产方面都有着广泛的应用,好多场合都需要测量温度,温度计的精度是选择温度计的重要指标,尤其许多重要场合温度的测定,误差必须限定在某一很小的范围内,因此要设计一个温度计,做好测量精度误差也是最重要的工作之一。本课程设计要求能够测量的温度范围是-50摄氏度到+110摄氏度,测量误差在0.5C之内。综合这两个条件,经过查找分析,可以选择温度传感器。该传感器测量范围是-55C到+125C,其温度控制寄存器为16位,其中高5位是符号位,0表示正,1表示负,低11位表示温度数值,负温度用补码形式表示,在分辨率为0.0625C,即最低位的一代表0.0625C,符合精度要求。设计时,要求显示到小数点后一位,由于误差在0.5C之间,因此可以只让小数点后的数显示0与5,当实际温度的小数点位为0到4时,显示0,当实际温度的小数点位为5到9时,显示5。 2 方案设计要求用单片机设计温度计并在液晶上显示,这就要求必须有个温度传感器来收集温度信息,送入主控部分,再由主控部分将数据送显示部分显示。主控电路测温电路显示电路图2.1 系统方案框图总体设计框图为:2.1 DS18b20的选取 DS18B20的集成度很高导致该元器件需要的外围电路相当简单。并且DS18B20体积小,输出方便也使得该方案更加节省空间资,需要的元器件少更加经济实惠。准确度:DS18B20是高封装的传感器件,能够直接和单片机进行串口通信,获取温度值较为简便。测温范围55+125,固有测温分辨率05。通信信号为数字信号,抗干扰能力强。综上所述,本设计选取DS18b20作为温度传感芯片。2.2 AT89C51单片机的选取本次设计电路相对简单,转换速率要求不高一般的单片机便可以担此任务,因此,单片机的选取应本着低成本的原则。AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。因此本设计选取AT89C51单片机作为控制器。2.3 LCD1602液晶的选取由于本次设计要求显示的内容简单且全是字符形式的,因此液晶的选取应本着简单、节约成本的原则。LCD1602是字符型液晶,显示字母和数字比较方便,控制简单,成本较低。因此选取LCD1602液晶作为显示器。3 硬件设计用到的器件有DS18b20、1602液晶及AT89C51(含晶振与复位电路)。硬件设计框图为:图3.1 硬件设计框图51单片机时钟电路复位电路DS18b20LCD1602显示器3.1 时钟电路晶振电路由一个晶振与两个电容连接组成,与单片机的18、19管脚相连,另一端接地,电路图为:图3.2 单片机时钟电路电容大小没有固定值,一般5到30pf,晶振是给单片机提供工作信号脉冲的。这个脉冲就是单片机的工作速度。一般用内部振荡方式,这种方式比较稳定。晶振频率为12MHZ,单片机工作速度就是每秒 12M。单片机的工作频率是有范围的,不能太大,一般 24M就不上去了,不然不稳定。3.2 复位电路复位电路由一个有极性电容、一个电阻与一个按键连接而成,一端连单片机的RST端,另一端接电源,电源另一端接单片机的EA。其中电容是通过充放电来实现维持一段时间的高电平,电容充电时间与R C的值成正比,当按下按键时,由于电容充电,RST维持一段时间高电平以达到复位的目的。一般情况下,选择大小为10到30uF的电容,而电阻一般选用1到10K的。电路图为:图3.3 单片机与复位电3.3 DS18b20温度传感电路此部分电路负责温度信号的采集、将温度信号转换成数字代码储存在温度控制寄存器中,向单片机发送温度数据等重要功能,主要由DS18b20芯片来完成,该电路的电路图为:图3.4 DS18b20电路其中DQ为DS18b20的数据输入/输出端引脚,与单片机的P2.0口相连,单片机通过P2.0口向DS18b20发出各种命令,并读取其转换后的温度数据。3.4 1602液晶显示电路其电路图为:图3.5 1602液晶电路该电路为我们肉眼直接观看的部分,它会时时的将DS18b20收集到的温度信息显示出来。数据端口接P3口,数据/命令控制端、读写控制端、与使能端分别接单片机的P2.5、P2.6与P2.7口,单片机也是通过这3个口向1602液晶发送命令及数据,以达到控制1602显示的功能。 4 软件设计对DS18b20初始化设定1602的显示位置1602对转换的结果进行处理分离出要显示数据的各位获取转换数据结果1602对转换的结果进行符号判定对1602初始化将要显示的各位依次在1602上显示开启温度转换在液晶中写入“temperature is:”设定1602的显示位置开始软件部分的设计主要是写程序的一个过程,写程序前先应画一个整体流程如下:图4.1 软件程序流程图4.1 DS18b20与单片机之间的信息交换程序首先对DS18b20进行初始化,以释放输入/输出总线并延时,由于只用到一片DS18b20,因此可以发命令跳过ROM指令,跳过的指令是向DS18b20发送命令字0xcc,然后向DS18b20发出命令字0x44,来启动温度转换,然后延时一段时间,确保温度转换完成。温度转换完成后要获取转换的数据,同样要先对DS18b20进行初始化并延时,并跳过ROM指令,要获取转换结果要从字节0开始,直到字节9结束,要用到读暂存器指令0xbe,然后便开始读取转换的数据,由于转换结果的数据是16位的,而每次读取8位,要读取两次,先读取低8位,再读取高8位,分别存起来,由于获得的数据都是补码形式,而负温度的补码与原码又不相同,因此读完之后要进行符号位的判定,根据温度的正负不同分别对数据进行不同的处理,都转换成我们要的温度数值,但要显示数据是将各位数据分离出来,而小数点后一位的数据不好分离,为方便分离,将实际温度数值乘以10,将其挪到小数点前。4.2 单片机向1602发送命令及数据的程序1602液晶,能够同时显示16x2即32个字符(16列2行)。对1602进行操作首先要知道如何向1602液晶写数据与写指令,对1602的写操作是将读/写选择端R/W端置地,然后通过控制数据/命令选择端RS来控制。当写指令时,将RS置低,然后给使能端一个从低到高跳变的脉冲并延时一段时间便可以了,最后释放使能端置为低电平;当写数据时,将RS置高,然后给使能端一个从低到高跳变的脉冲同样延时一段时间,最后也要释放使能端置为低电平。知道了如何向1602中写数据与写命令便可以控制1602显示,但在让1602正式显示之前还要对其进行初始化。对1602的初始化首先要写入显示模式设置命令字0X80,用来设置16x2显示,5x7点阵,8位数据端口;然后再写入显示开/关及光标设置指令,这里我们写入0X0C,设置开显示,不显示光标,光标不显示;再写入显示开/关及光标设置指令0X06,设置当读或写一个字符后地址指针加一且光标加一,当写一个字符,整屏显示不左移;最后写入清屏指令0X01进行显示清屏操作。4.3 主函数对各子函数的调用过程首先整体初始化,然后将液晶初始化,由于上电后DS18b20默认85摄氏度,因此要在显示前先进行温度转换并加程序延时,使显示的时候直接显示我们要的温度值,然后进入正式显示部分,正式显示部分为循环执行的,包括每次都进行一次温度转换,并读取转换结果,之后再将温度数据中的各位分离出来,然后确定液晶显示字符的位置,依次显示符号、百位、十位、个位、小数点及小数点后一位等字符,每显示一个字符,都要延时一段时间。整体程序设计见附录1。5 仿真结果在Proteus中画好连线图,然后往单片机中下载好编译程序后生成的hex文件,就可以进行仿真了,其结果如图所示:6 总结与体会附录1/* writer:shopping.w */#include #include #define uint unsigned int#define uchar unsigned char#define delayNOP() _nop_();_nop_();_nop_();_nop_();/* DS18B20 指令*/ #define ds18B20_READ_ROM 0x33 / 读 ROM 指令 #define ds18B20_MATCH_ROM 0x55 / 匹配 ROM 指令 #define ds18B20_SKIP_ROM 0xCC / 跳过 ROM 指令 #define ds18B20_SEARCH_ROM 0xF0 / 搜索 ROM 指令 #define ds18B20_ALARM_SEARCH 0xEC / 报警搜索指令 #define ds18B20_WRITE_SCRATCHPAD 0x4E / 写暂存寄存器指令 #define ds18B20_READ_SCRATCHPAD 0xBE / 读暂存寄存器指令 #define ds18B20_COPY_SCRATCHPAD 0x48 / 复制暂存寄存器指令 #define ds18B20_CONVERT_T 0x44 / 启动温度转换指令 #define ds18B20_RECALL_E2 0xB8 / 重新调出 E2PROM 的数据 #define ds18B20_READ_POWER_SUPPLY 0xB4 / 读电源#define LCD_Data P0 /定义数据指令端口sbit ds18B20_data = P20; /温度探头(DQ)数据端口对应的单片机引脚 sbit LCD_RS = P25;sbit LCD_RW = P26;sbit LCD_EN = P27;uchar Minus_Flag=0;uchar code Temp_Disp_Title=Current Temp : ;uchar Current_Temp_Display_Buffer=TEMP: ;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0;void Delay(uint x) while(-x);/*延时10us*/ /先执行一个LCALL指令(2 s),然后执行6个_NOP_( )语句(6 s),最后执行了一个RET指令(2 s) void Delay_10us(void) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /*延时 time*15us* */void delay_15us(uint time) uint i; for (i=0;itime;i+); void DelayXus(uint x) uchar i;while(x-) for(i=0;i480us delay_15us(40); / 延时 480-960us ds18B20_data = 1; / 拉高总线,延时 15us-60us 后等待ds18B20 响应 delay_15us(2); / 15us-60us for (i=0;i6;i+) / 60us-240us delay_15us(1); if (ds18B20_data=0) RstFlag=0; / 接收 ds18B20 的存在信号 delay_15us(20); / 240us return RstFlag; /*写一个字节 ds18B20 数据、命令子程序* 功能:向 ds18B20 写入数据或命令 入口:待写入 ds18B20 的数据或命令 出口:无 */ void Writeds18B20(uchar ch) uchar i; ds18B20_data = 1; / 拉高总线,延时 1us,准备启动 _nop_(); for (i=0;i1; /先写低位,后写高位 _nop_(); /*读一个字节 ds18B20 数据子程序* 功能:从 ds18B20 读出数据 入口:无 出口:读出的 ds18B20 的数据 */ uchar Readds18B20(void) uchar i,ch; ch = 0; ds18B20_data = 1; / 拉高总线,延时 1us,准备启动 _nop_(); for (i=0;i1; if (ds18B20_data = 1) / 接收 ds18B20 的数据 ch = ch+0x80; delay_15us(2); / 延时 45us,保证整个读命令有 60us return ch; /*启动 ds18B20 温度转换程序* 功能:读取 18B20 的温度值 入口:无 出口:0xffff18B20 不正常 0x8000温度低于零度 01250摄氏温度(0125) */ uint GetTempValue(void) uchar temp1=0,temp2=0; uint T=0; float TC; /TC(浮点数)实际温度 if(!Rstds18B20() /如果探头连接正常 Rstds18B20(); / 复位 ds18B20 Writeds18B20(ds18B20_SKIP_ROM); / 跳过 ROM 操作 Writeds18B20(ds18B20_CONVERT_T); / 启动 ds18B20 温度转换 if(!Rstds18B20() / 如果探头连接正常 Rstds18B20(); / 复位 ds18B20 Writeds18B20(ds18B20_SKIP_ROM); / 跳过 ROM 操作 Writeds18B20(ds18B20_READ_SCRATCHPAD); /* 发读 ds18B20 数据, 前两位是温度值 */ temp1 = Readds18B20(); / 温度值的低位数据 temp2 = Readds18B20(); / 温度值的高位数据/ temp1=0x56;/ temp2=0x05; T = temp1+(temp28); if(temp2&0xfc)=0xfc) Minus_Flag=1;TC=T+1; else Minus_Flag=0;TC=T; / TC=T*0.0625; /将测量的数据转换成实际温度 /TC=0x0556; return (TC*0.625); /返回 TC else return 0xffff; else return 0xffff; void Display_Temperature(uint num)uchar m,n,q,i; m=num/100; /得到十位 n=num%100/10; /得到个位 q=num%10; /对上述整数求余得到小数点后第一位 Display_Digit2 = m;Display_Digit1 = n;Display_Digit0 = q; if(Minus_Flag) Current_Temp_Display_Buffer7 =-; else Current_Temp_Display

温馨提示

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

评论

0/150

提交评论