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

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

举报
开通vip

数字系统基础实验实验报告_基于51单片机的智能数字温度计的设计数字系统基础实验实验报告_基于51单片机的智能数字温度计的设计 编号: 2011 -2012 学年第 2 学期 实验课程名称 数字系统基础实验 专 业 班 级 电信1002 学生姓名及学号 实验指导教师 实验项目名称 基于51单片机的智能数字温度计的设计 指导老师 肖铎 成绩 一、实验任务 设计89s51的数字温度计系统 二、实验要求 1(基本要求 a) 能够测量的温度范围 -20?~100? b) 精度??=0.5? c) 能对所测的温度进行数字显示 d) 采用DS18B20智能温度...

数字系统基础实验实验报告_基于51单片机的智能数字温度计的设计
数字系统基础实验实验报告_基于51单片机的智能数字温度计的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 编号: 2011 -2012 学年第 2 学期 实验课程名称 数字系统基础实验 专 业 班 级 电信1002 学生姓名及学号 实验指导教师 实验项目名称 基于51单片机的智能数字温度计的设计 指导老师 肖铎 成绩 一、实验任务 设计89s51的数字温度计系统 二、实验要求 1(基本要求 a) 能够测量的温度范围 -20?~100? b) 精度??=0.5? c) 能对所测的温度进行数字显示 d) 采用DS18B20智能温度传感器 e) 基于51单片机设计 2(选项 a) 用LCD显示所测温度 b) 预置温度并控制温度(3*4键盘,加热电阻) c) 所测温度通过RS232传到PC 三、器件 1 器件简介 单片机89S51 VCC:电源电压输入端。 GND:电源地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 - 2 - 浙江 大学城市学院 实 验 报 告 纸 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信号将不出现。 - 3 - 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)端。 第7,14脚:D0,D7为8位双向数据端。 第15,16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 1602LCD的特性 n+5V电压,对比度可调 n内含复位电路 n提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 n有80字节显示数据存储器DDRAM n内建有160个5X7点阵的字型的字符发生器CGROM n8个可由用户自定义的5X7的字符发生器CGRAM 1602通过D0~D7的8位数据端传输数据和指令。 显示模式设置: (初始化) 0011 0000 [0x38] 设置16×2显示,5×7点阵,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) - 4 - 浙江 大学城市学院 实 验 报 告 纸 DS18B20 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 1: 技术性能描述 ?、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 ? 、测温范围 ,55?,+125?,固有测温分辨率0.5?。 ?、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。 ?、工作电源: 3~5V/DC ? 、在使用中不需要任何外围元件 ?、 测量结果以9~12位数字量方式串行传送 ? 、不锈钢保护管直径 Φ6 ? 、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温 ?、 标准安装螺纹 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 温度传感器可编程的分辨率为9~12位 温度转换为12位数字 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统 描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。 - 5 - 1、DS18B20的主要特性 1.1、适应电压范围更宽,电压范围:3.0,5.5V,在寄生电源方式下可由数 据线供电 1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 1.3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 1.4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内 1.5、温范围,55?,+125?,在-10,+85?时精度为?0.5? 1.6、可编程 的分辨率为9,12位,对应的可分辨温度分别为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内部 结构图 人力资源部组织结构图钢结构图纸会审六年级数学知识结构图单元知识结构图社区居委组织结构图 - 6 - 浙江 大学城市学院 实 验 报 告 纸 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形式 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达,其中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温度数据表 - 7 - (3)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。 (4)配置寄存器 该字节各位的意义如下: 表3:配置寄存器结构 TM R1 R0 1 1 1 1 1 低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位) 表4:温度分辨率设置表 R1 R0 分辨率 温度最大转换时间 0 0 9位 93.75ms 0 1 10位 187.5ms 1 0 11位 375ms 1 1 12位 750ms 4、高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算: 当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表 2是对应的一部分温度值。第九个字节是 冗余检 - 8 - 浙江 大学城市学院 实 验 报 告 纸 验字节。 表5:DS18B20暂存寄存器分布 字节地址 寄存器内容 温度值低位 (LS Byte) 0 温度值高位 (MS Byte) 1 高温限值(TH) 2 低温限值(TL) 3 配置寄存器 4 保留 5 保留 6 保留 7 CRC校验值 8 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待16,60微秒左右,后发出60,240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 表6:ROM指令表 约定代指 令 功 能 码 读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址) 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出55H 符合 RO响应,为下一步对该 DS1820 的读写作准备。 M 0FOH 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 搜索 RO M 跳过 RO0CCH 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 M - 9 - 告警搜索0ECH 执行后只有温度超过设定值上限或下限的片子才做出响应。 命令 表6:RAM指令表 约定代指 令 功 能 码 启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节温度变换 44H RAM中。 读内部RAM中9字节的内容 读暂存器 0BEH 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数写暂存器 4EH 据。 复制暂存器 48H 将RAM中第3 、4字节的内容复制到EEPROM中。 重调 EEPRO0B8H 将EEPROM中内容恢复到RAM中的第3 、4字节。 M 读供电方式 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,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。 - 10 - 浙江 大学城市学院 实 验 报 告 纸 图4 图4 5.2、DS18B20寄生电源强上拉供电方式电路图改进的寄生电源供电方式如下面图5所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到 E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最 多10μS内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺 点就是要多占用一根I/O口线进行强上拉切换。 图5 图5 注意:在图4和图5寄生电源供电方式中,DS18B20的VDD引脚必须接地 5.3、DS18B20的外部电源供电方式在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证 转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空 ,否则不能转换温度,读取的温度总是85?。 图6:外部供电方式单点测温电路 图6 - 11 - . . . . . 图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和地线,屏蔽层在源端单点接地。 - 12 - 浙江 大学城市学院 实 验 报 告 纸 图片 引脚介绍 第一部分是电荷泵电路。由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 系统硬件设计 系统整体硬件电路包括:传感器数据采集电路、温度显示电路、上下限报警调整电路、单片机主板 - 13 - 电路等[6]。 2.1 主板电路 主板电路如图1 所示。图,中有3 个独立式按键,可以分别调整温度计的上下限报警设置,当被测 温度不在上下限范围内时,图中的蜂鸣器可以发出报警鸣叫声音,LED 数码管可以显示测出的温度值; 图中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时可以手动复位,这样,不用 再重启单片机电源就可以实现复位。 图1 单片机主板电路 2.2 显 读取温度DS18B20模块流程图 - 14 - 浙江 大学城市学院 实 验 报 告 纸 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 int - 15 - sbit DQ=P3^7; //温度输入口 sbit DIN=P1^7; //LED小数点控制 uint h; // // //*******温度小数部分用查表法**********// uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09 ,0x09}; // uchar code dis_7[12]={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_con[4]={0xfe,0xfd,0xfb,0xf7}; // 列扫描控制字 uchar data temp_data[2]={0x00,0x00}; // 读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用 // // // /***********11微秒延时函数**********/ // void delay(uint t) { for(;t>0;t--); } // /***********显示扫描函数**********/ scan() { char k; for(k=0;k<4;k++) //四位LED扫描控制 { Disdata=dis_7[display[k]]; if(k==1){DIN=0;} discan=scan_con[k];delay(90);discan=0xff; } } // // /***********18B20复位函数**********/ ow_reset(void) { - 16 - 浙江 大学城市学院 实 验 报 告 纸 char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_(); DQ=0; // delay(50); // 550us DQ=1; // delay(6); // 66us presence=DQ; // presence=0继续下一步 } delay(45); //延时500us presence = ~DQ; } DQ=1; } // // /**********18B20写命令函数*********/ //向 1-WIRE 总线上写一个字节 void write_byte(uchar val) { uchar i; for (i=8; i>0; i--) // { DQ=1;_nop_();_nop_(); DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; //最低位移出 delay(6); //66us val=val/2; //右移一位 } DQ = 1; delay(1); } // /*********18B20读1个字节函数********/ //从总线上读取一个字节 uchar read_byte(void) { uchar i; uchar value = 0; for (i=8;i>0;i--) - 17 - { DQ=1;_nop_();_nop_(); value>>=1; DQ = 0; // _nop_();_nop_();_nop_();_nop_(); //4us DQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us if(DQ)value|=0x80; delay(6); //66us } DQ=1; return(value); } // /***********读出温度函数**********/ // read_temp() { ow_reset(); //总线复位 write_byte(0xCC); // 发Skip ROM命令 write_byte(0xBE); // 发读命令 temp_data[0]=read_byte(); //温度低8位 temp_data[1]=read_byte(); //温度高8位 ow_reset(); write_byte(0xCC); // Skip ROM write_byte(0x44); // 发转换命令 } // /***********温度数据处理函数**********/ work_temp() { uchar n=0; // if(temp_data[1]>127) {temp_data[1]=(256-temp_data[1]);temp_data[0]=(256-temp_data[0]);n=1;}//负温 度求补码 display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]]; display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);// display[3]=display[4]/100; display[1]=display[4]%100; display[2]=display[1]/10; display[1]=display[1]%10; if(!display[3]){display[3]=0x0A;if(!display[2]){display[2]=0x0A;}}//最高位为0时都不 显示 if(n){display[3]=0x0B;}//负温度时最高位显示"-" } - 18 - 浙江 大学城市学院 实 验 报 告 纸 // // /**************主函数****************/ main() { Disdata=0xff; //初始化端口 discan=0xff; for(h=0;h<4;h++){display[h]=8;}//开机显示8888 ow_reset(); // 开机先转换一次 write_byte(0xCC); // Skip ROM write_byte(0x44); // 发转换命令 for(h=0;h<500;h++) {scan();} //开机显示"8888"2秒 while(1) { read_temp(); //读出18B20温度数据 work_temp(); //处理温度数据 for(h=0;h<500;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="P1"^0; /*操作命令代码 跳过ROM 0xCC 发送温度转换 0xBE 写EEPROM 0x4E */ /////////////低层驱动子程序/////////// void Init18B20(void); //初始化 void Write18B20(uchar ch);//写数据 unsigned char Read18B20(void);//读数据 - 19 - 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=(TemH<<4)|(TemL>>4); TemL="TemL"&0x0f; //取低4位 if(TemH&0x80) { TemH=~TemH; TemL=~TemL+1; - 20 - 浙江 大学城市学院 实 验 报 告 纸 ResultSignal="1"; //负 } else ResultSignal="0"; //正 ResultTemperatureLH="decimalH"[TemL]; ResultTemperatureLL="decimalL"[TemL]; ResultTemperatureH="TemH"; Display(); for(delay=0;delay<60000;delay++); for(delay=0;delay<20000;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;q<8;q++) {ch=ch>>1; DQ="0"; _nop_(); DQ="1"; - 21 - _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;i<8;i++) { DQ="0"; Delay15(1); DQ="ch"&0x01; Delay15(3); DQ="1"; ch="ch">>1; _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_(); _nop_(); n--; }while(n); } void Delay10ms(uint delay_num) { uchar i; while(delay_num--) - 22 - 浙江 大学城市学院 实 验 报 告 纸 { for(i=0;i<125;i++) {;} } } MAX232 芯片简介 MAX232 芯片是MAXIM 公司生产的低功耗、单电源双RS232 发送/ 接收器1 适用于各种EIA - 232E 和V. 28/ V. 24 的通信接口1MAX232 芯片内部有一个电源电压变换器, 可以把输入的+ 5V 电源变换成RS - 232C 输出电平所需?10V 电压, 所以采用此芯片接口的串行通信系统只要单一的+ 5V 电源就可以1 MAX232 外围需要4 个电解电容C1 、C2 、C3 、C4 , 是内部电源转换所需电容1 其取值均为1μF/ 25V1 宜选用钽电容并且应尽量靠近芯片1C5 为0. 1μF 的去耦电容1 MAX232 的引脚T1IN、T2IN、R1OUT、R2OUT 为接TTL/ CMOS 电平的引脚1 引脚T1OUT、 R2IN 为接RS - 232C电平的引脚1 因此TTL/ CMOS 电平的T1IN、T2IN 引脚应接MCS T2OUT、R1IN、 - 51 的串行发送引脚TXD; R1OUT、R2OUT 应接MCS - 51 的串行接收引脚RXD1 与之对应的RS - 232C电平的T1OUT、T2OUT 应接PC机的接收端RD; R1IN、R2IN 应接PC机的发送端TD1 串行接口电路 采用MAX232 接口的硬件接口电路现选用其中一路发送/ 接收1R1OU T 接MCS - 51 的RXD , T1 IN 接MCS - 51 的TXD1T1OU T 接PC 机的RD , R1 IN 接PC 机的TD1 因为MAX232 具有驱动能力, 所以不需要外加驱动电路。 通信程序设计 串行通信程序包括两方面, 一方面是MCS- 51 单片机的通信程序, 另一方面为PC 机的通信程序1 在编写程序之前, 制定其双方通信协议是十分重要的, 否则将无法保证通信数据的可靠性, 从而失去通信的意义1 现约定其通 信协议如下: 1) 串行通信波特率为1200bps1 2) 帧格式为: 一位起始位, 八位数据位, 一位可编程的第九位(此位为发送和接收的地址/ 数据 的标志位) , 一位停止位1 3) 设定单片机的地址码为F1H1 在传送数据前先联络地址码, 如地址码正确则传送数据, 否则 继续联络地址码1 4) 无奇偶校验位1 数据的通信采用累加和校验的方法, 即每传送一组数据(个数自定, 设为100 个) , 校验一次累加和是否正确, 正确则回送00H , 否则回送FFH1 5) 通信可以有中断传送方式和查询方式1 在这里介绍查询方式通信1 6) 联络方式为PC 机主动联络MCS - 51 单片机1 7) PC 机采用COM2 通信1 - 23 - 键盘3*4 键盘扫描电路的主要功能是识别按键,并产生相应的键值。键盘扫描电路KEYBOARD 由分频模块SCAN_GEN、键盘扫描计数器模块SCAN_COUNT、按键检测模KEY_SCAN按键抖动消除模块DEBOUNCE、键盘编码模块CODE_TRAN 组成。 CLOCK:输入同步时钟,来自单片机的ALE 端。 COL:来自键盘的8 路列输入信号。 ROW:输出到键盘的4 路行输出信号。 SCAN_F:输出分频信号,取1KHz。 BUTT_CODE[4..0]:输出编码信号。 KEY_VALID:按键有效信号,接入单片机。 当有键按下时,按键检测电路的KEY_PRESSED 的值为0,并输出到计数器电路,使计数停止。同时抖动消除电路在确认使用者正确按键后,输出按键确定值KEY_VALID 及按键编码值BUTT_CODE 5 /INT1 中断服务子程序流程图 Protel 99 se 图 - 24 - 浙江 大学城市学院 实 验 报 告 纸 - 25 - - 26 -
本文档为【数字系统基础实验实验报告_基于51单片机的智能数字温度计的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_841159
暂无简介~
格式:doc
大小:286KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-12-08
浏览量:89