热门搜索 :
考研考公
您的当前位置:首页正文

智能仪器仪表结课报告

来源:伴沃教育


沈阳工学院

智能仪器仪表(课程论文)

题 目: 温度测控系统

院 系: 信息与控制学院 专 业: 班级学号: 学生姓名: 指导教师:

成 绩:

2013年6月13日

摘 要

温度检测在工业控制过程中应用广泛,本文结合实际使用需求及课程的要求,讲述了一种实现一路温度检测显示并发送给上位机进行控制的温度测控系统设计方案。该方案以AT89C51单片机、温度传感器DS18B20为基础,主要包括对温度测量、液晶屏显示、串口通信、超限报警系统的硬件和软件的设计。

本系统使用到的硬件主要包括有:德飞莱开发板、AT89C51单片机、温度传感器DS18B20、1602液晶显示屏、两个LED灯、三个独立式按键。绘制电路原理图,并在开发板上安装与调试,最终设计完成了该系统的硬件电路。在软件编程上,采用了C语言进行编程,开发环境使用Keil4集成开发环境。开发了DS18B20测温程序、1602显示程序、串口通信程序、超限报警程序。在软件设计上根据硬件电路和测量系统所需要实现的功能,系统经过反复的模拟运行、调试、修改,最终编译通过。最后通过硬件与软件的密切配合完成了一路DS18B20温度测控系统的设计。

关键词:单片机;温度传感器;显示屏

I

目 录

1 DS18B20温度传感器 .......................................................................................................................... 1

1.1 数字温度传感器DS18B20介绍 .......................................................................................... 1

1.1.1 DS18B20的主要特性 ................................................................................................. 1 1.1.2 DS18B20的外形和内部结构 ................................................................................... 1 1.1.3 DS18B20工作原理 ..................................................................................................... 2 1.1.4 高速暂存存储器 ......................................................................................................... 4 1.2 S18B20的工作时序图 ........................................................................................................... 5

1.2.1 初始化时序图 ............................................................................................................. 6 1.2.2 DS18B20写数据 .......................................................................................................... 6 1.2.3 DS18B20读数据 .......................................................................................................... 7 1.3 DS1820使用中注意事项 ...................................................................................................... 8 2 1602液晶显示屏................................................................................................................................. 9

2.1 1602液晶显示屏概述 ........................................................................................................... 9

2.1.1 LCD1602管脚介绍 ..................................................................................................... 9 2.1.2 LCD1602特性 ............................................................................................................ 10 2.2 1602的指令集 ....................................................................................................................... 10 2.3 1602的写操作时序 ..............................................................................................................11 3 系统硬件的实现 ................................................................................................................................ 12

3.1 温度测量部分(发送板) ................................................................................................. 12 3.2 上位机部分(接收板)...................................................................................................... 13 4 系统软件的实现 ................................................................................................................................ 14

4.1 发送板软件的实现 ............................................................................................................... 14

4.1.1 DS18B20部分 ............................................................................................................ 14 4.1.2 1602部分 ................................................................................................................... 14 4.1.3 串口通信(发送)部分 ......................................................................................... 15 4.1.4 主程序部分 ................................................................................................................ 15 4.2 接收板软件的实现 ............................................................................................................... 16 结 论 ........................................................................................................................................................... 18 附录A 电路板原理图 .......................................................................................................................... 19 附录B 实物照片 ................................................................................................................................... 20 附录C 主程序清单(重要的程序清单) ...................................................................................... 21

II

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 1 DS18B20温度传感器

1.1 数字温度传感器DS18B20介绍

1.1.1 DS18B20的主要特性

