《毕业设计(论文)基于单片机的数字温度计设计1.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机的数字温度计设计1.doc(31页珍藏版)》请在三一办公上搜索。
1、选题: 基于单片机的数字温度计设计Topic: Cipher Power switch姓 名:学 号:专 业:指导教师:完成时间:声明本人郑重声明:所呈交的毕业设计(论文)是本人在指导教师指导下进行的研究工作及取得的研究成果。其中除加以标注和致谢的地方,以及法律规定允许的之外,不包含其他人已经发表或撰写完成并以某种方式公开过的研究成果,也不包含为获得其他教育机构的学位或证书而作的材料。其他同志对本研究所做的任何贡献均已在文中作了明确的说明并表示谢意。本毕业设计(论文)成果是本人在江西师范大学读书期间在指导教师指导下取得的,成果归江西师范大学所有。特此声明。声明人(毕业设计(论文)作者)学号:声
2、明人(毕业设计(论文)作者)签名:签名日期:年月日摘要本文提出了基于MCS-51系列单片机的数字温度计的制作电路和编程思想。该数字温度计以宏晶公司的STC89C52 单片机为主控,配以达拉斯公司的DS18B20数字温度传感器,采用1602双行英文字符液晶作显示。实现了对温度的测量,显示,和报警等功能。关键词: STC89C52单片机;数字传感器DS18B20;显示器LCD;ABSTRACTIn this paper, based on MCS-51 series microcontroller digital thermometer circ-uit and the production of
3、 programming ideas. The digital thermometer to macros cry-stal company STC89C52 MCU master, together with the Dallas companys DS18B20 digital temperature sensor, using 1602 pairs of lines for the English character LCD display. Realize the temperature measurement, display, and alarm functions.Key wor
4、ds:Singlechip STC89C52, DS18D20,LCD panel目 录摘要IABSTRACTII1 绪论21.1 选题的背景21.2 数字温度计简介21.2.1 数字温度计的特征21.2.2 设计实现的目标32 数字温度计的方案设计42.1 设计方案论证与比较42.1.1 显示电路方案42.1.2 测温电路方案42.2 系统总体方案43 数字温度计的硬件电路设计53.1 控制电路53.1.1 MCU简介53.2.2 最小系统模块63.3 温度传感器设计73.3.1 DS18B20简介73.3.2 温度传感器与单片机的连接93.3.3 复位信号及外部复位电路103.4 单片机与
5、报警电路103.5 显示电路104 软件设计124.1 DS18b20的读操作124.2 DS18b20的温度数据处理134.3 1602显示部分145 数据测试16参考文献18附录1 程序源代码191 绪论1.1 选题的背景随着现代信息技术的飞速发展和传统工业改造的逐步实现能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。选用STC89C52单片机作为主控
6、制器件,DSl8B20作为测温传感器通过LCD1602并行传送数据,实现温度显示。通过DSl8B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在-55125最大线性偏差小于0.1。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。1.2 数字温度计简介1.2.1 数字温度计的特征温度是我们日常生产和生活中实时在接触到的物理量,但是它是看不到的,仅凭感觉只能感觉到大概的温度值,传统的指针式的温度计虽然能指示温度,但是精度低,使用不够方便,显示不够直观,数字温度计的出现可以让人们直观的了解自
7、己想知道的温度到底是多少度。数字温度计采用进口芯片组装精度高、高稳定性,误差0.5%, 内电源、微功耗、不锈钢外壳,防护坚固,美观精致。数字温度计采用进口高精度、低温漂、超低功耗集成电路和宽温型液晶显示器,内置高能量电池连续工作5年无需敷设供电电缆,是一种精度高、稳定性好、适用性极强的新型现场温度显示仪。是传统现场指针双金属温度计的理想替代产品,广泛应用于各类工矿企业,大专院校,科研院所。数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,这个电
8、信号可以使用模数转换的电路即AD转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机或者PC机等,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值,如25.0摄氏度,然后通过显示单元,如LED,LCD或者电脑屏幕等显示出来给人观察。这样就完成了数字温度计的基本测温功能。数字温度计根据使用的传感器的不同,AD转换电路,及处理单元的不同,它的精度,稳定性,测温范围等都有区别,这就要根据实际情况选择符合规格的数字温度计。1.2.2 设计实现的目标1) 测温基本范围-55125。2) 测温精度误差小于或等于0.5。3) 超温报警。4) LCD屏幕显示实时
9、温度。2 数字温度计的方案设计2.1 设计方案论证与比较2.1.1 显示电路方案方案一:采用数码管动态显示使用七段LED数码管,采用动态显示的方法来显示各项指标,此方法虽然价格成本低,但是显示单一,且功耗较大。方案二:采用LCD液晶显示采用1602 LCD液晶显示,此方案显示内容相对丰富,且价格不高。综合上述原因,采用方案二,使用LCD液晶作显示电路。2.1.2 测温电路方案方案一:采用模拟温度传感器测温由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,
10、这种设计需要用到A/D转换电路,感温电路比较麻烦。方案二:采用数字温度传感器进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。综合考虑,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。2.2 系统总体方案根据上述方案比较,结合题目要可以将系统分为主控模块,显示模块,温度采集模块和报警模块,其框图如下:驱动显示报警电路看门狗 MCU DS18B20温度数据采集图2-1 系统总体设计框图3 数字温度计的硬件电路设计3.1 控
11、制电路3.1.1 MCU简介CPU是整个控制部分的核心。在考虑经济性和满足需求的前提下,本系统选用宏晶公司生产的8位STC89C52单片机作为整个系统的控制中心。STC89C52是宏晶公司生产的低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用宏晶公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚,它集Flash存储器既可在线编辑(ISP)也可用传统方法进行编辑及通用8位微处理器于单片芯片中,功能强大STC89C52单片机可为您提供许多高性价比的应用场合。器管脚图如图3-2:图3-1 STC89C52管脚图在本系统中,STC
12、89C52单片机内部的功能单元已经能够满足系统设计需要,不需要系统扩展。STC89C52具有以下的特点: 8031 CPU与MCS-51 兼容 寿命:1000写/擦循环 4K字节可编程FLASH存储器 全静态工作:0-24MHz 三级程序存储器保密锁定 128*8位内部RAM 32条可编程I/O线 两个16位定时器/计数器 6个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟除此之外,STC89C52RC单片机还具有看门狗内部外设。在工业控制/汽车电子/航空航天等需要高可靠性的系统中,为了防止“系统在异常情况下,受到干扰,MCU/CPU程序跑飞,导致系统长时间异常工作” ,通常
13、是引进看门狗,如果MCU/CPU 不在规定的时间内按要求访问看门狗,就认为MCU/CPU处于异常状态,看门狗就会强迫MCU/CPU复位,使系统重新从头开始按规律执行用户程序。系统中单片机STC89C52RC中自带看门狗电路。其寄存器设置相关信息如下:表3-1 STC89C52看门狗寄存器STC89C52单片机看门狗复位时间是可以自行选择和设置的,其设置方法是:表3-2 看门狗定时器预分频值3.2.2 最小系统模块本次设计中,选用宏晶公司的51系列单片机STC89C52芯片作为电子密码电源开关的数据处理及操作控制芯片。只有单片机芯片无法完成数据处理及控制功能,必须有附加的电路,使单片机芯片组成一
14、个可运行的系统才能实现其功能。本次设计中,由STC89C52芯片连同附加电路构成的单片机最小系统作为数据处理及控制模块,其中,使用P0口作为1602液晶的数据传输口,P2口作1602的命令数据控制、时钟、读写控制、和使能控制接口,P3口作按键扫描接口,P1.4作DS18B20的总线接口。P1.3作报警控制接口。其电路连接图3-3如下:图3-2 数据处理及控制模块3.3 温度传感器设计3.3.1 DS18B20简介DS18B20可以程序设定912位的分辨率,精度为0.5C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。温度传感器DS1
15、8B20引脚如图3-4所示。图3-3 DS18B20TO92封装温度传感器引脚功能说明:VDD :可选电源脚,电源电压范围35.5V。当工作于寄生电源时,此引脚必须接地。DQ :数据输入/输出脚。漏极开路,常态下高电平。GND :为电源地图3-4 DS18B20内部结构图DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位
16、的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+12
17、5的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。 该字节各位的意
18、义如下:TM R1 R0 1 1 1 1 1低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1所示:(DS18B20出厂时被设置为12位)表3-3 DS18B20温度转换时间表R1R0分辨率/位温度最大转向时间00993.750110187.510113751112750根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预
19、定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。3.3.2 温度传感器与单片机的连接温度传感器的单总线(1-Wire)与单片机的P20连接,P20是单片机的高位地址线A8。P2端口是一个带内部上拉电阻的8位双向IO,其输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对该端口写“1”,可通过内部上拉电阻将其端口拉至高电平,此时可作为输入口使用,这是因为内部存在上拉电阻,某一引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时。如执行
20、MOVX DPTR指令,则表示P2端口送出高8位的地址数据。在访问8位地址的外部数据存储器时,可执行MOVX RI指令,P2端口内容即为特殊功能寄存器(SFR)区中R2寄存器内容,整个访问期间不改变。在Flash编程和程序校验时,P2端口也接收高位地址和其他控制信号。图3-5为DSl8820内部结构。图3-6为DSl8820与单片机的接口电路。图3-5 DS18B20和单片机的接口连接3.3.3 复位信号及外部复位电路单片机的P1.6端口是MAX813看门狗电路中喂狗信号的输入端,即单片机每执行一次程序就设置一次喂狗信号,清零看门狗器件。若程序出现异常,单片机引脚RST将出现两个机器周期以上的
21、高电平,使其复位。该复位信号高电平有效,其有效时间应持续24个振荡脉冲周期即两个机器周期以上。若使用频率为12 MHz的晶体振荡器,则复位信号持续时间应超过2s才完成复位操作。图3-6 复位电路3.4 单片机与报警电路系统中的报警电路是由发光二极管和限流电阻组成,并与单片机的P1.2端口连接。P1端口的作用和接法与P2端口相同,不同的是在Flash编程和程序校验期间,P1接收低8位地址数据。3.5 显示电路采用技术成熟的74HCl64实现串并转换。LCD显示分为静态显示和动态显示。这里采用静态显示,系统通过单片机的串行口来实现静态显示。串行口为方式零状态,即工作在移位寄存器方式,波特率为振荡频
22、率的1/12。当器件执行任何一条将SBUF作为目的寄存器的命令时,数据便开始从RXD端发送。在写信号有效时,相隔一个机器周期后发送控制端SEND有效,即允许RXD发送数据,同时允许从TXD端输出移位脉冲。图3-7为显示电路的连接图。图3-7 显示电路的连接图4 软件设计4.1 DS18b20的读操作DSl8B20的主要数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。DSl8B20可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。此外,还可外接5
23、V电源,给DSl8B20供电。DSl8B20的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。DS18B20读写时序如图4-14-3:图4-1 DS18B20的复位时序图图4-2 DS18B20的写数据时序图图4-3 DS18B20的读数据时序图由时序图可知,DS18B20在复位时需要480us的低电平,等待15us后MCU将总线拉高,等待DS18B20的响应信号;DS18B20在写数据时分为写“0”和写“1”操作,写“0”操作时,DS18B20需要至少60us的总线被拉低,然后在60us内将“0”写入DS18B20中,持续时间至少1us,写“1”操作是只需将写入的“0”改为“1”即可
24、;DS18B20读操作也分为读“0”和读“1”操作,读“0”操作时,总线需要15us被拉低,再拉高45us,然后再15us内将数据读走,读“1”操作同读“0”操作。程序流程图如图4-4:开始DS18B20的初始化启动温度转换读取温度寄存器跳过读序列号的操作跳过读序列号的操作DS18B20的初始化RETLOW-低八位 HIGH-高八位图4-4 DS18B20读取温度的流程图4.2 DS18b20的温度数据处理读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出
25、来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行四舍五入处理:大于0.5的话,向个位进1;小于0.5的时候,舍去不要。当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。还因为DS18B20最低温度只能为-55,所以可以将整数部分的最高位换成一个“-”,表示为负数。图4-2为温度数据处理程序的流程图。开始提取整数部分存入HT提取小数部分存入LTLT右移三位,将精度降低到0.5摄氏度HT+将小数部分整数化提取符号部分存入signLT是否大于5是否为负数RET负数标志flag=1YNNY图4-5 温度数据处理流程图4.3 1602显示部分1602的读写时序图如下:图4-
26、6 1602液晶的读时序图图4-7 1602的写时序图根据以上时序图可以得出读写程序流程图如下:开始选择写数据写命令RS=1|RS=0选择写操作RW=1使能EN准备好写入的数据DB0DB7禁止EN结束开始选择写数据写命令RS=1|RS=0选择读操作RW=0使能EN禁止EN结束图4-8 1602的写流程图图4-8 1602的读流程图5 数据测试用手触屏温度传感器,可以发现温度大概显示为32度左右。将温度传感器与塑料袋装的冰水混合物接触,观察液晶显示的温度是否为零度。6 结语本文重点介绍了单片机和数字传感器DS18B20的原理和功能,并用DS18B20与STC89C52单片机、LCD1602组成数
27、字温度计,有超温报警功能。 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。参考文献1 谢自美. 电子线路综合设计M. 武汉:华中科技大学出版社, 2007.2 夏继强. 单片机应用设计培训
28、教程实践篇M. 北京:北京航空航天大学出版社, 2008.3 何立明. MCS-51单片机应用系统设计(系统配置与接口技术)M. 北京:北京航空航天大学出版社, 2003.4 李广弟, 朱月秀, 王秀山. 单片机基础M. 北京:北京航空航天大学出版社, 2001.7.5 康华光. 电子技术基础(模拟部分)(第五版)M. 武汉:华中科技大学出版社, 2007.6 王毅. 单片机器件应用手册M. 人民邮电出版社, 1995.7 孙育才,苏学成.单片微型计算机应用系统设计与实现M.南京:东南大学出版社,1990.118 陈嘉庆等.多国单片机实用技术编辑部,1992.9 吴微,文军.单片机原理与制作M
29、.武汉:武汉大学出版社,1991.310 李勋,林广艳.单片微型计算机大学读本M.北京:北京航空航天大学出版社,1998.811 付家才.单片机控制工程实践基础M.北京:化学工业出版社,2003.212 A Bakers Dozen:Real Analog Solutions for Digital DesignersJ. Bonnie Baker(美),李喻奎 译.2006.8.113 ZharkovI,Podolich,VSaonov,VA Temperature-ControlledSystem for Optical M icroscopy in the Temperature Ran
30、ge800KInstruments and Experimental Techniques2005,48(5)686689 附录1 程序源代码#include #include #define uchar unsigned char#define uint unsigned intsbit dq= P37; /定义DS18B20端口dqbit presence;sbit lcd_rs=P20;sbit lcd_rw=P21;sbit lcd_en=P22;sbit back_led=P24;uchar code disp_1= By ZhangWei ;uchar code disp_2= T
31、emper: . C ;uchar code disp_3= DS18B20 ERR0R ;uchar code disp_4= PLEASE CHECK ;uchar data temp_data2=0x00,0x00;uchar data display5=0x00,0x00,0x00,0x00,0x00;uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;/*小数位表,四舍五入*/uchar code mytab8=0x0C,0x12,0x1
32、2,0x0C,0x00,0x00,0x00,0x00;#define delay_nop() _nop_();_nop_();_nop_();_nop_();/*/void delay1(int ms)uchar y;while(ms-)for(y=0;y250;y+)_nop_();_nop_();_nop_();_nop_();/*/*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */*/bit lcd_busy()bit result;lcd_rs=0;lcd_rw=1;lcd_en=1;delay_nop();result=(b
33、it)(P0&0x80);lcd_en=0;return(result);/*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */*/void lcd_write_cmd(uchar cmd)while(lcd_busy();lcd_rs=0;lcd_rw=0;lcd_en=0;_nop_();_nop_();P0=cmd;delay_nop();lcd_en=1;delay_nop();lcd_en=0;/*/*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */*/void lcd_write_dat(uchar dat)whi
34、le(lcd_busy();lcd_rs=1;lcd_rw=0;lcd_en=0;P0=dat;delay_nop();lcd_en=1;delay_nop();lcd_en=0;/* LCD初始化设定 */*/void lcd_init() delay1(15); lcd_write_cmd(0x01); /清除LCD的显示内容 lcd_write_cmd(0x38); /16*2显示,5*7点阵,8位数据 delay1(5); lcd_write_cmd(0x38); delay1(5); lcd_write_cmd(0x38); delay1(5); lcd_write_cmd(0x0c
35、); /显示开,关光标 delay1(5); lcd_write_cmd(0x06); /移动光标 delay1(5); lcd_write_cmd(0x01); /清除LCD的显示内容 delay1(5);/* 设定显示位置 */*/void lcd_pos(uchar pos)lcd_write_cmd(pos|0x80); /数据指针=80+地址变量/*自定义字符写入CGRAM */*/void write_cgram() uchar i; lcd_write_cmd(0x40); /写CGRAM for (i=0;i0;i-)dq=0; / 给脉冲信号dat=1;dq=1; / 给脉冲
36、信号if(dq)dat|=0x80;delay(4);return (dat);/* 写一个字节 */*/void write_byte(uchar dat)uchar i=0;for (i=8;i0;i-)dq=0;dq=dat&0x01;delay(5);dq=1;dat=1;/* 读取温度 */*/void read_temper(void) init_18b20(); write_byte(0xCC); / 跳过读序号列号的操作 write_byte(0x44); / 启动温度转换 init_18b20(); write_byte(0xCC); /跳过读序号列号的操作 write_by
37、te(0xBE); /读取温度寄存器 temp_data0=read_byte(); /温度低8位 temp_data1=read_byte(); /温度高8位/* 数据转换与温度显示 */*/void disp_temper()display4=temp_data0&0x0f;display0=ditabdisplay4+0x30; /查表得小数位的值display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4);display3=display4/100+0x30;display1=display4%100;display2=display1/10+0x30;display1=display1%10+0x30;if(display3=0x30) /高位为0,不显示display3=0x20;if(display2=0x30) /次高位为0,不显示display2=0x20;lcd_pos(0x48);lcd_write_dat(display3); /百位数显示lcd_pos(0x49);lcd_write_dat(display2); /十位数显示lcd_pos(0x4a);lcd_write_dat(display1); /个位数显示lcd_pos(0x4c);lcd_write_dat(display0