资源描述
毕业论文题 目: 基于单片机的电子温度计设计 所属系、部 : 电 气 系 年级、 专业: 应用电子技术121 姓 名: 罗 艳 学 号: 20120111211039 指 导 教 师: 张 洁 目 录绪 论51 硬件系统总体方案设计62单元电路设计62.1 传感器电路62.1.1 DS18B20的简单介绍62.1.2 DS18B20的性能特点72.1.3DS18B20引脚定义72.1.4 DS18B20功能实现原理82.2 单片机最小系统92.2.1 STC89C52单片机92.2.2最小系统122.3显示电路142.3.1数码块显示142.3.2 数码管的分类153系统软件设计153.1.主程序153.2温度检测模块DS18B20163.3温度显示模块164硬件仿真174.1Proteus介绍174.1.1关于proteus174.1.2功能174.1.3硬件仿真电路图175安装调试185.1硬件制作185.1.1 硬件制作过程185.2系统调试18总结19致谢20参考文献21附录122附录226摘 要随着社会的发展,科技的进步,以及传感器在各个领域的应用,智能化已成为社会发展势不可挡的趋势。单片机作为微电控制的基础,对于国家未来的发展有着深远意义。单片机的应用很广泛,使用也比较灵活,尤其是在对成本要求较为苛刻的地方,可以说在中国的社会主义初级阶段,单片机是能够占有一席之地的。单片机的学习和应用对于我们当代青年人就显得尤为重要。如今数字化电子钟技术已经很广泛的应用在人们生活的各个领域,这要归功与单片机技术的迅速发展及广泛普及。本论文主要概述由单片机89C52、液晶显示器、温度传感器DS18B20等组成的温度测量电路。本设计是基于AT89C52单片机数字钟和数字温度计设计,采用模块化的设计思想。软硬件都分为温度的感应模块、时钟模块、控制模块、显示模块。并使用Proteus绘制电路原理图,PCB电路板;采用KeiluVision源代码编辑、调试程序。综上所述此数字电子钟温度计具有诸多优点,符合电子仪器仪表的发展趋势,具有广泛的市场前景。AbstractWith the development of the society, the progress of science and technology, and sensor applications in various fields, intelligent has become an irresistible trend of development of the society. Single chip microcomputer as the basis for the control of micro electric has profound significance to the development of the countrys future. MCU application is very extensive, use is more flexible, especially in the harsh place to cost requirement, can say the primary stage of socialism in China, single chip microcomputer is able to gain a foothold. Study and application of the single chip microcomputer of contemporary young people is especially important for us.Now digital electronic clock technology is widely used in various fields of peoples life, this is attributed to the rapid development of the single-chip computer technology and wide popularity. Summary of this thesis mainly consists of single chip microcomputer 89 c52, liquid crystal display, temperature sensor DS18B20 temperature measurement circuit, etc.This design is based on AT89C52 single chip digital clock and digital thermometer is designed, using modular design thought. Hardware and software are divided into temperature sensing module, clock module, control module, display module. And use Proteus draw the circuit principle diagram, PCB circuit boards; Using Keil uVision source code editing, debugging process.To sum up the digital electronic clock thermometer has read convenient, in line with the development trend of electronic instruments and meters, has a broad market prospect.绪 论温度是一个非常重要的物理量,因为它直接影响燃烧、化学反应、发酵、烘烤、煅烧、蒸馏、浓度、挤压成形、结晶以及空气流动等物理和化学过程。温度控制失误就可能引起生产安全、产品质量、产品产量等一系列问题。因此对温度的检测的意义就越来越大。温度采集控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。 温度采集控制系统是在嵌入式系统设计的基础上发展起来的。嵌入式系统虽然起源于微型计算机时代,但是微型计算机的体积、价位、可靠性,都无法满足广大对象对嵌入式系统的要求,因此,嵌入式系统必须走独立发展道路。这条道路就是芯片化道路。将计算机做在一个芯片上,从而开创了嵌入式系统独立发展的单片机时代。单片机诞生于二十世纪七十年代末,经历了SCM、MCU和SOC三大阶段。在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。同时温度也是生活中最常见的一个物理量,也是人们很关心的一个物理量,它与我们的生活息息相关,有着十分重要的意义,在工业生产中,温度过高或过低会直接影响到产品的质量、对机械设备和控制系统中的各种元器件造成一定的损坏,严重的会影响到生产安全。在日常生活中,温度过高或过低同样会造成一些不良影响。在实际生产、生活等各个领域中,温度是环境因素的不可或缺的一部分,对温度及时精确的控制和检测显得尤为重要。现随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。1 硬件系统总体方案设计采用数字温度芯片DS18B20测量温度,输出信号全数字化。便于单片机处理和控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性质稳定,它温用作工业测温元件,此元件线性较好。在0-100摄氏度时,最大线性偏差小于1摄氏度。DS18B20的最大特点之一是采用了单总数的数据传输,由数字温度计DS18B20和微控制器AT89C52构成温度测量装置,它直接输出温度的数字信号,可直接和计算机连接。这样温度系统的结构就比较简单,体积也不大。采用51单片机控制软件编程的自由度大,而且体积小,硬件实现简单,安装方便。该系统利用AT89C52芯片控制温度传感器DS18B20进行温度的实时检测并显示,能够实现快速测量环境温度。硬件以微控制器为核心,外接时钟电路、复位电路、温度测量电路、LED显示电路组成。总体硬件电路如1所示:图1-1系统方案图本温度计大体分三个工作过程。首先,由DS18820温度传感器芯片测量当前的温度,并将结果送入单片机。然后,通过89C205I单片机芯片对送来的测量温度读数进行计算和转换,井将此结果送入显示模块。2单元电路设计2.1 传感器电路 2.1.1 DS18B20的简单介绍DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式;温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离 多点温度检测系统。2.1.2 DS18B20的性能特点独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电。温范围55125,在-10+85时精度为0.5。零待机功耗。可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。用户可定义报警设置。报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件。测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。2.1.3DS18B20引脚定义 (1)引脚定义1)DQ为数字信号输入/输出端; 2)GND为电源地; 3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。图2-1 DS18B20引脚图(2)内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。图2-2单片机内部结构图 2.1.4 DS18B20功能实现原理DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。图2-3 DS18B20测温原理图在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算:Ts=(Tz-0.25)+(CD-Cs)/CD2.2 单片机最小系统2.2.1 STC89C52单片机 stc89C52是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C52提供了高性价比的解决方案。stc89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 一、引脚排列图2-4 AT89C52引脚图VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,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口也可作为AT89C51的一些特殊功能口:1) P3.0RXD(串行输入口);l 2) P3.1TXD(串行输出口); 3 )P3.2INT0(外部中断0);l 4) P3.3INT1(外部中断1);l 5) P3.4T0(记时器0外部输入);l 6)P3.5T1(记时器1外部输入);l 7)P3.6WR(外部数据存储器写选通);l 8)P3.7RD(外部数据存储器读选通);RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期PSEN两次有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。二、STC89C52的功能兼容MCS51指令系统,8K可反复擦写Flash ROM,32个双向I/O口 ,256x8bit内部RAM ,3个16位可编程定时/计数器中断,时钟频率0-24MHz ,2个串行中断,可编程UART串行通道,2个外部中断源 ,共6个中断源 ,2个读写中断口线 ,3级加密位,低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。2.2.2最小系统 单片机最小系统电路如图:2-5 单片机最小系统图主要由时钟电路,复位电路和单片机组成。一、时钟电路STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图42(a)所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.212MHz之间选择,电容值在530pF之间选择,电容值的大小可对频率起微调的作用。外部方式的时钟电路如图42(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。 图2-5 时钟电路二、复位电路为确保两点间温度控制系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般电路正常工作需要供电电源为5V5%,即4.755.25V。复位是单片机的初始化操作,其目的是使CPU及各专用寄存器处于一个确定的初始状态。如:把PC的内容初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当单片机系统在运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要复位以使其恢复正常工作状态。RST端的外部复位电路有两种操作方式:上电自动复位和按键手动复位。按键手动复位有电平方式和脉冲方式两种,本系统设计采用上电复位,如图2-6所示。上电复位是直接将RST端通过电阻接高电平来实现单片机的复位。 图2-6 复位电路2.3显示电路 2.3.1数码块显示图2-7 数码管1)数码管使用条件a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流80mA(每段10mA);动态:平均电流4-5mA峰值电流100mA2)七段数码管引脚图。其中共阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图数码管使用注意事项说明:()数码管表面不要用手触摸,不要用手去弄引角;()焊接温度:度;焊接时间:()表面有保护膜的产品,可以在使用前撕下来。 图2-8 数码管引脚图 2.3.2 数码管的分类这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。图中的8个LED分别与上面那个图中的ADP各段相对应,通过控制各个LED的亮灭来显示数字。这一次我们选择的是共阴极的数码管。图2-9共阴极连接方式3系统软件设计 3.1.主程序图3-1 程序框图 (程序见附录1)3.2温度检测模块DS18B203-2 温度检测程序框图 (程序见附录2) 3.3温度显示模块图3-4温度显示程序框图 (程序见附录2) 4硬件仿真 4.1Proteus介绍 4.1.1关于proteusProteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是比较好的仿真单片机及外围器件的工具。虽然国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是现今世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。 4.1.2功能 智能原理布图,混合电路仿真与精确分析,单片机软件调试,单片机与外围电路的协同仿真,PCB自动布局与布线。4.1.3硬件仿真电路图4.1 仿真电路图5安装调试5.1硬件制作 5.1.1 硬件制作过程1)元件检查:依次对电解电容的容量,损耗,漏电流进行检测,对晶振的频偏,负载电容进行检查,以及对感温元件,单片机,和数码管进行功能测试。2)焊接:对元件的焊接要注意避免虚焊,漏焊的情况。并且也要注意焊接时间的控制,以免焊接时间过长,造成元件或板子的损坏。3) 连线:在有的地方,我们可以用连接线来进行元件与元件的连接,在连接线的排列过程中,尽量把排得整齐一点,避免线太乱造成检查困难和影响美观。5.2系统调试第一步、检查PCB板在通电调试之前,先检查PCB电路连线是否有错误。然后对照PCB电路图,挨个对元件进行检查。第二步、通电观察调试好所需要的电源电压数值,并确定PCB电路板电源端无短路现象后,才能给PCB电路接通电源。电源一经接通,不要急于用仪器观测波形和数据,而是要观察是否有异常现象,如冒烟、异常气味、放电的声光、元器件发烫等。如果有,不要惊慌失措,而应立即关断电源,待排除故障后方可重新接通电源。然后,再测量每个集成块的电源引脚电压是否正常,以确信集成PCB电路是否已通电工作。第三步、功能测试测试并记录测试数据,对测试数据进行分析,最后作出测试结论,以确定PCB电路的技术指标是否符合设计要求。如有不符,则应仔细检查问题所在,一般是对某些元件参数加以调整和改变。若仍达不到要求,则应对某部分PCB电路进行修改,甚至要对整个PCB电路重新加以修改。因此,要求在设计的全过程中,要认真、细致,考虑问题要更周全。尽管如此,出现局部返工也是难免的。总结通过这次课程设计,加强了自己动手、思考和解决问题的能力。在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了,因此耗费在这上面的时间用去很多。我知道做课程设计同时也是对课本知识的巩固,并且对于传感器与单片机在电路中的使用有了更多的认识。平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。比如单片机各个引脚的功能,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个元件映象深刻。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个期末测试之后的课程设计对我们的作用是非常大的。经过这两周的设计,总算成功的完成任务,过程曲折可谓一语难尽。在此期间也失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了。同时,在老师的身上我们学也到很多实用的知识,再次我们表示感谢!此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和遇到解决不了的问题及时请教他人,我都受益非浅。致谢在这次毕业论文完成以后,我们面临的是离开学校和老师的怀抱,真正投身到这个复杂而纷繁的社会之中,这时候的我才意识到老师是多么的无私。像在本毕业设计的设计和制作过程中,张洁老师给了我很大的帮助及督促,在我自己不着急的时候是她在着急,她担心着我们,是她的执着让我可以完成这次论文。同时也要感谢其它老师的教导,他们教给我的知识我将一生受用。当然也离不开钟旭同学的热心帮助,是他在我遇到难题的时候给了我启发。通过本次毕业设计,我在专业知识、专业技能和解决问题方法方面得到很大的提高。更深入了解并掌握了传感器的基本理论知识,并在单片机实际电路开发和常用编程设计思路掌握方面有了一定程度的掌握,尽管本次设计还不是很完善,但这为我以后的设计之路积累了宝贵的经验。参考文献1 李建忠单片机原理及应用第二版M 西安:西安电子科技大学出版社 ,2008.5。 2 何立民单片机应用技术大全M 北京:北京航空航天大学出版社,1994。 3 袁希光传感器技术手册M 北京:国防工业出版社,1986。 4 冯英传感器电路原理与制作M 成都:成都科技大学出版社,1997。 5 张有德,赵志英.单片微型机原理、应用于实验.复旦大学出版社,2000.4。 6 赵新民,王祁.智能仪器设计基础.哈尔滨:哈尔滨工业大学出版社,1999。 7 黄亮基于AT89C2051串口的LED数码管显示电路J电子制作,2006,第08期。 附录1 #include / #include / #define uchar unsigned char / #define uint unsigned int / sbit DQ = P00; /数据口define interface sbit xiao =P34; /数码管段选sbit ge =P35;/数码管位选sbit shi =P36; /数码管段选sbit bai =P37; /数码管段选 uint temp; /温度值 variable of temperature unsigned char code table = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71; unsigned char code table1 = 0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef,0 xf7,0 xfc,0 xb9,0 xde,0 xf9,0 xf1; /*精确延时函数*/void delay(unsigned char i) /延时1*2+5us while(-i); void delay1(unsigned char i) uchar t,m; for(m=0;mi;m+) for(t=0;t0;i-) DQ = 0; /将总线拉低,要在1us之后释放总线 /单片机要在此下降沿后的15us内读数据才会有效。 _nop_(); /至少维持了1us,表示读时序开始 dat = 1; /让从总线上读到的位数据,依次从高位移动到低位。 DQ = 1; /释放总线,此后DS18B20会控制总线,把数据传输到总线上 delay(1); /延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分 if(DQ) /控制器进行采样 dat |= 0 x80; /若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 delay(10); /此延时不能少,确保读时序的长度60us。 return (dat); void Write_One_Byte(uchar dat) uchar i = 0; for(i=8;i0;i-) DQ = 0; /拉低总线 _nop_(); /至少维持了1us,表示写时序(包括写0时序或写1时序)开始 DQ = dat&0 x01; /从字节的最低位开始传输 /指令dat的最低位赋予给总线,必须在拉低总线后的15us内, /因为15us后DS18B20会对总线采样。 delay(10); /必须让写时序持续至少60us DQ = 1; /写完后,必须释放总线, dat = 1; delay(1); uint Get_Tmp() /获取温度get the temperature float tt; uchar a,b; Init_Ds18b20(); /初始化 Write_One_Byte(0 xcc); /忽略ROM指令 Write_One_Byte(0 x44); /温度转换指令 Init_Ds18b20(); /初始化 Write_One_Byte(0 xcc); /忽略ROM指令 Write_One_Byte(0 xbe); /读暂存器指令 a = Read_One_Byte(); /读取到的第一个字节为温度LSB b = Read_One_Byte(); /读取到的第一个字节为温度MSB temp = b; /先把高八位有效数据赋于temp temp 0;i-) DQ = 0; /将总线拉低,要在1us之后释放总线 /单片机要在此下降沿后的15us内读数据才会有效。 _nop_(); /至少维持了1us,表示读时序开始 dat = 1; /让从总线上读到的位数据,依次从高位移动到低位。 DQ = 1; /释放总线,此后DS18B20会控制总线,把数据传输到总线上 delay(1); /延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分 if(DQ) /控制器进行采样 dat |= 0 x80; /若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 delay(10); /此延时不能少,确保读时序的长度60us。 return (dat); void Write_One_Byte(uchar dat) uchar i = 0; for(i=8;i0;i-) DQ = 0; /拉低总线 _nop_(); /至少维持了1us,表示写时序(包括写0时序或写1时序)开始 DQ = dat&0 x01; /从字节的最低位开始传输 /指令dat的最低位赋予给总线,必须在拉低总线后的15us内, /因为15us后DS18B20会对总线采样。 delay(10); /必须让写时序持续至少60us DQ = 1; /写完后,必须释放总线, dat = 1; delay(1); uint Get_Tmp() /获取温度get the temperature float tt; uchar a,b; Init_Ds18b20(); /初始化 Write_One_Byte(0 xcc); /忽略ROM指令 Write_One_Byte(0 x44); /温度转换指令 Init_Ds18b20(); /初始化 Write_One_Byte(0 xcc); /忽略ROM指令 Write_One_Byte(0 xbe); /读暂存器指令 a = Read_One_Byte(); /读取到的第一个字节为温度LSB b = Read_One_Byte(); /读取到的第一个字节为温度MSB temp = b; /先把高八位有效数据赋于temp temp = 8; /把以上8位数据从temp低八位移到高八位 temp = temp|a; /两字节合成一个整型变量 tt = temp*0.0625*10+0.5; /得到真实十进制温度值 /因为DS18B20可以精确到0.0625度 /所以读回数据的最低位代表的是0.0625度 temp = tt; /放大十倍 /这样做的目的将小数点后第一位也转换为可显示数字 /同时进行一个四舍五入操作。 return temp; /*主程序*/ void main() while(1) Display(Get_Tmp(); /*数码码动态显示函数*/ void Display(uint temp) /显示程序 uchar A1,A2,A3,A4; A1 = temp/1000; /百位 A2 = (temp/100)%10; /十位 A3 = (temp%100)/10; /个位 A4 = temp%10; /个位 P3=0 xf0; P2 = tableA1; /显示百位 xiao=0;delay1(10); P3=0 xf0; P2=tableA2; /显示十位 ge=0;delay1(10); P3=0 xf0; P2= table1A3; /显示个位 shi=0; delay1(10); P3=0 xf0; P2 = tableA4; /显示小位 bai=0; delay1(10);
展开阅读全文