资源描述
目录
第一章绪论2
1.1 国内外现状2
1.2 研究意义3
1.3 本文内容3
第二章系统框图及创新点介绍4
2.1 系统框图4
2.2 创新点介绍4
第三章系统硬件设计4
3.1 CPU介绍4
3.1.1 CPU介绍4
3.1.2主要功能特性5
3.1.3AT89C52各引脚功能及管脚电压5
3.1.4自动重装载(向上或向下计数器)方式8
3.1.5波特率发生器8
3.1.6可编程时钟输出9
3.1.7中断10
3.1.8时钟振荡器10
3.1.9空闲节电模式11
3.1.10掉电模式11
3.1.11程序存储器的加密11
3.1.12Flash存储器的编程11
3.2 传感器介绍12
3.2.1温度传感器的历史及简介12
3.2.2 DS18B20性能特点与内部结构12
3.2.3 DS18B20工作时序17
3.2.4 DS18B20的操作协议19
3.2.5 DS18B20序列号编码21
3.2.6 DS18B20的测温原理22
3.2.7 DS18B20的测温流程23
3.2.8 DS18B20数据校验与纠错23
3.2.9 DS18B20在测温系统中的应用25
3.2.10测温系统的硬件工作原理25
3.2.11 注意事项26
3.3 键盘电路介绍26
3.3.1键盘接口技术26
3.3.2独立式键盘接口27
3.4 显示电路介绍27
3.4.1字符型液晶显示器RT1602C27
3.4.2 RT1602C 与单片机接口及程序28
第四章系统软件设计28
4.1 软件设计流程图28
4.2 键盘程序设计28
4.3 显示程序设计35
第五章系统测试39
5.1 软硬件测试结果39
第六章结论39
第一章 绪论
1.1 国内外现状
温度是一个非常重要的物理量,因为它直接影响燃烧、化学反应、发酵、烘烤、煅烧、蒸馏、浓度、挤压成形、结晶以及空气流动等物理和化学过程。温度控制失误就可能引起生产安全、产品质量、产品产量等一系列问题。因此对温度的检测的意义就越来越大。温度采集控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。
温度采集控制系统是在嵌入式系统设计的基础上发展起来的。嵌入式系统虽然起源于微型计算机时代,但是微型计算机的体积、价位、可靠性,都无法满足广大对象对嵌入式系统的要求,因此,嵌入式系统必须走独立发展道路。这条道路就是芯片化道路。将计算机做在一个芯片上,从而开创了嵌入式系统独立发展的单片机时代。单片机诞生于二十世纪七十年代末,经历了SCM、MCU和SOC三大阶段。
在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。同时温度也是生活中最常见的一个物理量,也是人们很关心的一个物理量,它与我们的生活息息相关,有着十分重要的意义,在工业生产中,温度过高或过低会直接影响到产品的质量、对机械设备和控制系统中的各种元器件造成一定的损坏,严重的会影响到生产安全。在日常生活中,温度过高或过低同样会造成一些不良影响。
在实际生产、生活等各个领域中,温度是环境因素的不可或缺的一部分,对温度及时精确的控制和检测显得尤为重要。比如,农业上土壤各个层面上的温度将会影响植物的生长;在医院的监护中也用到温度的测量。在工业中,料桶里外上限温度要求不一,以及热处理中工件各个部位的温度对工件形成后的性能至关重要等等。现代电子工业的飞速发展对自动测试的要求越来越高。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
1.2 研究意义
采用单片机对温度进行控制,不仅具有控制方便和组态简单的优点,而且可以提高被控温度的技术指标。针对以上情况,在控制成本的前提下,通过本设计设计一款能够实时检测控制温度,又具有对系统设定不同的报警温度的温度控制报警系统功能。此系统能够满足现代生产生活的需要,效率高,具有较强的稳定性和灵活性。因此,在生产和生活中要对温度进行严格的控制,使温度在规定的范围内变化。通过本系统提高学生对于温度控制的认识。在学习实践中提高对理论的认知能力和动手解决实际问题的能力,达到教学实践相结合的目的。
1.3研究内容
本项目采用STC89C52单片机作为核心控制芯片,采用DS18B20作为温度传感器,将采集到的温度数据显示在1602液晶上,同时可以将温度数据上传到PC机内显示。本文内容分为以下几个部分。
第一章 绪论。
第二章 系统框图及创新点介绍。
第三章 系统硬件设计。
第四章 系统软件设计。
第五章 系统测试。
第六章 结论。
第二章 系统框图及创新点介绍
2.1 系统框图
单
片
机
按键输入电路
显示电路
测温传感器
DS18B20
时钟电路
复位电路
报警电路
PC
第三章 系统硬件设计
3.1 CPU介绍
3.1.1 CPU简介
STC89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
3.1.2主要功能特性
· 兼容MCS51指令系统 · 8k可反复擦写(>1000次)Flash ROM
· 32个双向I/O口 · 256x8bit内部RAM
· 3个16位可编程定时/计数器中断 · 时钟频率0-24MHz
· 2个串行中断 · 可编程UART串行通道
· 2个外部中断源 · 共8个中断源
· 2个读写中断口线 · 3级加密位
· 低功耗空闲和掉电模式 · 软件设置睡眠和唤醒功能
3.1.3 STC89C52各引脚功能及管脚电压
概述:STC89C52为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
3.2 传感器介绍
3.2.1温度传感器的历史及简介
温度的测量是从金属(物质)的热胀冷缩开始。水银温度计至今仍是各种温度测量的计量标准。可是它的缺点是只能近距离观测,而且水银有毒,玻璃管易碎。代替水银的有酒精温度计和金属簧片温度计,它们虽然没有毒性,但测量精度很低,只能作为一个概略指示。不过在居民住宅中使用已可满足要求。在工业生产和实验研究中为了配合远传仪表指示,出现了许多不同的温度检测方法,常用的有电阻式、热电偶式、PN结型、辐射型、光纤式及石英谐振型等。它们都是基于温度变化引起其物理参数(如电阻值,热电势等)的变化的原理。随着大规模集成电路工艺的提高,出现了多种集成的数字化温度传感器。
3.2.2 DS18B20性能特点与内部结构
DS18B20是美国DALLAS公司生产的单总线数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易于与未处理器接口等优点,适合于各种温度测控系统。
该器件将半导体温敏器件、A/D转化器、存储器等做在一个很小的集成电路芯片上,传感器直接输出的就是温度信号数字值。信号传输采用两芯(或三芯)电缆构成的单总线结构。一条单总线上可以挂接若干个数字温度传感器,每个传感器有一个唯一的地址码。微控制器通过对器件的寻址,就可以读取某个传感器的温度值,从而简化了信号采集系统的电路结构。
(1) DS18B20的性能特点如下:
1) 独特的单线接口仅需要一个端口引脚进行通信;
2) 多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
3) 无须外部器件;
4) 可通过数据线供电,电压范围为3.0~5.5V;
5) 零待机功耗;
6) 温度以3位数字显示;
7) 用户可定义报警设置;
8) 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
9) 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
(2) DS18B20的外形及管脚排列如下图2:
图3.7 DS18B20封装
(3) DS18B20内部结构主要由六分组成:
1) 64位光刻ROM。开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因[10]。64位闪速ROM的结构如下:
8b检验CRC
48b序列号
8b工厂代码(10H)
MSB LSB MSB LSB MSB LSB
图3.8 DS18B20内部结构
2) 非挥发的温度报警触发器TH和TL,可通过软件写入用户报警上下限值。
3)高速暂存存储,可以设置DS18B20温度转换的精度。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的E2PRAM。高速暂存RAM的结构为8字节的存储器,结构如图2.1所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。它的内部存储器结构和字节定义如图2.2所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,
Byte0
温度测量值LSB(50H)
Byte1
温度测量值MSB(50H)
E2PROM
Byte2
TH高温寄存器
ß----à
TH高温寄存器
Byte3
TL低温寄存器
ß----à
TL 低温寄存器
Byte4
配位寄存器
ß----à
配位寄存器
Byte5
预留(FFH)
Byte6
预留(0CH)
Byte7
预留(IOH)
Byte8
循环冗余码校验(CRC)
图2.3 DS18B20内部存储器结构
DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率,如图2.3。
TM
R1
R0
1
1
1
1
1
图2.4 DS18B20字节定义
由表2.1可见,分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2.2是一部分温度值对应的二进制温度数据[6]。
表2.1 DS18B20温度转换时间表:
R1
R0
分辨率/位
温度最大转向时间/ms
0
0
9
93.75
0
1
10
187.5
1
0
11
375
1
1
12
750
表2.2 一部分温度对应值表
温度/℃
二进制表示
十六进制表示
+125
0000 0111 1101 0000
07D0H
+85
0000 0101 0101 0000
0550H
+25.0625
0000 0001 1001 0000
0191H
+10.125
0000 0000 1010 0001
00A2H
+0.5
0000 0000 0000 0010
0008H
0
0000 0000 0000 1000
0000H
-0.5
1111 1111 1111 0000
FFF8H
-10.125
1111 1111 0101 1110
FF5EH
-25.0625
1111 1110 0110 1111
FE6FH
-55
1111 1100 1001 0000
FC90H
4) CRC的产生在64 b ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
5)寄生电源
寄生电源有二极管VD1、VD2、寄生电容C和电源检测电路组成,如图所示。电源检测电路用于判定供电方式。DS18B20有两种供电方式:3.0——5.5V的电源供电方式和寄生电源供电方式(直接从数据线获取电源)。
若采用外部电源给器件供电,外部电源接VCC引脚通过VD2向器件供电,如图所示。
寄生电源供电时,VCC端接地,器件从单线总线上获取电源,如图所示。在I/O线呈低电平时,改由电容C上的典雅继续向器件供电。该寄生电源的优点:第一,检测远程温度时无需本地电源;第二、缺少正常电源时也能读ROM。
外部电源供电
寄生电源供电
6)温度报警信号
DS18B20完成温度转化后,就把测的的温度值与Th、Tl做比较,若T>Th或T<Tl,则将器件内的报警标志位,将对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。一旦某温度点越限,主机利用报警搜索命令,即可识别正在报警的器件,并读出其序号,而不必考虑非报警器件。
3.2.3 DS18B20工作时序
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:
1. 每一次读写之前都必须要对DS18B20进行复位;
2. 复位成功后发送一条ROM指令;
3. 最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待15~60微秒左右后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。其工作时序包括初始化时序、写时序和读时序,具体工作方法如图2.5,2.6,2.7所示。
(1) 初始化时
图2.5 初始化时序
总线上的所有传输过程都是以初始化开始的,主机响应应答脉冲。应答脉冲使主机知道,总线上有从机设备,且准备就绪。主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。接着主机释放总线,4.7KΩ上拉电阻将总线拉高,延时15~60us,并进入接受模式,以产生低电平应答脉冲,若为低电平,再延时480us[12]。
(2) 写时序
图2.6 写时序
写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,都是以总线拉低开始。写1时序,主机输出低电平,延时2us,然后释放总线,延时60us。写0时序,主机输出低电平,延时60us,然后释放总线,延时2us[8]。
(3) 读时序
图2.7 读时序
总线器件仅在主机发出读时序是,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取总线当前电平,然后延时50us[4]。
3.2.4 DS18B20的操作协议
DS18B20单线通信功能是分时完成的。单线信号包括复位脉冲,响应脉冲,写“0”,写“1”,读“1”。它们有严格的时隙概念。系统对DS18B20的操作以ROM命令(5个)和存储器命令(6)形式表现,各种指令功能如表2-3,2-4所示。
表2-3 DS18B20 ROM命令
指令
约定代码
功能
读ROM
33H
读DS18B20中的编码(既读64位地址)
符 合ROM
55H
发出此命令后,接着发出64位ROM编码,访问单总线上与该编码相应的DS18B20,使之做出响应,为下一步对该DS18B20的读写做准备。
搜 索ROM
0F0H
用于确定挂在同一总线上DS18B20的个数和识别64位ROM地址,为操作各个器件做好准备。
跳 过ROM
0CCH
忽略64位ROM地址,直接向DS18B20发温度转换命令,适用于单片工作。
告警搜索命令
0ECH
执行后,只有温度超过设定上限或是下限的片子做出响应。
表2-4 DS18B20 RAM命令
指令
约定代码
功能
温度变换
44H
启动DS18B20进行温度转换,结果存入内部RAM。
读暂存器
0BEH
读内部RAM中的内容。
写暂存器
4EH
发出向内部RAM的第3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂
存 器
48H
将RAM中的第3、4字内容复制到EEPROM中。
重调EEPRAM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电
方 式
0B4H
读DS18B20的供电模式,寄生供电是DS18B20发送“0”,外接电源供电DS18B20发送“1”。
对DS18B20操作协议是:初始化DS18B20(发复位脉冲)→发ROM功能命令→处理数据→发存储命令处理数据。
初始化:主机发一位复位脉冲(对短为480us的低电平),接着主机释放总线进入接收状态,DS18B20在检测到I/O引脚上的上升沿之后,等待15~60us然后发出存在脉冲(60~240us的低电平)。
写时间片:将数据线从高电平拉至低电平,产生起始信号。在15us之内将所需写的位送到数据线上,在15us到60us之间对数据线进行采样,如果采样为高电平,就写1,如果是低电平,写0就发生。在开始另一个写周期前必须有1us以上的高电平恢复期。
读时间片:主机将数据线从高电平拉至低电平1us以上,再使数据线升为高电平,从而产生读起始信号。主机在读时间片下降沿之后15us内完成读位。每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期。
用户对于DS18B20的访问有三个步骤:
(1).初始化
用户通过信号线,向DS18B20发送一个满足特定时序的负脉冲,信号线上所有DS18B20芯片都被复位。准备接受用户的序列号命令。
(2).序列号访问命令
接下来,用户通过信号线,发送一个特定的64位序列号编码。这时,信号线上所有相连DS18B20都进行编码匹配,只有编码一致的DS18B20才被激活,可以接受下面的内存访问命令。
(3).存访问命令
在用户发送序列号访问命令选定DS18B20芯片后,被选中的芯片便可以接受内存访问命令。读取温度数据,设定温度报警限。二进制数据与温度的对应关系见表2-5。
表2-5 二进制数据与温度的对应关系
温度
温度数据输出(二进制)
温度数据输出(16进制)
+125℃
0000 0111 1101 0000
07D0h
+85℃
0000 0101 0101 0000
0550h
+25.0625℃
0000 0001 1001 0001
0191h
+10.125℃
0000 0000 1010 0010
00A2h
+0.5℃
0000 0000 0000 1000
0008h
0℃
0000 0000 0000 0000
000h
-0.5℃
1111 1111 1111 1000
FFF8h
-10.125℃
1111 1111 0101 1110
FF5Eh
-25.0625℃
1111 1110 0110 1111
FF6Fh
-55℃
1111 1100 1001 0000
FC90h
3.2.5 DS18B20的测温原理
每一片DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片内ROM 中。主机在进入操作程序前必须用读ROM(33H)命令将该DSl8B20的序列号读出。
程序可以先跳过ROM,启动所有DSl8B20进行温度变换,之后通过匹配ROM,再逐一地读回每个DSl8B20的温度数据。
DS18B20的测温原理如图2.8所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法
计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2.8中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
减法计数器
斜坡累加器
减到0
减法计数器
预 置
低温度系数
振 荡 器
高温度系数
振 荡 器
计数比较器
预 置
温度寄存器
减到0
图2.8 测温原理内部装置
3.2.7 DS18B20的测温流程
初始化
DS18B20
跳过ROM
匹配
温度变换
延时1S
跳过ROM
匹配
读暂存器
转换成显示码
数码管显示
图2.9 DS18B20测温流程
3.2.8 DS18B20数据校验与纠错
在进行多点测温时,敏感元件与数据采集系统一般有一定的距离,不可避免的要遇到电磁干扰。信号衰减问题,使数据发生错误。如果在数据的传输过程中系统具有一定的容错能力,在纠错范围内,就可以对错误的数据进行纠正,提高抗干扰能力和加大传输距离,当错误超出纠错范围时,也可以识别出错误的数据进行从新采集,从而提高了采集数据的可信度。DS18B20在设计时已经为用户提高了用于检验遇救错的循环冗余校验码(cyclic redundancy code crc)。下边将就用软件对DS18B20中数据的校验与纠错进行详细的讨论,并给出了用查表法进行校验及纠错的算法以及实现这一算法的过程。字节数据存储结构如表2-10所示。
图2-10 9字节数据存储结构图
CRC
保留
保留
保留
配置寄存器
低温限值TL
高温限值TL
温度高字节
温度低字节
由温度存储器的低字节、高字节,低温报警器TL,高字节报警触发器TH,配置寄存器,和CRC字节组成了DS18B20的数据存储器,共九个字节,结构如图2-9。其中温度存储器的低位字节、高位字节是以符号扩展,0表示正数,1表示负数值,其余位正整数部分。例如16进制温度值018CH对应的二进制数为0000000110001100,温度值是24.75℃;FF5EH对应的二进制为1111111101011110,温度值-10.125℃。图中的CRC是通过CRC发生器产生的。CRC发生器产生的逻辑电路是由移位寄存器或异或门组成,也称除法逻辑电路。CRC发生器的逻辑电路对应的表达式是X8+X5+X4+1(对应的二进制数为100110001),也称生成多项式,记位g(x)。实际应用中就是通过这种除法逻辑电路对一组数据进行校验和纠错。如果速度允许,也常使用生成多项式g(x)通过软件方法进行校验与纠错。
(2) CRC校验的算法与编码的算法是相同的,校验时要将CRC作为数据一同进行计算。下边对其进行讨论并给出查表算法。
直接算法:用于生成多项式直接进行校验的方法是将低字节位放在前(左)。然后用g(x)去做异或除法。得到的余数若为0,则表示数据正确,余数不为0,则表示数据有错,通过余数便可知道结果是否正确。DS18B20的CRC码是可以纠正一位错误的。
改进算法;直接算法由于循环次数较多而且需要的时间很长。改进算法能叫为方便的进行处理,该算法是对数据进行逐步字节处理,处理顺序是由低字节到高字节。这里首先将CRC单元赋0,取一个字节数据做异或并将结果存入暂存单元AY,然后字节数据左环移。如果AY的最低位是一,则CRC只左移。在将AY的最低移入CRC的最高位。做完一个字节之后,将CRC的结果与下一个字节做同样处理直至最后一个字节处理完。
(3)纠错:如果结果不为0,则意味着数据错误。DS18B20的编码是可以纠正一位错误的,当错误多余一个就是要重新采集数据,本文给出一种利用查表进行纠错的方法。该方法是首先计算出一位错误代码的样图,如表2-7所示。
表2-7 一位错误代码的样图
下标
D7
D6
D5
D4
D3
D2
D1
D0
0
173
218
109
186
93
162
81
164
1
146
73
168
84
42
21
134
67
2
151
199
239
251
241
155
122
61
3
234
117
182
91
161
220
110
55
4
203
233
248
124
62
31
131
205
5
217
224
112
56
28
14
7
143
6
98
49
148
74
37
158
79
171
7
47
155
193
236
118
59
145
196
8
140
70
35
157
194
97
188
94
然后根据查表得到这个余数在图中的位置(这里设为N,N的值从0到71),通过N的值就可以计算出错误在数据中的值,计算的方法是,将N被8除,商的整数部分位错误字节的位置,用7减去余数则得到错误位在该字节中的位号,只需对错误位取反即可纠正错误。
总结:由于使用了校验与纠错方法,增加了数据的传输距离与可信度。在没有使用校验与纠错方式时,线路大于20米,显示的温度常出现大幅度的跳动。在使用了校验与纠错方法后,线路在50米时仍然十分稳定。
3.2.9 DS18B20在测温系统中的应用
DS18B20与单片机的接口极其简单,只需将DS18B20的信号线与单片机的一位双向端口相连即可。一般测温电缆采用屏蔽4芯双绞线,其中一对接地线与信号线,另一对Vdd和地线,屏蔽层在源端单点接地。
3.2.10测温系统的硬件工作原理
对DS18B20初始化后,主机发出SKIP ROM命令,此命令执行后的存储器操作命令将对所在线的DS18B20,在发出温度转换启动码44H,等待750ms后,先发出匹配ROM命令(55H),紧接着主机提供一片DS18B20的64位序列号,读取其温度存储器值,存入数据缓存。
3.2.11 注意事项
DS18B20具有测温系统简单,测温精度高,连接方便,站用口线少等优点,但是在实际使用中也应注意以下几方面的问题:
(1)DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。
(2)在实际使用时发现,应使电源保持在5V左右。若电源电压过低,会使所测得的温度与实际温度出现偏高现象,经过实验发现,一般在5V左右。
(3)初始化时,当主机受到DS18B20回应的低电平信号后等到单总线恢复高电平后,主机才能接着对DS18B20进行操作。
(4)当主机发温度转换命令使DS18B20进行温度转换时,数据线要保持高电平的时间为750ms。
(5)当主机发数值拷贝命令使DS18B20将温度寄存器的数值拷贝到EERAM中时,数据线保持高电平时间至少为10ms。
(6)当不进行复位时,数据线保持为低电平时间不超过60us,否则将产生复位读操作。
(7)要严格的按照时隙图对DS18B20进行复位和读写操作。
(8)单总线上所挂的DS18B20超过8个时,要注意微处理器的总线驱动问题。[15]
(9)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时要注意。
(10) 测温电缆线在这里采用屏蔽4双绞线,其中一对线接地线与信号线,另一组接Vcc和地线,屏蔽层在源端点单点接地。
3.3 键盘电路介绍
3.3.1键盘接口技术
单片机使用的键盘一般分为两种:独立式键盘与矩阵式键盘。独立式键盘实际上就是一组相互独立的按键,这些按键可直接与单片机的I/O 口连接,即每个按键独占一条口线,接口简单,在按键数目不多的场合使用方便。矩阵式键盘也叫行列式键盘,因为按键的个数较多,所以按键组成行列式的矩阵。
键盘在应用的时候包括两项工作:一个是按键的识别,即在键盘中找出被按下的是哪一个键,一般使用接口电路来实现;另一个是按键功能的实现,要通过键盘服务程序来完成。接口电路可以采用如下4 种方式:使用单片机本身的并行口;使用单片机本身的串行口;使用通用接口芯片(如8255);使用专用接口芯片(如HD7279,8279,ZLG7289 等)。
键盘处理的过程如下:
1、键盘扫描,用查询或中断方式判断是否有按键被按下。
2、去抖动,用硬件或软件方法去除按键抖动。
3、键码的识别,用来区分不同的按键。
4、根据键码编制程序来处理该按键操作。
所谓去抖动是指消除按键闭合或断开时引起的瞬间电压抖动,这样才能保证键扫描的正确性。常用的去抖动方法为软件方法,其方法为判别到有键按下后,软件延时一段时间(一般为10ms 左右)后,再判断键盘状态,如果仍为有键按下状态,则认为有一个确定的键被按下,否则把按键当作抖动处理。
3.3.2独立式键盘接口
在单片机的运行过程中,键盘的扫描和处理有两种方式:查询方式和中断方式。查询
方式是当CPU 空闲时就执行键盘扫描程序,这种方式浪费CPU 时间,在CPU 处理任务较重
的场合容易产生延迟;中断方式是每当有按键闭合就向CPU 发出中断申请,中断响应后执
行键盘扫描程序,这种方式响应速度快,CPU 利用率高。
1、查询方式示例
图7-8 为一种典型的独立式键盘接口电路,可以看出,各按键接到了单片机的P1 口,
且无键按下时P1.0-P1.3 为高电平,当某个键被按下时,与该键相连的口线被拉成低电平,
利用某个口线电平的变化即可判断出哪个键被按下了。
图7-8 查询方式键盘接口
3.4 显示电路介绍
3.4.1字符型液晶显示器RT1602C
字符型液晶显示器是一种用5×7 点阵图形来显示字符的液晶显示器,根据显示的容量
可以分为1 行16 个字、2 行16 个字、2 行20 个字等,最常用的为2 行16 个字,即我们马
上要学习的RT1602C 液晶模块。RT1602C 液晶模块内带标准字库,内部的字符发生存储器已经存储了192 个5×7 点阵字符,32 个5×10 点阵字符。另外还有字符生成RAM 512 字节,供用户自定义字符。这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H,也就是其ASCII 码),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”。
3.4.2 RT1602C 与单片机接口及程序
图14-3 1602 与单片机接口
第四章 系统软件设计
4.1 软件
展开阅读全文