(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 , 温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃ ;

(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;

(3)DS18B20支持多点组网功能,多个DS18B20可以实现组网多点测温 ; (4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内 ;

(5)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 ;

(6)在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 ;

(7)测量结果直接输出数字温度信号,以\"一线总线\"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 ;

(8)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 1.1.2 DS18B20的外形和内部结构

DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如图1.1所示,DS18B20内部结构图如图1.1所示:

图1.1 DS18B20的外形及管脚排列图

1

沈阳工学院——信息与控制学院——智能仪器仪表课程论文

图1.2 DS18B20内部结构图

1.1.3 DS18B20工作原理

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减750ms。DS18B20测温原理如图1.3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图1.3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图1.3 DS18B20测温原理框图

DS18B20有4个主要的数据部件:

(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20

2

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 的地址序列码。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.1所示。

表1.1 DS18B20温度值格式表

Bit 15

Bit 14

Bit 13

Bit 12

Bit 11

Bit 10

Bit 9

Bit 8

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

S S S S S 2^6 2^5 2^4 2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3 2^-4

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H ,表1.2为一些典型温度值的数字输出。

表1.2 DS18B20温度数据表

温度值 +125℃ +85℃ +25.0625℃ +10.125℃ +0.5℃ 0℃ -0.5℃ -10.125℃ -55℃

数字输出(Binary) 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 1111 1111 1111 1000 1111 1111 0101 1110 1111 1100 1001 0000

数字输出(Hex)

07D0h 0550h 0191h 00A2h 0008h 0000h FFF8h FE6Fh FC90h

(3)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器

3

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 TH、TL和结构寄存器。

(4)配置寄存器,如表1.3所示,该字节各位的意义如下:

表1.3 配置寄存器结构

Bit7 TM

Bit6 R1

Bit5 R0

Bit4 1

Bit3 1

Bit2 1

Bit1 1

Bit0 1

低五位一直都是\"1\",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1.4所示:(DS18B20出厂时被设置为12位)

表1.4 温度分辨率设置表

R1 0 0 1 1

R0 0 1 0 1

分辨率 9位 10位 11位 12位

温度最大转换时间 93.75ms 187.5ms 375ms 750ms

1.1.4 高速暂存存储器

高速暂存存储器由9个字节组成,其分配如表1.5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1.5所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表1.2是对应的一部分温度值。第九个字节是冗余检验字节。

表1.5 DS18B20暂存寄存器分布

寄存器内容 温度值低位 (LS Byte) 温度值高位 (MS Byte) 高温限值(TH) 低温限值(TL) 配置寄存器 保留 保留 保留 CRC校验值 字节地址 0 1 2 3 4 5 6 7 8 4

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。其中ROM和RAM的指令表分别如表1.6和表1.7所示:

表1.6 ROM指令表

指 令 读ROM 符合 ROM 搜索 ROM 跳过 ROM 告警搜索命令 约定代码 33H 55H 0FOH 0CCH 0ECH 功 能 读DS1820温度传感器ROM中的编码(即64位地址) 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 执行后只有温度超过设定值上限或下限的片子才做出响应。 表1.7 RAM指令表

指 令 温度变换 读暂存器 写暂存器 复制暂存器 重调 EEPROM 读供电方式 约定代码 44H 0BEH 4EH 48H 0B8H 0B4H 功 能 启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 读内部RAM中9字节的内容 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 将RAM中第3 、4字节的内容复制到EEPROM中。 将EEPROM中内容恢复到RAM中的第3 、4字节。 读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。 1.2 S18B20的工作时序图

图1.4为DS18B20时序图中各总线状态。

5

沈阳工学院——信息与控制学院——智能仪器仪表课程论文

图1.4 时序图中各总线状态

1.2.1 初始化时序图

DS18B20的初始化时序图如图1.5所示:

图1.5 初始化时序图

DS18B20的初始化的步骤如下: (1)先将数据线置高电平1。

(2)延时(该时间要求不是很严格,但是尽可能短一点)。 (3)数据线拉到低电平0。

(4)延时750μs(该时间范围可以在480~960μs); (5)数据线拉到高电平1。

(6)延时等待。如果初始化成功则在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限的等待,不然会使程序进入死循环,所以要进行超时判断。

(7)若CPU读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起最少要480μs。

(8)将数据线拉到高电平1后结束。 1.2.2 DS18B20写数据

DS18B20写数据时序图如图1.6所示:

6

沈阳工学院——信息与控制学院——智能仪器仪表课程论文

图1.6 写数据时序图

DS18B20写数据的具体步骤如下所示: (1)数据线先置低电平0。 (2)延时确定时间为15μs。

(3)按从低位到高位的顺序发送数据(一次只发送一位)。 (4)延时时间为45μs。 (5)将数据线拉高到1。

(6)重复上述步骤,知道发完整个字节。 (7)最后将数据线拉高到1。 1.2.3 DS18B20读数据

DS18B20写数据时序图如图1.7所示:

图1.7 写数据时序图

DS18B20读数据的具体步骤如下所示: (1)将数据线拉高到1。 (2)延时2μs。

(3)将数据线拉低到0。

7

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 (4)延时6μs。

(5)将数据线拉高到1。 (6)延时4μs。

(7)读数据线的的 状态得到一个状态位,并进行数据处理。 (8)延时30μs。

(9)重复上述(1)~(7)的步骤,直到读取完一个字节。

1.3 DS1820使用中注意事项

DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。

(2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。

(3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考 虑总线分布电容和阻抗匹配问题。

(4)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予 一定的重视。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。

8

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 2 1602液晶显示屏

2.1 1602液晶显示屏概述

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 2.1.1 LCD1602管脚介绍

LCD1602管脚图如图2.1所示:

图2.1 LCD1602管脚图

1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。

9

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 2.1.2 LCD1602特性

(1)3.3V或5V工作电压,对比度可调; (2)内含复位电路;

(3)提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能; (4)有80字节显示数据存储器DDRAM;

(5)内建有192个5X7点阵的字型的字符发生器CGROM; (6)8个可由用户自定义的5X7的字符发生器CGRAM;

2.2 1602的指令集

LCD1602液晶显示屏的指令如表2.1所示:

表2.1 LCD1602液晶显示屏指令集

指令码

RS R/W D7 D6 D5 D4 D3 D2 D1 D0

功 能

清除显0 0 0 0 0 0 0 0 0 1 将DDRAM填满\"20H\并且设定DDRAM的地示 址计数器(AC)到\"00H\"

0 0 0 0 0 0 0 0 1 X 设定DDRAM的地址计数器(AC)到\"00H\并且

地址归

将游标移到开头原点位置;这个指令不改变

DDRAM 的内容

显示状0 0 0 0 0 0 1 D C B D=1: 整体显示 ONC=1: 游标ON B=1:游标位态开/关 置反白允许

进入点0 0 0 0 0 0 0 1 I/D S 指定在数据的读取与写入时,设定游标的移动设定 方向及指定显示的移位 游标或0 0 0 0 0 1 S/C R/L X X

设定游标的移动与显示的移位控制位;这个指

显示移

令不改变DDRAM 的内容

位控制

功能设0 0 0 0 1 DL X RE X X DL=0/1:4/8位数据RE=1: 扩充指令操作RE=0: 定 基本指令操作 设定0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 CGRAM设定CGRAM 地址 地址

设定0 0 1 0 AC5 AC4 AC3 AC2 AC1 AC0

设定DDRAM 地址(显示位址)第一行:80H

DDRAM

-87H第二行:90H-97H

地址

AC6 AC5 AC4 AC3 AC2 AC1 AC0 读取忙0 1 BF

读取忙标志(BF)可以确认内部动作是否完成,

标志和

同时可以读出地址计数器(AC)的值

地址

写数据1 0 数据 将数据D7——D0写入到内部的RAM

(DDRAM/CGRAM/IRAM/GRAM) 到RAM

读RAM1 1 数据 从内部RAM读取数据

D7——D0(DDRAM/CGRAM/IRAM/GRAM) 的值

10

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 2.3 1602的写操作时序

1602的写操作时序图如图2.1所示:

图2.1 1602的写操作时序图

分析时序图可知操作1602液晶的流程如下:

(1)通过RS确定是写数据还是写指令。写命令包括使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据指的是要显示什么内容。

(2)读/写控制端设置为写模式,即低电平。 (3)将数据或命令送达数据线上。

(4)给E一个高脉冲将数据送入液晶控制器,完成写操作。

11

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 3 系统硬件的实现

3.1 温度测量部分(发送板)

该部分主要运用到了DS18B20温度传感器和1602液晶显示屏。其中DS18B20温度传感器的数据线DQ接在了P1.3口,其电路原理图如图3.1所示,在本次设计中只用到了一路DS18B20。1602液晶显示屏的数据段端口定义为P0口,其电路原理图如图3.2所示。

图3.1 两路温度传感器

图3.2 LCD1602部分电路图

12

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 3.2 上位机部分(接收板)

该部分的显示同样是应用了1602液晶屏,该部分硬件主要添加了三个按键,来调节温度值的上下限。Keya接在了P1.0, keyb接在了P1.1, keyc接在了P1.2。其部分电路图如图3.3所示。还运用了两个LED灯作为报警提示,温度值超过上限时Led1点亮,温度值低于下限时LED2点亮,它们分别接在P1.6和P1.7上,其部分电路图如图3.4所示。

图3.3 按键部分电路图

图3.4 LED部分电路图

13

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 4 系统软件的实现

4.1 发送板软件的实现

4.1.1 DS18B20部分

上电后先对DS18B20进行初始化,然后编写读取一个字节的子程序,写入一个字节的子程序,读取温度的子程序。程序框图如图4.1所示:

初始化 读取一个字节子程序 写入一个字节子程序 读取温度子程序 结束

图4.1 DS18B20部分程序框图

4.1.2 1602部分

上电后对1602显示屏进行初始化,然后依次写入判忙子程序、写命令子程序、写数据子程序、清屏子程序、写字符串子程序、写字符子程序。程序框图如图4.2所示:

14

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 初始化 判忙子程序 写命令子程序 写数据子程序 清屏子程序 写字符串子程序 写字符子程序 结束 图4.2 1602部分程序框图

4.1.3 串口通信(发送)部分

上电后先对串口进行初始化,然后判断发送标志位是否为1,为1则进行置0,程序框图如图4.3所示:

串口初始化 SBUF=temperature TI=1 TI=0

图4.3 串口通信(发送)部分程序框图

4.1.4 主程序部分

主程序部分主要是实现读取温度值,并将其发送给上位机,同时显示在液晶屏上,

15

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 其程序框图如图4.4所示:

开始 初始化之程序入口 等待 ReadTempFlag=1 ReadTempFlag=0 数据处理 串口通信程序入口 1602显示程序入口

图4.4 主程序框图

4.2 接收板软件的实现

接收板在该系统中,充当上位机的功能,它包括超限报警部分和温度的接收和显示部分,其中温度值的上限和下线可以通过按键调节。温度值超过上限时Led1点亮,温度值低于下限时LED2点亮。其中显示部分与发送板的程序结构相似,在这里主要介绍串口通信的接收部分和主程序部分。串口通信的接收部分程序框图如图4.5所示,主程序部分程序框图如图4.6所示。

16

沈阳工学院——信息与控制学院——智能仪器仪表课程论文

RI=0 RI=1 等待中断 串口初始化 num=SBUF

图4.5 串口通信(接收)部分程序框图

开始 初始化子程序入口 等待 串口通信子程序入 数据处理 1602显示程序入口 超限判断 点亮LED1 或LED2

图4.6 接收板主程序框图

17

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 结 论

本系统实现了室内的温度检测和显示,同时将得到的数据通过串行通信的方式发送给上位机并予以超限报警处理。本系统的设计解决了温度的测量、通信和报警问题,在实际生活中有很大的应用。该系统由两块开发板组成,一块作为发送板,实现温度的测量、显示和发送,另一块板充当上位机的功能,实现温度的接收和超限报警处理,其中温度值的上下限可以手动调节,这样的处理拥有更大实际应用价值。

本系统的设计还有很多值得改善的地方,特别是在串口通信方面,我的程序可能会导致有些数据丢失,并且数据有时并不能实时的发送。在该系统的设计中我也还有没有解决的问题,比如超限报警的程序如何不与温度显示发生冲突,在我的程序中,想要实现温度超限时,LED小灯被点亮2秒,但是由于温度值是在不断地刷新,我便不能使用延时来实现LED小灯被点亮2秒,使用延时后温度值便不再刷新。因此我只能实现LED小灯在超限时不停地闪烁。

18

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 附录A 电路板原理图

图A1 温度测控系统部分电路原理图

19

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 附录B 实物照片

图B1 温度测控系统实物图

20

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 附录C 主程序清单(重要的程序清单)

发送部分主程序: #include //#include #include \"18b20.h\" #include \"1602.h\" #include \"delay.h\" long int temperatur;

bit ReadTempFlag;//定义读时间标志 void Init_Timer0(void);//定时器初始化

unsigned char code dofly_code[]={'0','1','2','3','4','5','6','7','8','9'}; /*------------------------------------------------ 串口通讯初始化 ------------------------------------------------*/ void UART_Init(void) {

SCON = 0x50;

// SCON: 模式 1, 8-bit UART, 使能接收

TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装

TH1 = 0xF3; // TH1: 重装值 2400 波特率 晶振 12MHz TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 //ES = 1; //打开串口中断 }

/*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { int temp;

21

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 float temperature;

LCD_Init(); //初始化液晶 DelayMs(20); //延时有助于稳定 LCD_Clear(); //清屏 Init_Timer0(); UART_Init();

Lcd_User_Chr(); //写入自定义字符 LCD_Write_String(0,0,\" shi wen \"); LCD_Write_String(0,1,\"value\");

LCD_Write_Char(13,1,0x01);//写入温度右上角点 LCD_Write_Char(14,1,'C'); //写入字符C while (1) //主循环 {

if(ReadTempFlag==1) {

ReadTempFlag=0; temp=ReadTemperature(); temperature=temp*0.0625; SBUF=temperature; while(!TI); TI=0;

temperatur=temperature*1000;

LCD_Write_Char(6,1,dofly_code[temperatur/100000]);

LCD_Write_Char(7,1,dofly_code[(temperatur%100000)/10000]); LCD_Write_Char(8,1,dofly_code[((temperatur%100000)%10000)/1000]); LCD_Write_Char(9,1,'.');

LCD_Write_Char(10,1,dofly_code[(((temperatur%100000)%10000)%1000)/100]); LCD_Write_Char(11,1,dofly_code[((((temperatur%100000)%10000)%1000)%100)/10]); LCD_Write_Char(12,1,dofly_code[((((temperatur%100000)%10000)%1000)%100)%10]); }

22

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 } }

/*------------------------------------------------ 定时器初始化子程序 ------------------------------------------------*/ void Init_Timer0(void) {

TMOD |= 0x01; //使用模式1,16位定时器,使用\"|\"符号可以在使用多个定时器时不受影响

//给定初值

//TH0=0x00; //TL0=0x00;

EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 }

/*------------------------------------------------ 定时器中断子程序 ------------------------------------------------*/ void Timer0_isr(void) interrupt 1 {

static unsigned int num; TH0=(65536-2000)/256; TL0=(65536-2000)%256; num++;

if(num==300) { num=0;

ReadTempFlag=1; //读标志位置1 } }

//重新赋值 2ms

23

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 接收部分主程序: #include #include #include sbit keya=P1^0; sbit keyb=P1^1; sbit led1=P1^6; sbit led2=P1^7;

unsigned char jianci1=0,jianci2=0; void InitUART (void) {

SCON = 0x50;

// SCON: 模式 1, 8-bit UART, 使能接收

TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装

TH1 = 0xF3; // TH1: 重装值 2400 波特率 晶振 12MHz TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 ES = 1; //打开串口中断 }

/*------------------------------------------------ 主函数

------------------------------------------------*/ void main(void) {

unsigned int shangxian=30; unsigned int xiaxian=20; LCD_Init(); LCD_Clear(); //清屏 InitUART(); while (1) {

24

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 ES=1;

LCD_Write_Char(6,0,dofly_code[num0/100]); LCD_Write_Char(7,0,dofly_code[(num0%100)/10]); LCD_Write_Char(8,0,dofly_code[((num0%100)%10)]); if(keya==0) {

DelayMs(50); if(keya==0) {

jianci1=jianci1+1;

if( jianci1%2==0) shangxian=shangxian+1; if( jianci1%2==1) xiaxian=xiaxian-1; } }

if(keyb==0)

{

DelayMs(50); if(keyb==0) {

jianci2=jianci2+1;

if( jianci2%2==0) shangxian=shangxian-1; if( jianci2%2==1) xiaxian=xiaxian+1; } }

if(num0>=shangxian) { led1=0; }

if(num025

沈阳工学院——信息与控制学院——智能仪器仪表课程论文 led2=0; }

if(xiaxianLCD_Write_Char(1,1,dofly_code[xiaxian/100]); LCD_Write_Char(2,1,dofly_code[(xiaxian%100)/10]); LCD_Write_Char(3,1,dofly_code[(xiaxian%100)%10]); LCD_Write_Char(12,1,dofly_code[shangxian/100]); LCD_Write_Char(13,1,dofly_code[(shangxian%100)/10]); LCD_Write_Char(14,1,dofly_code[(shangxian%100)%10]); } }

void UART_SER (void) interrupt 4 //串行中断服务程序 {

if(RI) //判断是接收中断产生 {

RI=0; //标志位清零 num=SBUF; //读入缓冲区的值 }

if(TI) //如果是发送标志位,清零 TI=0; }

26

因篇幅问题不能全部显示,请点此查看更多更全内容

Top