(毕业论文)数字温度计设计与制作.doc
毕业论文封面 学号 姓名 班级 指导教师 论文题目 数字温度计设计与制作 数字温度计设计与制作摘 要本次设计主要介绍一种基于单片机控制的数字温度计,在硬件方面介绍单片机温度控制系统的设计,对硬件原理图做简洁的描述。系统程序主要包括程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序。软硬件分别调试完成后,将程序下载入单片机中,电路板接上电源,电源指示灯亮,按下开关按钮,数码管显示当前温度。由于采用了智能温度传感器DS18B20,所以这次设计所介绍的数字温度计与传统的温度计相比的转换速率极快,进行读、写操作非常简便。它具有数字化输出。系统具有微型化、微功耗、测量密度高、功能强大等特点,加上DS18B20内部的差错检验,所以它的抗干扰能力强,性能可靠,结构简单。本次设计产生的结果是能正常显示温度。充分印证了设计的可靠性、可行性。关键词:单片机控制 DS18B20 数码管目 录第一章 单片机的概述- 1 -1.1选题背景- 1 -1.2单片机的简介- 1 -1.3 温度计的运用- 1 -第二章 测温仪设计方案- 2 -2.1经过D/A转换后直接显示- 2 -2.2基于单片机和DS18B20的温度测量仪- 2 -2.3基于FPGA和热敏电阻pt100的温度测温仪- 3 -第三章 方案的分析与比较- 4 -3.1温度传感器的比较- 4 -3.2控制器的比较- 4 -第四章 方案的实现- 4 -4.1方案实现的原理- 4 -4.1.1单片机系统- 5 -4.1.2 DS18B20工作原理- 7 -4.1.3数码管工作原理- 14 -4.2方案电路原理图- 16 -4.3仿真验证- 18 -心得体会- 21 -致谢- 22 -参考文献- 27 -第一章 单片机的概述1.1选题背景随着人们生活水平的不断提高,数字化控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示。1.2单片机的简介单片机,更确切的应称作微控制器,是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强大、体积小、可靠性高、价格低廉。它应用的领域非常广泛包括:工业控制、数据采集、智能化仪表、机电一体化、家用电器等;极大地提高了这些领域的技术水平和自动化程度。因此单片机的开发、应用已成为高科技和工程领域的一项重大课题。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它给人带来的方便也是无可质疑的,其中数字温度计就是一个典型的例子。随着人类对它的要求越来越高,要为现代人的工作和生活提供更好、更方便的设施就需要从数字单片机技术入手,一切向着数字化控制、智能化控制方向发展。1.3 温度计的运用温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、粮食储存、酒类生产、医学等领域内,温度常常是表征对象和过程状态的最重要的参数之一。随着时代的进步和发展,单片机技术已经深入到各个领域,基于单片机数字温度计与传统的温度计相比,具有读数方便,测温范围广,其输出温度采用数字显示。温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学实验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有着特别重要的意义。目前温度计的发展也相当的迅猛,从原始的玻璃管温度计发展到了现在热电阻温度计、热电偶温度计、数字温度计、电子温度计等。现在所使用的温度计通常是精度为1和0.1的水银、煤油或酒精温度计,这些温度计的刻度间隔通常都很密,不容易准确分辨,读数很难,而且它们的热容量还比较大,达到热平衡所需要时间长,因此很难读准,并且使用非常不方便。这次设计所介绍的数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温准确等优点,其输出温度采用数字显示,主要供测温要求准确的场所和科研实验室使用。第二章 测温仪设计方案2.1经过D/A转换后直接显示方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件,利用其感温效应,将被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路。如图2-1所示。 显示器D/A传感器 图2-1 电路方框原理图2.2基于单片机和DS18B20的温度测量仪LED显示器显示正确的温度值,LED显示器实现显示功能。方案二与方案一大致相同,但是温度信号输入部分采用温度检测芯片DS18B20,这个芯片无需A/D转换,可直接将测得的温度值以2进制形式输出。单片机主要控能,其原理图如图2-2所示。 图2-2 电路方框原理图DS18B20芯片是单片结构,无需外加A/D即可输出数字量,通讯采用单线制,同时该通讯线还可兼做电源线,即具有寄生电源模式,它体积小、精度高,无需标定。适用于单片机合用构成智能温度检测及控制系统。2.3基于FPGA和热敏电阻pt100的温度测温仪方案三:该方案主要由输入输出、智能控制、显示、报警、通信5大模块组成。输入输出模块主要是根据温度传感器(采用热敏电阻Pt100)获得的电压信号,然后进行A/D转换,所得信号作为FPGA的输入;智能控制模块主要是根据设定值对被控对象进行控制,由FPGA来实现;显示模块是通过LCD显示屏显示出被测温度;报警模块,当温度达到报警条件时蜂鸣器产生蜂鸣,同时采用不同的LED灯显示高报状态或者低报状态;通信模块,采用串口方式与上位机监控程序进行实时通信(RS232),采用LABVIEW软件进行编程实现上位机的监控。其电路原理方框图如图2-3所示。图2-3 电路原理方框图第三章 方案的分析与比较3.1温度传感器的比较 三种方案进行比较,方案一中热敏电阻的性能决定了整个设计产品所能检测的温度范围。方案二的温度检测范围取决于DS18B20芯片,其范围较小,但足够满足般测量需要,大约为-50到150。由于方案二更为简洁,有效的利用了智能芯片DS18B20可以直接读出被测温度值,进行转换,就可以满足设计要求。方案三中,由于采用热敏电阻作为温度传感器,中间会经过一些滤波、信号放大、A/D转换等环节,造成系统的抗干扰能力不理想,温线性度的非误差较大。因而最终采用方案二来完成本次设计。3.2控制器的比较方案二、三都采用了单片机作为控制,作为一种新型的微处理器,可以通过智能编程方式,可以进行扩展,而且能够具有超温报警和自动控制功能。而方案一没有采用控制,直接把温度显示出来,这样就只能完成对温度的显示。所以,此方案不可取。第四章 方案的实现4.1方案实现的原理按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路、显示电路。原理图如图4-1所示。图4-1 单片机最小系统4.1.1单片机系统实现方案中采用STC89C52单片机作为系统的微处理器,完成对温度传感器、数码管显示处理。1芯片引脚介绍STC89C52芯片引脚图如图4-2所示。图4-2STC89C52芯片引脚图 2几个典型管脚电路说明关于/EA(/EA管脚已内部上拉到VCC) 如果外部不加上拉,或外部上拉到VCC,上电复位后单片机从内部开始执行程序; 如果外部下拉到地,上电复位后单片机从外部开始执行程序。关于RST:复位电路图如图5所示。阻容复位时,电容为10uF,电阻为10K。STC的RC/RD+系列单片机RESET引脚内部没有上拉电阻,必须使用10K电阻。其复位电路图如图4-3所示。RST图4-3 复位电路图关于晶振电路推荐采用11.0592MHz-22.1184MHz的晶振;为了方便起振,最好不在XTAL1晶振引脚上接入并联电容,XTAL2引脚上的电容可接入4733pF(<24MHZ)。晶振电路如图4-4所示。图4-4 晶振电路图² 单片机在线编程电路,如图4-5所示。图4-5 通过RS232转换芯片实现单片机的在线编程4.1.2 DS18B20工作原理1DS18B20特性简介DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 2DS18B20结构简介该芯片采用3脚PR35封装或8脚SOIC封装,外部结构如图4-6所示。图4-6 DS18B20的外部结构DS18B20内部主要包括寄生电源、温度传感器、64 位激光ROM 单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH 和TL 解发器存储与控制逻辑、8 位循环冗余校验码(CRC)发生器等七部分,内部结构如图4-7所示。图4-7 DS18B20内部结构寄生电源由二极管VD1、VD2 和寄生电容C 组成,电源检测电路用于判定供电方式,寄生电源供电时,VDD 端接地,器件从单线总线上获取电源,在DQ 线呈低电平时,改由C上的电压Vc继续向器件供电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常电源时也能读ROM。若采用外部电源VDD,则通过VD2 向器件供电。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,如图10所示。开始8位(28H)是产品类型标号,接着的48位是DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。主机操作ROM 的命令有五种,如表4-1所示。图4-8 64位ROM的结构表4-1 DS18B20的ROM命令指令说明读ROM(33H)读DS1820的序列号匹配ROM(55H)继读完64位序列号的一个命令,用于多个DS1820时定位跳过ROM(CCH)此命令执行后的存储器操作将针对在线的所有DS1820搜ROM(F0H)识别总线上各器件的编码,为操作各器件作好准备报警搜索(ECH)仅温度越限的器件对此命令作出响应 DS18B20 测量温度时使用特有的温度测量技术。其内部的低温度系数振荡器能产生稳定的频率信号f0,高温度系数振荡器则将被测温度转换成频率信号f。当计数门打开时,DS18B20 对f0 计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以被偿。测量结果存入温度寄存器中。一般情况下的温度值应为9 位(符号点1位),但因符号位扩展成高8 位,故以16 位被码形式读出,表4-2给出了温度和数字量的关系。表4-2 DS1820 温度数字对应关系表 传感器温度信息的低位、高位字节内同形式如图4-9所示。图4-9 温度信息的低位、高位字节内容形式DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低8位,第二个字节是温度的高8位,第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新,第六、七、八个字节用于内部计算,第九个字节是冗余检验字节,如表4-3所示。该字节各位的意义为TM R1 R0 1 1 1 1 1 ,低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0,用户不用改动,R1和R0用来设置分辨率,DS18B20出厂时被设置为12位,分辨率设置如表4-4所示。 表4-3 DS18B20暂存器分布寄存器内容字节地址温度最低数字位0温度最高数字位1高温限制2低温限制3保留4保留5计数剩余值6每度计数值7CRC校验8表4-4 分辨率设置表R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms表4-5 DS18B20暂存器的命令指令说明温度转换(44H)启动在线DS1820做温度A/D转换读数据(BEH)从高速暂存器读9bits温度值和CRC值写数据(4EH)将数据写入高速暂存器的第2和第3字节中指令说明复制(48H)将高速暂存器中第2和第3字节复制到EERAM读EERAM(B8H)将EERAM内容写入高速暂存器中第2和第3字节读电源供电方式(B4H)了解DS1820的供电方式根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。ROM命令和暂存器的命令如表4-3和表4-5。3DS18B20电路连接DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4-10所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。图4-10 DS18B20与单片机的接口电路当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。4读写时序由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。复位要求主CPU将数据线下拉500 us,然后释放,DSl8B20收到信号后等待1660us左右,后发出60240us的存在低脉冲,主CPU收到此信号表示复位成功。由于DSl8820采用的是单线进行控制与读取数据,因此对操作的时序要求非常严格,否则由于时序不匹配,将无法完成对器件的正确操作。如图4-11、图4-12所示。图4-11 DS18B20初始化时序图图4-12 DS18B20读/写时序图4.1.3数码管工作原理图4-13 MCU与4连排8段数码管的连接LED显示器是单片机应用系统中常见的输出器件,而在单片机的应用上也是被广泛运用的。如果需要显示的内容只有数码和某些字母,使用LED数码管是一种较好的选择。LED数码管显示清晰、成本低廉、配置灵活,与单片机接口简单易行。LED数码管作为显示字段的数码型显示器件,它是由若干个发光二极管组成的。当发光二极管导通时,相应的一个点或一个笔画发亮,控制不同组合的二极管导通,就能显示出各种字符,常用的LED数码管有7段和“米”字段之分。这种显示器有共阳极和共阴极两种。共阴极LED显示器的发光二极管的阴极连在一起,通常此共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极接在一起,通常此共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。本次设计所用的LED数码管显示器为共阳极。共阳数码管管脚连接方法如图4-13所示。LED数码管的使用与发光二极管相同,根据材料不同正向压降一般为1.52V,额定电流为10MA,最大电流为40MA。静态显示时取10MA为宜,动态扫描显示可加大脉冲电流,但一般不超过40MA。数码典型电路连接如图4-14所示。图4-14 数码管典型电路连接共阳数码管码表如表4-6所示。 表4-6 数码管显示表0xC00xF90xA40xB00x990x920123450x820xF80x7f0x980x880x806789AB0xC60xC00x860x8E0xFFCDDEF无显示1静态显示方式LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。动态显示 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。4.2方案电路原理图整体方案电路原理图如图4-15所示。图4-15 测温系统原理图整个电路分为四个部分组成:单片机本身的复位电路与晶振电路、单片机与数码管显示器的连接电路、单片机与温度传感器DB18B20的连接电路。1 单片机复位电路与时钟连接电路图4-16 单片机复位电路单片机复位电路如图4-16所示。复位电路可以实现上电自动复位和手动复位两种复位功能。在单片机复位引脚RST通过一个下拉电阻接地,再在引脚RST与VCC之间接入10uF电解电容,达到上电自动复位,同时在电容两端并连接入一个按键开关SW-PB,达到手动复位的功能。晶振电路通过在XTAL1与XTAL2两个引脚之间接入一个11.095MHz的晶振,同时在晶振两端接上30uF电容C2、C3,从而对晶体和振荡电路的补偿和匹配,使电路易于启振并处于合理的激励态下,同时对振荡频率也有一定的“微调”作用。2 DS18B20、显示器与单片机连接电路图4-17 DS18B20与单片机连接电路DS18B20与单片机连接电路如图4-17所示。DSl8B20与单片机相连:DSl8820的l引脚接地,3引脚接VCC,采用外部供电方式;2引脚接至单片机的P3.7引脚; DS18B20只用一根信号线传输数据,而且数据传输是双向的,连接方便,便于扩展,由于采用CMOS技术,该芯片的耗电量很小。图4-18 数码管与单片机连接电路图数码管与单片机连接电路如图4-18所示。数码管的段码a、b、c、d、e、f、g、dp分别与单片机的P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 相连,在P0端口有个上拉电阻,数码管的位码1234分别与PNP三极管和电阻相连接到单片机的P1的前四个端口。4.3仿真验证软件部分可以分为三大部分:DS18B20读取温度程序、数码管显示程序及主程序(包括温度值的转换等模块)。程序流程图如图4-20所示。通过KEIL软件进行编译生成.hex文件,用于后面硬件电路PROTUES仿真。 图4-20 测温系统程序流程图按照测温系统原理图,在PROTUES中绘制出相应的电路图。改变温度传感器DS18B20的温度值,进行PROTUES仿真,仿真结果如图4-21、图4-22所示。图4-21 温度值仿真结果图4-22 温度值仿真结果按照测温系统原理图,利用单片机测得的实际温度,实物图如图4-23所示。图4-23 实物图心得体会经过为期一个多月的毕业设计,使我深深的体会到“纸上得来终觉浅,绝知此事要躬行”的意义。理论与实践相结合是毕业设计能否取得成功的充分必要条件。首先,购置元件时要慎重选择,充分考虑到其材料、特性、型号、适用范围等方面。不要等实验出故障后在到处找原因,既浪费时间又耗费精力。而且购买材料之前要做好计划,必要元件多准备几份,避免来回购买带来的不便。其次,实验最关键是要有耐心,有时实验电路和程序并不能一次成功,所以要有良好的心理素质,有克服一切困难的勇气,勇于寻找问题的根源,一次次反复的实验,才能达到目的。这同时也是一个学习与进步的过程,可以帮助我们自主寻找问题的根源,自主学习寻找解决问题的办法,最终实实在在地学到知识,提高本领,掌握技能。最后,要做好一个课程设计,最最关键的还是要自己真正的掌握技术与理论知识,加上熟练的操作技术,和好的合作团队,才能事半功倍。所以我们要积极主动地学习,并请教有关专业人士,以提高自己的能力。做毕业设计设计时我们两个人虽然投入很多时间和精力,但在动手操作的过程中我们提高了很多方面的能力,像动手操作、程序改错、故障查找等,几乎将我们大学所学全部像过筛子一样的过了一遍。及复习了以前的知识又在设计的同时开拓的自己的视野,真可谓一举多得。希望我们在以后的工作中能继续保持这种紧张的氛围,为自己的以后过得精彩而打算。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过毕业设计,我又一次领略到“艰苦奋斗”这一词的含义,让我们带着最真诚的心,走向我们的工作岗位走向明天,明天会更美好。致谢经过为期一个多月的毕业设计,使我深深的体会到“纸上得来终觉浅,绝知此事要躬行”的意义。理论与实践相结合是毕业设计能否取得成功的充分必要条件。在做温度计之前,我们从相关网站上收集了大量的有关基于单片机的温度计的资料,经过层层删减,最终决定其中一则方案。在实现这一方案过程中总是能够深刻的感觉到理论与实践的差异及互溶性。通过这次动手设计,不仅巩固了知识,而且让所学的知识通过实践的形式得以转化为相应的产品成果,让我们具有一定的成就感,也激发了我们对事物的兴趣。在设计过程中遇到了很多的困难,在我们这次毕业设计的团队中,我主要负责硬件部分,焊接过程中出现了很多问题,花了很多时间对所焊接的电路部分进行测试和检查。同时也遇到了很多我们解决不了的问题。也让我们看到了自身学习的不足之处。有很多知识不仅仅是课本上的,还需要我们课下总结,查阅资料!这次毕业设计,我收获了很多,不仅锻炼了独立解决困难的能力,也意识到团队合作的重要性!单片机技术的发展速度很迅速,但我们掌握的知识和能力都有一定的局限,还望各位老师见谅。不过我不会止步于这里。在以后的生活中,我会不断地学习,为自己充电,提高自己的技能,是自己能够立足于社会!最后,我非常感谢我的指导老师陈祥生老师,在他的悉心的指导于帮助下,我们才能使我们的设计更加完善。我一定不会辜负您的希望,在未来的日子里,我一定会加油努力!附录1、材料清单:材料清单列表元件名称元件型号单价(元)数量(个)总额(元)芯片AT89S51515插槽240-3345111排阻A102G0.110.1按键0.210.2晶振11.05920.510.5电容2200220.04电阻1K0.0280.16电阻10K0021002电阻4.7k0024008电解电容10K0.0230.06插针0.01若干0.5数码管5461BH313三极管85500.140.4DS18B20515总额16.062、程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P34;/ds18b20数据线uint tvalue;/温度值uchar tflag;/温度正负标志/uchar code temp="实时温度:"/实时温度uchar disp_num=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/显示数据列表0-9/功能:延时1毫秒/入口参数:x/出口参数:无/说明:晶振为12Mvoid Delay_xms(uint x) uint i,j; for(i=0;i<x;i+) for(j=0;j<112;j+);void Delay_xus(uint x)/延时1微秒 while(x-);/关闭数码管显示,当Q0Q3均为高电平时,三极管均截止,无电流流过数码管,显示被关闭void tube_off(void) P1=0xff;/数码管数据显示/入口参数:x为需要显示的数据,addr为数码管地址即第几位数码管void tube_disp(uchar addr,uchar x) if(addr=3) P0=disp_numx&0x7f;/将显示数据送P0口 else P0=disp_numx;/将显示数据送P0口 switch(addr) case 1: /选通第1位数码管 P1=0xfe; break; case 2: /选通第2位数码管 P1=0xfd; break; case 3: /选通第3位数码管 P1=0xfb; break; case 4: /选通第4位数码管 P1=0xf7; break; Delay_xms(2); tube_off();void ds1820rst()/*ds1820复位*/ DQ = 1; /DQ复位 Delay_xus(4); /延时 DQ = 0; /DQ拉低 Delay_xus(100); /精确延时大于480us DQ = 1; /拉高 Delay_xus(40); uchar ds1820rd()/*读数据*/ uchar i=0; uchar dat = 0; for(i=8;i>0;i-) DQ = 0; /给脉冲信号 dat>>=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; Delay_xus(10); return(dat);void ds1820wr(uchar wdata)/*写数据*/ uchar i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; Delay_xus(10); DQ = 1; wdata>>=1; read_temp()/*读取温度值并转换*/ uchar a,b; ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0x44);/*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0xbe);/*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1; tflag=1; tvalue=tvalue*(0.625);/温度值扩大10倍,精确到1位小数 return(tvalue);/void main() uchar temp; Delay_xms(50); read_temp(); Delay_xms(1000); while(1) read_temp(); /读取温度值 temp=tvalue/1000; tube_disp(1,temp); /显示百位温度值 temp=(tvalue%1000/100); tube_disp(2,temp); /显示十位温度值 temp=(tvalue%100/10); tube_disp(3,temp); /显示个位温度值 temp=(tvalue%10); tube_disp(4,temp); /显示小数位温度值 参考文献1 及力,孙小红,钱国梁. 电子CAD基于Protel 99 SE. 北京邮电大学出版社,2008.24652 周良权,傅恩赐,李世馨. 模拟电子技术基础. 高等教育出版社,2005.6.9133 卜锡滨,贾秀玲,曾献芳,周琳. 数字电子技术. 中国水利水电出版社,2011.1.17394 白炽贵,余明飞,罗永. 单片机C语言案例教程. 电子工业出版社,2011.1.134