




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江大学城市学院 实 验 报 告 纸 编号: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 器件简介单片机89s51vcc:电源电压输入端。 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编程和校验时,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口除了作为普通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口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89c51的p0、p1、p2、p3口作为输入时都是准双向口。除了p1口外p0、p2、p3口都还有其他的功能。 rst:复位输入端,高电平有效。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 ale/prog:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。 psen:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。 ea/vpp:外部程序存储器访问允许。当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。 xtal1:片内振荡器反相放大器和时钟发生器的输入端。 xtal2:片内振荡器反相放大器的输出端。1602lcd功能介绍1602采用标准的16脚接口,其中: 第1脚:vss为电源地 第2脚:vdd接5v电源正极 第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。 第4脚:rs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第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位数据端传输数据和指令。 显示模式设置: (初始化) 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)ds18b20ds18b20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有ltm8877,ltm8874等等。主要根据应用场合的不同而改变其外观。封装后的ds18b20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 1: 技术性能描述 、 独特的单线接口方式,ds18b20在与微处理器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯。 、测温范围 55+125,固有测温分辨率0.5。 、支持多点组网功能,多个ds18b20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。 、工作电源: 35v/dc 、在使用中不需要任何外围元件 、 测量结果以912位数字量方式串行传送 、不锈钢保护管直径 6 、适用于dn1525, dn40dn250各种介质工业管道和狭小空间设备测温 、 标准安装螺纹 m10x1, m12x1.5, g1/2”任选 、pvc电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。 接线说明特点 独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为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只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个ds18b20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。 1、ds18b20的主要特性 1.1、适应电压范围更宽,电压范围:3.05.5v,在寄生电源方式下可由数 据线供电 1.2、独特的单线接口方式,ds18b20在与微处理器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯 1.3、 ds18b20支持多点组网功能,多个ds18b20可以并联在唯一的三线上,实现组网多点测温 1.4、ds18b20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内 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的外形和内部结构 ds18b20内部结构主要由四部分组成:64位光刻rom 、温度传感器、非挥发的温度报警触发器th和tl、配置寄存器。 ds18b20的外形及管脚排列如下图1: ds18b20引脚定义: (1)dq为数字信号输入/输出端; (2)gnd为电源地; (3)vdd为外接供电电源输入端(在寄生电源接线方式时接地)。 图2: ds18b20内部结构图 3、ds18b20工作原理 ds18b20的读写时序和测温原理与ds1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 ds18b20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图3:ds18b20测温原理框图 ds18b20有4个主要的数据部件: (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温度值格式表 这是12位转化后得到的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,后者存放高温度和低温度触发器 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所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第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完成温度转换必须经过三个步骤:每一次读写之前都要对ds18b20进行 复位操作,复位成功后发送一条rom指令,最后发送ram指令,这样才能对ds18b20进行预定的操作。复位要求主cpu将数据线下拉500微秒,然后 释放,当ds18b20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主cpu收到此信号表示复位成功。 表6:rom指令表 指 令 约定代码功 能读rom33h读ds1820温度传感器rom中的编码(即64位地址) 符合 rom 55h发出此命令之后,接着发出 64 位 rom 编码,访问单总线上与该编码相对应的 ds1820 使之作出响应,为下一步对该 ds1820 的读写作准备。 搜索 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字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 复制暂存器 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从单线信号线上汲取能量:在信号线dq处于高电平期间把能量储存在内部 电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1)进行远距离测温时,无需本地电源 2)可以在没有常规电源的条件下读取rom 3)电路更加简洁,仅用一根i/o口实现测温 要想使ds18b20进行精确的温度转换,i/o线必须保证在温度转换期间提供足够的能量,由 于每个ds18b20在温度转换期间工作电流达到1ma,当几个温度传感器挂在同一根i/o线上进行多点测温时,只靠4.7k上拉电阻就无法提供足够的 能量,会造成无法转换温度或温度误差极大。 因此,图4电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并 且工作电源vcc必须保证在5v,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。 图4图4 5.2、ds18b20寄生电源强上拉供电方式电路图改进的寄生电源供电方式如下面图5所示,为了使ds18b20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到 e2存储器操作时,用mosfet把i/o线直接拉到vcc就可提供足够的电流,在发出任何涉及到拷贝到e2存储器或启动温度转换的指令后,必须在最 多10s内把i/o线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺 点就是要多占用一根i/o口线进行强上拉切换。 图5图5 注意:在图4和图5寄生电源供电方式中,ds18b20的vdd引脚必须接地 5.3、ds18b20的外部电源供电方式在外部电源供电方式下,ds18b20工作电源由vdd引脚接入,此时i/o线不需要强上拉,不存在电源电流不足的问题,可以保证 转换精度,同时在总线上理论可以挂接任意多个ds18b20传感器,组成多点测温系统。注意:在外部供电的方式下,ds18b20的gnd引脚不能悬空 ,否则不能转换温度,读取的温度总是85。 图6:外部供电方式单点测温电路 图6. . . . . 图7:外部供电方式的多点测温电路图 图7外部电源供电方式是ds18b20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度 监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根vcc引线。在外接电源方式下, 可以充分发挥ds18b20宽电源电压范围的优点,即使电源电压vcc降到3v时,依然能够保证温度量精度。 6、ds1820使用中注意事项 ds1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: 6.1、较小的硬件开销需要相对复杂的软件进行补偿,由于ds1820与微处理器间采用串行数据传送,因此 ,在对ds1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用pl/m、c等高级语言进行系统程序设计时,对 ds1820操作部分最好采用汇编语言实现。 6.2、在ds1820的有关资料中均未提及单总线上所挂ds1820数量问题,容易使人误认为可以挂任意多个 ds1820,在实际应用中并非如此。当单总线上所挂ds1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。 6.3、连接ds1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的 测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正 常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用ds1820进行长距离测温系统设计时要充分考 虑总线分布电容和阻抗匹配问题。 6.4、在ds1820测温程序设计中,向ds1820发出温度转换命令后,程序总要等待ds1820的返回信号,一旦 某个ds1820接触不好或断线,当程序读该ds1820时,将没有返回信号,程序进入死循环。这一点在进行ds1820硬件连接和软件设计时也要给予 一定的重视。 测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接vcc和地线,屏蔽层在源端单点接地。图片 引脚介绍第一部分是电荷泵电路。由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数据后从r1out、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 个独立式按键,可以分别调整温度计的上下限报警设置,当被测温度不在上下限范围内时,图中的蜂鸣器可以发出报警鸣叫声音,led 数码管可以显示测出的温度值;图中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时可以手动复位,这样,不用再重启单片机电源就可以实现复位。图1 单片机主板电路2.2 显读取温度ds18b20模块流程图3详细的软调试程序编辑及注解系统程序主要包括c程序主函数、ds18b20复位函数、ds18b20写字节函数、ds18b20读字节函数、温度计算转换函数、显示函数等等。以下是ds18b20温度计c语言程序清单:/*/ / ds18b20温度计c程序/ 2012.3.6通过调试/*/使用at89c2051单片机,12mhz晶振,用共阳led数码管/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,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;/显示单元数据,共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 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); / 发读命令temp_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=(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;/开机显示8888ow_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 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 uchar decimall=00,25,50,75,00,25,50,75,00,25,50,75,00,25,50,75;uint resulttemperatureh ,resulttemperaturelh,resulttemperaturell;/整数,小数高位,小数低位uint resultsignal;/符号位 main() uint temh,teml,delay,k=0; for(; ; ) init18b20(); write18b20(0xcc);/跳过rom _nop_(); /write18b20(0x4e);/写eeprom / write18b20(0x00);/th /write18b20(0x00);/tl write18b20(0x7f);/12 bits温度分辨率 init18b20(); write18b20(0xcc);/跳过rom _nop_(); write18b20(0x44);/发送温度转换指令 delay10ms(25); delay10ms(25); delay10ms(25); delay10ms(25);/等待1s转换 init18b20(); write18b20(0xcc);/跳过rom write18b20(0xbe);/发送温度转换指令 teml=read18b20(); /读低位温度值 temh=read18b20(); /读高位温度值 delay10ms(2); temh=(temh4); teml=teml&0x0f; /取低4位 if(temh&0x80) temh=temh; teml=teml+1; resultsignal=1; /负 else resultsignal=0; /正 resulttemperaturelh=decimalhteml; resulttemperaturell=decimallteml; resulttemperatureh=temh; display(); for(delay=0;delay60000;delay+); for(delay=0;delay20000;delay+); void display(void) uint i,j,q; lcd_init(); clearscreen; lcd_en_command(0x01); delay_nms(2); q=resulttemperatureh/100; i=(resulttemperatureh%100)/10; j=resulttemperatureh-(i*10+q*100); lcd_write_string(0,line1, jaq1217 18b20 ); if(resultsignal) lcd_write_string(0,line2, t is:- . ); else lcd_write_string(0,line2, t is:+ . ); lcd_write_char(0x07,line2,q|0x30); lcd_write_char(0x08,line2,i|0x30); lcd_write_char(0x09,line2,j|0x30); lcd_write_char(0x0b,line2,(resulttemperaturelh/10)|0x30); lcd_write_char(0x0c,line2,(resulttemperaturelh%10)|0x30); lcd_write_char(0x0d,line2,(resulttemperaturell/10)|0x30); lcd_write_char(0x0e,line2,(resulttemperaturell%10)|0x30); unsigned char read18b20(void) unsigned char ch; unsigned char q ; for(q=0;q1; dq=0; _nop_(); dq=1; _nop_();_nop_();_nop_();_nop_(); if(dq=1) ch=ch|0x80; else ch=ch&0x7f; delay15(3); dq=1; return (ch); void write18b20(uchar ch) uchar i; for(i=0;i1; _nop_(); void init18b20(void) dq=0; delay15(33);/至少延时480us dq=1; delay15(10);/至少延时100us /*if(dq=1) return 0; /初始化失败 else return 1; dq=1; delay15(18); */ void delay15(uchar n) do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《危险与可操作性分析基础》课件
- 汽车冲压生产线操作工中级模拟题及答案(附解析)
- 藤编家具行业人才培养与技术创新体系建设研究分析报告考核试卷
- 植物油加工过程中的清洁生产考核试卷
- 《super-intuitive音标讲解》课件
- 职业中介服务的移动互联网应用考核试卷
- 营销策略实施与评估考核试卷
- 腈纶纤维的激光切割技术在纺织品的运用考核试卷
- 空调器结构强度分析考核试卷
- 货运火车站项目管理与施工组织考核试卷
- 信息技术系统故障应急恢复方案及保障措施
- 大数据算法学习通超星期末考试答案章节答案2024年
- DB11T 3034-2023 建筑消防设施检测服务规范
- 激光武器(原创完整)课件
- 2023-2024年全国初中化学竞赛试卷及答案
- 中医内科学-痹证
- 2024图书馆领域大模型创新应用需求调研报告V0-WN8正式版
- GB/T 10069.3-2024旋转电机噪声测定方法及限值第3部分:噪声限值
- 网络安全宣传周网络安全知识手册学习课件
- 2024年公文写作基础知识竞赛试题库及答案(共220题)
- 2024年江苏省镇江市中考化学试卷(含答案解析)
评论
0/150
提交评论