数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc

上传人:laozhun 文档编号:2390704 上传时间:2023-02-17 格式:DOC 页数:25 大小:740.50KB
返回 下载 相关 举报
数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc_第1页
第1页 / 共25页
数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc_第2页
第2页 / 共25页
数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc_第3页
第3页 / 共25页
数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc_第4页
第4页 / 共25页
数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc》由会员分享,可在线阅读,更多相关《数字系统基础实验实验报告基于51单片机的智能数字温度计的设计.doc(25页珍藏版)》请在三一办公上搜索。

1、 编号:2011 -2012 学年第 2 学期实 验 报 告实验课程名称 数字系统基础实验 专 业 班 级 电信1002 学生姓名及学号 实验指导教师 实验项目名称 基于51单片机的智能数字温度计的设计 指导老师 肖铎 成绩 一、实验任务 设计89s51的数字温度计系统二、实验要求 1基本要求a) 能够测量的温度范围 -20100b) 精度=0.5c) 能对所测的温度进行数字显示d) 采用DS18B20智能温度传感器e) 基于51单片机设计 2选项a) 用LCD显示所测温度b) 预置温度并控制温度(3*4键盘,加热电阻)c) 所测温度通过RS232传到PC三、器件1 器件简介单片机89S51V

2、CC:电源电压输入端。 GND:电源地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 PDIP封装的AT89S51管脚图P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,

3、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门电

4、流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为普通I/O口,还有第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(T0定时器的外部计数输入) P3.5 T1(T1定时器的外部计数输入) P3.6 /WR(外部数据存储器的写选通) P3.7 /RD(外部数据存储器的读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 I/O口作为输入口时有两种工作方式,即所谓的读端口与读

5、引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都还有其他的功能。 RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1

6、/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程

7、序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:片内振荡器反相放大器和时钟发生器的输入端。 XTAL2:片内振荡器反相放大器的输出端。1602LCD功能介绍1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VDD接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0

8、时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端。 第714脚:D0D7为8位双向数据端。 第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。1602LCD的特性n+5V电压,对比度可调 n内含复位电路 n提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 n有80字节显示数据存储器DDRAM n内建有160个5X7点阵的字型的字符发生器CGROM n8个可由用户自定义的5X7的字符发生器CGRAM1602通过D0D7的8位数据端传输数据和指令。 显示模式设置: (初始

9、化) 0011 0000 0x38 设置162显示,57点阵,8位数据接口; 显示开关及光标设置: (初始化) 0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1), N=0(读或写一个字符后地址指针减1 &光标减1), S=1 且 N=1 (当写一个字符后,整屏显示左移) s=0 当写一个字符后,整屏显示不移动 数据指针设置: 数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H) 其他设置: 01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0

10、)DS18B20DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 1: 技术性能描述 、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 、测温范围 55+125,固有测

11、温分辨率0.5。 、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。 、工作电源: 35V/DC 、在使用中不需要任何外围元件 、 测量结果以912位数字量方式串行传送 、不锈钢保护管直径 6 、适用于DN1525, DN40DN250各种介质工业管道和狭小空间设备测温 、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选 、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。 接线说明特点 独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无

12、需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 C至+125 。华氏相当于是-67 F到257华氏度 -10 C至+85 C范围内精度为0.5 C 温度传感器可编程的分辨率为912位 温度转换为12位数字格式最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统 描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需

13、要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。 1、DS18B20的主要特性 1.1、适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数 据线供电 1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 1.3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 1.4、DS18B20在使用中不需要任何

14、外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内 1.5、温范围55+125,在-10+85时精度为0.5 1.6、可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温 1.7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 1.8、测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。 2、DS18B20的外形和内部结构

