《学位论文-—基于18b20的温度测量仪课程设计报告.doc》由会员分享,可在线阅读,更多相关《学位论文-—基于18b20的温度测量仪课程设计报告.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于18B20的温度测量仪 目 录第一章 单片机原理及应用技术课程设计的目的意义21.1 设计目的21.2 课程在教学计划中的地位和作用2第二章 基于18B20的温度测量仪设计任务22.1 设计内容及要求22.2 课程设计的要求2 2.2.1 控制要求2 2.2.2 设计要求2第三章 系统的硬件设计与选型3 3.1 总体设计思想与选型33.2 硬件设计方案33.3 硬件设计系统原理图33.4 选型芯片及其各自功能说明5 3.4.1 89C51的引脚与功能简介5 3.4.2 DS18B20的引脚与功能简介8 3.4.3 74LS138的引脚与功能简介13 3.4.4 74LC573的引脚与功能简
2、介153.4.5 数码管简介15第四章 软件设计174.1 源程序说明17第五章 系统调试及使用说明205.1 系统使用说明205.2 系统调试25收获、体会26附录 系统源程序及实物图27第一章 单片机原理与技术应用课程设计的目的意义1.1 课程设计目的单片机原理及技术应用主要内容包括MCS-51单片机的内部结构、指令系统、汇编语言和C语言程序设计、并行接口和并行设备的扩展、中断系统结构与应用、定时器计数器原理与应用、串行接口与串行通信、模拟量接口以及单片机应用系统设计技术。 本课程设计目的在于培养学生综合运用理论知识来分析和解决实际问题的能力,是通过设计单片机检测系统,加深学生对单片机技术
3、的了解,进一步掌握其程序设计与硬件接口技术。 本课程的主要任务是运用所学单片机技术、单片机原理等方面的知识,设计出一台以89C51MCU为核心的单片机数据采集、通讯或测控系统,完成信息的采集、处理、输出及人机接口电路等部分的软、硬件设计。1.2 课程设计在教学计划中的地位和作用本课程是生物医学工程的一门主要专业课之一。以MCS-51系列的8位单片机为教学对象,介绍单片机的发展概况、原理及应用。 主要内容:单片机的基本概念,MCS-51系列单片机的结构,MCS-51系列单片机指令系统,程序设计基础,中断系统,MCS-51系列单片机内部定时器/计数器及其应用,串行接口,单片机应用系统扩展设计基础,
4、模拟量输入输出接口技术,人机接口技术,功率接口技术,单片机应用系统设计技术,单片机应用系统举例,新型单片机介绍等。 学生获得的知识和能力:单片机的基本结构和原理、指令系统、汇编语言程序设计、C51开发技术,简单的单片机应用系统的设计等。 单片机原理及应用课程设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和
5、提高。使学生增进对单片机的感性认识,加深对单片机理论方面的理解,为以后设计和实现单片机应用系统打下良好基础。第二章 基于18B20的温度测量仪设计任务2.1 设计内容 基于18B20的温度测量仪是以温度传感器DS18B20为关键的测温系统,测得的温度由三位数码管显示,精确到一度。2.2 课程设计要求掌握18B20温度传感器原理;三位数码管显示温度值。2.2.1 控制要求 设计技术参数,温度测量精确到一度。2.2.2 设计要求设计出硬件电路,说明工作原理,编写程序,调试、得到要求现象。第三章 系统硬件设计与选型3.1 总体设计思想与选型本次课程设计会用到的主要器件是51单片机和DS18B20温度
6、传感器以及数码管,主要就是通过温度传感器的检测,把实际测得的温度值转换成二进制,再传回单片机处理,然后通过数码管显示出温度值。其次是74LS138和74LCX573芯片,用来控制数码管显示。3.2硬件设计方案系统的硬件部分主要包括:电源、晶振、复位、单片机、数码管、DS18B20、74LS138和74LCX573。3.3 硬件设计系统原理图 硬件电路原理图反映了所用到的芯片的连接情况, 也可以清楚看到各硬件是如何连接的,具体请看图3.4 选型芯片及其各自功能说明3.4.1 芯片列表 依照设计思路,本次设计使用了如下芯片:1. 微处理器89C512. 温度传感器 DS18B203. 译码器 74
7、LS1384. 集成芯片74LC5733.4.2 89C51的引脚与功能简介MCS-51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,它包含51和52两个子系列。单片机由于体积小、功耗低、易于产品化,面向控制,抗干扰能力强,适用温度范围宽,可以方便地实现和分布式控制等优点,因而被广泛地应用于各种控制系统和分布式系统中。89C51和MCS-51是完全兼容的,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器。 其主要特点如下: 8位CPU
8、。 工作频率最高为24M。 128B数据存储器。 4KB程序存储器。 程序存储器的寻址空间为64KB。 片外数据存储器的寻址空间为64KB。 128个用户位寻址空间。 21个字节特殊功能寄存器。 4个8位的并行I/O接口:P0、P1、P2、P3。 两个16位定时/计数器。 两个优先级别的5个中断源。 1个全双工的串行I/O接口,可多机通信。 111条指令,喊乘法指令和除法指令。 较强的位处理能力 。 采用单一+5V电源。对于89C52而言,不同之处在于:有256B的数据存储器、8K的程序存储器、全双工串行I/O接口、6个中断源、3个16位定时/计数器,工作频率可升直33Mhz。比51拥有更高的
9、性能。图1-1是51单片机的接口硬件分布图我们此次采用的是AM-51H学习板(如图1-2),板载的芯片是89C52芯片,拥有丰富功能模块及外接电路,如图的标注。I. 89C51单片机两种封装形式:(1) 双列直插(PDIP): 40引脚。 (2) 方形(PLCC)封装形式: 44引脚,有4条引脚是空脚(标为NC)。图3-2(a)为引脚排列图。图3-2(b)为逻辑符号图。 II. 89C51引脚功能:1. 电源引脚Vcc和Vss(1) Vcc :电源端,接+5V电源。(2) Vss :接地端。2. 外接晶体引脚XTALl和XTAL2(1) XTAL1:片内振荡电路的输入端; (2) XTAL2:
10、片内振荡电路的输出端。3. 控制信号引脚 (1) RST / VPD:RST是复位信号输入端,高电平有效。出现两个机器周期以上的高电平时复位;图3-4 89C51单片机引脚排列及逻辑符号图 RST引脚的第二功能:备用电源VPD的输入端; 当主电源VCC发生故障,降低到规定值时,此引脚可接备用供电,由VPD向内部RAM提供备用供电,以保持片内RAM中的数据。 (2) ALE/PROG:地址锁存允许信号 访问外部存储器时,ALE信号的输出用于锁存低8位地址的控制信号。 信号频率为振荡器的1/6; ALE端可以驱动8个TTL负载; 对Flash存储器编程时,用于输入编程脉冲信号。(3) /PSEN:
11、片外程序存储器读选通信号 低电平有效,可驱动8个TTL负载。(4) /EA(VPP):片内、外程序存储器选择端 编程电压输入端; 当/EA端为高电平时,先访问片内EPROM; 当/EA端接地时,只访问片外EPROM; 在Flash存储器编程时,提供编程电压。 4. I / O引脚(1) P0口(P0.0P0.7): 第一功能:通用I/O口,用来输入/输出数据 第二功能:当CPU访问片外存储器时,分时提供低8位地址和高8位数据的复用总线。(2) P2口(P2.0P2.7): 第一功能:不扩展片外存储器时,作为通用I/O口。 第二功能:扩展片外存储器时,输出片外存储器的高8位地址。(3) P1口(
12、P1.0P1.7): 第一功能:通用I/O口。 第二功能:片内ROM编程或校验时,输入片内ROM的低8位地址。(4) P3口(P3.0P3.7): 第一功能:通用的I/O口。 第二功能:控制功能。III. 89C51的外部总线外部总线结构图如图3-5所示。图3-5 外部总线结构图(1) 地址总线(AB)。16位,寻址范围64KB。高8位(A15A8)由P2口输出,低8位(A7 A0)由P0口输出。(2) 数据总线(DB)。8位,由P0口提供。(3) 控制总线(CB)。由4条控制线和P3口的第二功能状态组成。 IV. 89C51的内部结构89C51单片机在一块芯片中集成了CPU、RAM、 ROM
13、、定时器/计数器和I/O口等基本功能部件。各功能部件由内部总线连接在一起。89C51基本结构见图3-6所示。图3-6 89C51单片机基本结构图CPU是单片机的核心部件,由运算器和控制器等部件组成。运算器的功能主要是进行算术运算和逻辑运算。由8位ALU单元,两个8位的暂存器,8位的累加器ACC、B寄存器,程序状态寄存器PSW等组成。控制器用于控制单片机各部分的运行,由程序计数器PC,指令寄存器、译码器及定时控制逻辑和数据指针DPTR组成。3.4.3 DS18B20温度传感器简介DS18B20是DALLAS公司生产的单总线数字温度传感器芯片,具有3引脚TO-92小体积封装形式;温度测量范围为-5
14、5+125,可编程为9-12为A/D转换精度,测量分辨率可达0.0625,被测温度用16位补码方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少。可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。(一)DS18B20的主要特性如下:1、 适应电压范围宽:3.0V-5.5V,在寄生电源方式可有数据线共电。2、 在使用中不需要任何外围元件。3、 独特的单线接口方式:DS18B20与微处理器连接时仅需要一条信号线既可实现微处理器与DS18B20
15、的双向通信。4、 温度范围:-55+125,在-10-+85时精度为0.5。5、 编程可实现分辨率为9-12位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。6、 在9位分辨率时最多在93.75ms内把温度值转换为数字,12位分辨率时最多在750ms内把温度值转换为数字。7、 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。8、 用户可自设定非易失性的报警上下限值。9、 负压特性:电源极性接反时,温度计不会因发热而烧坏,但不能正常工作。(二)DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警
16、触发器TH和TL、配置寄存器。该装置信号线高的时候,内部电容器储存能量通由1线通信线路给片子供电,而且在低电平期间为片子供电直至下一个高电平的到来重新充电。 DS18B20的电源也可以从外部3V-5 .5V的电压得到。DS18B20的外部机构图和内部结构图(如图1-3、1-4)图1-4 DS1820内部结构 图1-3 TQ-92封装及8脚SOIC封装(三)DS18B20温度值格式默认的12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测
17、到的数值需要取反加1再乘于0.0625即可得到实际温度。 图1-5 DS18B20温度值格式表(四)DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。主要首先提供以下功能命令之一: 1 )读ROM, 2 )ROM匹配, 3 )搜索ROM, 4 )跳过ROM, 5 )报警检查。这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。
18、测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM 的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。DS18B20有4个主要的数据部件:(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20
19、自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(2) DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,温度报警触发器TH和TL,配置寄存器。存储器DS18B20的存储器包括高速暂存器RAM和可电擦除RAM,可电擦除RAM又包括温度触发器TH和TL,以及一个配置寄存器。存储器能完
20、整的确定一线端口的通讯,数字开始用写寄存器的命令写进寄存器,接着也可以用读寄存器的命令来确认这些数字。当确认以后就可以用复制寄存器的命令来将这些数字转移到可电擦除RAM中。当修改过寄存器中的数时,这个过程能确保数字的完整性。高速暂存器RAM是由8个字节的存储器组成;第一和第二个字节是温度的显示位。第三和第四个字节是复制TH和TL,同时第三和第四个字节的数字可以更新;第五个字节是复制配置寄存器,同时第五个字节的数字可以更新;六、七、八三个字节是计算机自身使用。用读寄存器的命令能读出第九个字节,这个字节是对前面的八个字节进行校验。存储器的结构图如图4.6所示。64位光刻ROM的前8位是DS18B2
21、0的自身代码,接下来的48位为连续的数字代码,最后的8位是对前56位的CRC校验。64-位的光刻ROM又包括5个ROM的功能命令:读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。64-位光刻ROM的结构图如图4.7所示。 DS18B20外部电源的连接方式DS18B20可以使用外部电源VDD,也可以使用内部的寄生电源。当VDD端口接3.0V5.5V的电压时是使用外部电源;当VDD端口接地时使用了内部的寄生电源。无论是内部寄生电源还是外部供电,I/O口线要接5K左右的上拉电阻。连接图如图4.8、图4.9所示。配置寄存器配置寄存器是配置不同的位数来确定温度和数字的转化。R1,R0是温度的决定
22、位,由R1,R0的不同组合可以配置为9位,10位,11位,12位的温度显示。这样就可以知道不同的温度转化位所对应的转化时间,四种配置的分辨率分别为0.5,0.25,0.125和0.0625,出厂时以配置为12位。4.3.4.2 温度的读取DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。16位数字摆放是从低位到高位DS18B20常用ROM、RAM指令(如表1、表2)指 令 约定代码功 能读ROM33H读DS1
23、820温度传感器ROM中的编码(即64位地址) 符合 ROM 55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 搜索 ROM 0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 跳过 ROM 0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 告警搜索命令 0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。 表1 ROM指令表指 令 约定代码功 能温度变换44H启动DS1820进
24、行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 读暂存器 0BEH 读内部RAM中9字节的内容 写暂存器 4EH 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 复制暂存器 48H 将RAM中第3 、4字节的内容复制到EEPROM中。 重调 EEPROM 0B8H 将EEPROM中内容恢复到RAM中的第3 、4字节。 读供电方式 0B4H 读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。 表2 RAM指令表(四)DS18B20操作时序DS18B20
25、的时序有着严格的要求,每个操作之间的电平时间必须按照资料上面的进行,不然就不能对温度传感器正确的操作,一般有芯片初始化操作、读操作和写操作。DS18B20控制方法指令约定代码操作说明温度转换 44H 启动DS18B20进行温度转换读暂存器 BEH 读暂存器9个字节内容写暂存器 4EH 将数据写入暂存器的TH、TL字节复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU1.DS18B20的初始化(1) 先将数据线置高电平“1”。(2)
26、延时(该时间要求的不是很严格,但是尽可能的短一点)(3) 数据线拉到低电平“0”。(4) 延时750微秒(该时间的时间范围可以从480到960微秒)。(5) 数据线拉到高电平“1”。(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。(8) 将数据线再次拉高到高电平“1”后结束。2. DS18B20的写操作(1)
27、数据线先置低电平“0”。(2) 延时确定的时间为15微秒。(3) 按从低位到高位的顺序发送字节(一次只发送一位)。(4) 延时时间为45微秒。(5) 将数据线拉到高电平。(6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。(7) 最后将数据线拉高。3. DS18B20的读操作(1)将数据线拉高“1”。(2)延时2微秒。(3)将数据线拉低“0”。(4)延时15微秒。(5)将数据线拉高“1”。(6)延时15微秒。(7)读数据线的状态得到1个状态位,并进行数据处理。(8)延时30微秒。3.4.3 74LS138的引脚与功能简介74ls138引脚图 74HC138管脚图:74LS138 为
28、3 线8 线译码器,共有 54/74S138和 54/74LS138 两种线路结构型式,其工作原理如下: 当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。 利用 G1、/(G2A)和/(G2B)可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。 若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器用与非门组成的3线-8线译码器74LS1383线-8线译码器74LS138的功能表无论从逻辑图还是功能表我们都可以看到74LS138的八个输出引脚,任何时刻
29、要么全为高电平1芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。如果出现两个输出引脚同时为0的情况,说明该芯片已经损坏。当附加控制门的输出为高电平(S1)时,可由逻辑图写出由上式可以看出,同时又是这三个变量的全部最小项的译码输出,所以也把这种译码器叫做最小项译码器。71LS138有三个附加的控制端、和。当、时,输出为高电平(S1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如表3.3.5所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。带控制输入端的译码器又是一个完整的数据分配器。在图3.3.8电路中
30、如果把作为“数据”输入端(同时),而将作为“地址”输入端,那么从送来的数据只能通过所指定的一根输出线送出去。这就不难理解为什么把叫做地址输入了。例如当101时,门的输入端除了接至输出端的一个以外全是高电平,因此的数据以反码的形式从输出,而不会被送到其他任何一个输出端上。 3.4.4 74HC573的引脚与功能简介74HC573包含八进制3态非反转透明锁存器,是一种高性能硅门CMOS器件。74HC573跟LS/AL573的管脚一样。器件的输入是和标准CMOS输出兼容的,加上拉电阻他们能和LS/ALSTTL输出兼容。锁存器输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL
31、 输出兼容。当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。三态总线驱动输出置数全并行存取缓冲控制输入使能输入有改善抗扰度的滞后作用原理说明:74HC573的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器
32、和工作寄存器。3.4.5 数码管简介此系统采用的是共阴极性的LED数码管,高电平点亮。如图1-6 图1-6 数码管极性及端口分布 不过,我们此次是采用的四合一的数码管。如图1-7 图 四合一数码管图 数码管的硬件连接图第四章 软件设计4.1 源程序说明#include reg52.h#include intrins.h /_nop_();延时函数用#define Disdata P0 /段码输出口#define discan P2 /扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P13; /温度输入口uint h;
33、 uint temp;uchar code dis_712=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/共阴LED段码表 0 1 2 3 4 5 6 7 8 9 不亮 - uchar code scan_con4=0xfb,0xfa,0xf9,0xf8; /列扫描控制字uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一个运算暂用/*11us延时函数*/void del
34、ay(uint t) for (;t0;t-);/*显示扫描函数*/scan() char k; for(k=1;k0;i-) DQ=1;_nop_();_nop_(); /从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); /5 us DQ=val&0x01; /最低位移出 delay(6); /66 us val=val/2; /右移1位 DQ=1; delay(1);/*DS18B20读1字节函数*/从总线上取1个字节uchar read_byte(void)uchar i;uchar value=0;for(i=8;i0;i-) DQ=1;_nop_
35、();_nop_(); value=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); /4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); /4 us if(DQ)value|=0x80; delay(6); /66 usDQ=1;return(value);/*读出温度函数*/read_temp() ow_reset(); /总线复位 delay(200); write_byte(0xcc); /发命令 write_byte(0x44); /发转换命令 ow_reset(); delay(1); write_byte(0xcc
36、); /发命令 write_byte(0xbe); temp_data0=read_byte(); /读温度值的低字节 temp_data1=read_byte(); /读温度值的高字节 temp=temp_data1; temp6348) / 温度值正负判断 tem=65536-tem;n=1; / 负温度求补码,标志位置1 display4=tem4; / 取中间八位,即整数部分的值 display3=display4/100; / 取百位数据暂存 display1=display4%100; / 取后两位数据暂存 display2=display1/10; / 取十位数据暂存 displ
37、ay1=display1%10; /*符号位显示判断*/ if(!display3) display3=0x0a; /最高位为0时不显示 if(!display2) display2=0x0a; /次高位为0时不显示 if(n)display3=0x0b; /负温度时最高位显示-/*主函数*/void main() Disdata=0xff; /初始化端口 discan=0xff; for(h=0;h4;h+) /开机显示0000 displayh=0; ow_reset(); /复位 write_byte(0xcc); /Skip ROM write_byte(0x44); /发转换命令 for(h=0;h100;h+) /开机显示0000 scan(); while(1)