15、 DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。 DS18B20的外形及管脚排列如下图1: DS18B20引脚定义: (1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 图2: DS18B20内部结构图 3、DS18B20工作原理 DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用

16、于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图3:DS18B20测温原理框图 DS18B20有4个主要的

17、数据部件: (1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位 (28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用 是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 (2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以 0.0625/LSB形式表达,其中S为符号位。 表1: DS18B20温度值格式表 这是1

18、2位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为FC90H 。 表2: DS18B20温度数据表 (3)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存

19、放高温度和低温度触发器 TH、TL和结构寄存器。 (4)配置寄存器 该字节各位的意义如下: 表3:配置寄存器结构 TMR1R011111低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位) 表4:温度分辨率设置表 R1R0分辨率温度最大转换时间009位93.75ms 0110位187.5ms 1011位375ms 1112位750ms 4、高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所

20、得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算: 当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表 2是对应的一部分温度值。第九个字节是 冗余检验字节。 表5:DS18B20暂存寄存器分布 寄存器内容 字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个

21、步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 表6:ROM指令表 指 令 约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址) 符合 ROM 55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 搜

22、索 ROM 0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 跳过 ROM 0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 告警搜索命令 0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。 表6:RAM指令表 指 令 约定代码功 能温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 读暂存器 0BEH 读内部RAM中9字节的内容 写暂存器 4EH 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该

23、命令之后,是传送两字节的数据。 复制暂存器 48H 将RAM中第3 、4字节的内容复制到EEPROM中。 重调 EEPROM 0B8H 将EEPROM中内容恢复到RAM中的第3 、4字节。 读供电方式 0B4H 读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。 5、DS18B20的应用电路DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。下面就是DS18B20几个不同应用方式下的 测温电路图: 5.1、DS18B20寄生电源供电方式电路图如下面图4所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取

24、能量:在信号线DQ处于高电平期间把能量储存在内部 电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1)进行远距离测温时,无需本地电源 2)可以在没有常规电源的条件下读取ROM 3)电路更加简洁,仅用一根I/O口实现测温 要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由 于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的 能量,会造成无法转换温度或温度误差极大。 因此,图4电路只适应于单一

25、温度传感器测温情况下使用,不适宜采用电池供电系统中。并 且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。 图4图4 5.2、DS18B20寄生电源强上拉供电方式电路图改进的寄生电源供电方式如下面图5所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到 E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最 多10S内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺 点就是要多占用

26、一根I/O口线进行强上拉切换。 图5图5 注意:在图4和图5寄生电源供电方式中,DS18B20的VDD引脚必须接地 5.3、DS18B20的外部电源供电方式在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证 转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空 ,否则不能转换温度,读取的温度总是85。 图6:外部供电方式单点测温电路 图6. . . . . 图7:外部供电方式的多点测温电路图 图7外部电源供电方式是DS18B20最佳的

27、工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度 监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下, 可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。 6、DS1820使用中注意事项 DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: 6.1、较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此 ,在对DS1820进行读写编程时,必须严格的保

28、证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对 DS1820操作部分最好采用汇编语言实现。 6.2、在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个 DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。 6.3、连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的 测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更

29、多的双绞线带屏蔽电缆时,正 常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考 虑总线分布电容和阻抗匹配问题。 6.4、在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦 某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予 一定的重视。 测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。图片 引脚介绍第一部分是电荷泵电

30、路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。 TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R

31、1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。 主要特点1、符合所有的RS-232C技术标准 2、只需要单一 +5V电源供电 3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V- 4、功耗低,典型供电电流5mA 5、内部集成2个RS-232C驱动器 6、高集成度,片外最低只需4个电容即可工作。2 系统硬件设计系统整体硬件电路包括:传感器数据采集电路、温度显示电路、上下限报警调整电路、单片机主板电路等6。2.1 主板电路主板电路如图1 所示。图中有3 个独立式按键,可以分别调整温度计的上下限报警设置,当被测温度不在上下限范围内时,

32、图中的蜂鸣器可以发出报警鸣叫声音,LED 数码管可以显示测出的温度值;图中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时可以手动复位,这样,不用再重启单片机电源就可以实现复位。图1 单片机主板电路2.2 显读取温度DS18B20模块流程图3详细的软调试程序编辑及注解系统程序主要包括C程序主函数、DS18B20复位函数、DS18B20写字节函数、DS18B20读字节函数、温度计算转换函数、显示函数等等。以下是DS18B20温度计C语言程序清单:/*/ / DS18B20温度计C程序/ 2012.3.6通过调试/*/使用AT89C2051单片机,12MHZ晶振,用共阳LED数码管/

33、P1口输出段码,P3口扫描/#pragma src(d:aa.asm)#include reg51.h#include intrins.h /_nop_();延时函数用#define Disdata P1 /段码输出口#define discan P3 /扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P37; /温度输入口sbit DIN=P17; /LED小数点控制uint h;/*温度小数部分用查表法*/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,

34、0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/uchar code dis_712=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf;/* 共阳LED段码表 0 1 2 3 4 5 6 7 8 9 不亮 - */ uchar code scan_con4=0xfe,0xfd,0xfb,0xf7; / 列扫描控制字uchar data temp_data2=0x00,0x00; / 读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00

35、;/显示单元数据,共4个数据,一个运算暂存用/*11微秒延时函数*/void delay(uint t)for(;t0;t-);/*显示扫描函数*/scan()char k; for(k=0;k0; i-) /DQ=1;_nop_();_nop_(); DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usDQ = val&0x01; /最低位移出delay(6); /66usval=val/2; /右移一位DQ = 1;delay(1); /*18B20读1个字节函数*/从总线上读取一个字节uchar read_byte(void)uchar

36、i;uchar value = 0;for (i=8;i0;i-)DQ=1;_nop_();_nop_();value=1;DQ = 0; /_nop_();_nop_();_nop_();_nop_(); /4usDQ = 1;_nop_();_nop_();_nop_();_nop_(); /4us if(DQ)value|=0x80;delay(6); /66usDQ=1;return(value);/*读出温度函数*/read_temp()ow_reset(); /总线复位write_byte(0xCC); / 发Skip ROM命令write_byte(0xBE); / 发读命令te

37、mp_data0=read_byte(); /温度低8位temp_data1=read_byte(); /温度高8位ow_reset();write_byte(0xCC); / Skip ROMwrite_byte(0x44); / 发转换命令/*温度数据处理函数*/work_temp()uchar n=0; /if(temp_data1127) temp_data1=(256-temp_data1);temp_data0=(256-temp_data0);n=1;/负温度求补码display4=temp_data0&0x0f;display0=ditabdisplay4;display4=(

38、temp_data0&0xf0)4)|(temp_data1&0x0f)4);/display3=display4/100;display1=display4%100;display2=display1/10;display1=display1%10;if(!display3)display3=0x0A;if(!display2)display2=0x0A;/最高位为0时都不显示if(n)display3=0x0B;/负温度时最高位显示-/ /*主函数*/main()Disdata=0xff; /初始化端口discan=0xff;for(h=0;h4;h+)displayh=8;/开机显示88

39、88ow_reset(); / 开机先转换一次write_byte(0xCC); / Skip ROMwrite_byte(0x44); / 发转换命令for(h=0;h500;h+) scan(); /开机显示88882秒while(1) read_temp(); /读出18B20温度数据 work_temp(); /处理温度数据 for(h=0;h500;h+) scan(); /显示温度值2秒 /*结束*/DS18B20程序 /将DQ与Vcc之间接入4.7K上拉电阻#include reg52.h#include INTRINS.H#include 1602.c#define uchar

40、 unsigned char#define uint unsigned int/#define CLEARSCREEN LCD_en_command(0x01) 1602清屏sbit DQ=P10;/*操作命令代码 跳过ROM 0xCC 发送温度转换 0xBE 写EEPROM 0x4E*/低层驱动子程序/void Init18B20(void); /初始化void Write18B20(uchar ch);/写数据unsigned char Read18B20(void);/读数据 void Delay15(uchar n); void Delay10ms(uint delay_num);void Display(void);/ code uchar decimalH=00,06,12,18,25,31,37,43,50,56,62,68,75,81,87,93;code

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号