904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第1页
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第2页
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第3页
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第4页
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计设计 题目:题目: 基于基于 vb6.0vb6.0 的数据采集系统设计的数据采集系统设计 系系 部:部: 电子与通信工程系电子与通信工程系 专专 业:业: 电气工程及其自动化电气工程及其自动化 目目 录录 第一部分 设计说明书 一、设计说明书 第二部分 外文资料翻译 一、外文资料原文 二、外文资料翻译 第三部分 过程管理资料 一、 毕业设计课题任务书 二、 本科毕业设计开题报告 三、 本科毕业设计中期报告 四、 毕业设计指导教师评阅表 五、 毕业设计评阅教师评阅表 六、 毕业设计答辩评审表 基于 vb6.0 的数据采集系统设计 系 (部):电子与通信工程系 专 业:电气工程及其自动化 i

2、摘 要 温度是一种被广泛应用于生产和生活的重要的物理量。针对与不同的应用领域, 生产和研制适当的测温系统是十分必要的。本文设计的是近距离温度检测系统。该系 统涵盖了传感器技术,信息处理技术,计算机通信技术等几个方面的技术。此技术主 要包括:传感器,模数转换,单片机与 pc 机接口,串行通讯,vb 等部分。 整个测温系统以数据采集原理为主要理论依据,将传感器 ds18b20 所测的温度转 换成为电信号,再由单片机对其进行量化编码,转化为十六进制数据,为单片机与微 机进行通讯打下了基础。 根据串行通讯原理,设计了单片机与 pc 机的接口电路,建立了单片机与 pc 机之 间的串行通讯协议,并利用 v

3、b6.0 对测温系统实现了对象化操作将采集到的温度 信号编码进行接受和描述,将其直接显示在可视的界面当中。该测温系统具有实时存 储功能,便于对信号进行分析和处理。在本设计中,我们为了能实现人机的对话及及 时知道系统的运行状况,我们给本系统增加了报警功能。 在对实测信号进行分析的过程中发现,实测信号编码与理论上的信号编码基本呈 线形关系,这说明了系统具有很高的精确度和稳定性。完成了对每个通道的实测信号 编码值与温度的实时曲线的绘制,如果再实现对各个通道建立独立的数据库,即可达 到对每个通道的温度标定的目的。 关键词:温度,编码,单片机,实时曲线,ds18b20,vb6.0 ii abstract

4、 temperature is a very important physical quantity which used in production and life .for the different applications, it is necessary to produce the proper system of measuring temperature. in this article i will discuss the system of measuring close quarters temperature. this system involves sensor

5、technic, information processing technic, communication technic and so on .the design mainly includes the sensor part , analog-digital conversion ,the interface between the microcontroller and pc ,serial communication and so on . the main theoretical base is theory of data collection . the temperatur

6、e signals measured by 18b20 sensors transform to the voltage signals .the single chip transforms the voltage code to 16m code which is the basic of communication .i design the interface circuit between the single chip and pc .the temperature signals are received and described by vb and then displaye

7、d on the screen .all the signals can be real-time memory in order to analyze them . form the result the metrical signals and the theoretical signals have the linearity relation .the result indicates that the has high precision and stability we can draw the curve of temperature value and the code and

8、 establish the database ,form which we can get the real temperature of the different objects. keywords: temperature ,coding ,microcontroller ,current curve,18b20,vb6.0 iii 目 录 摘摘 要要 .i i abstractabstract .iiii 第第 1 1 章章 绪论绪论.1 1 1.1 at89c51 简介 .2 1.2 ds18b20 传感器简介 .5 第第 2 2 章章 系统设计系统设计 .9 9 2.1 功能与设

9、计方案.9 2.1.1 功能要求.9 2.1.2 设计方案.9 2.2 设计中所需要的器件.11 2.3 系统硬件设计 .12 2.4 系统软件设计.13 2.4.1 下位机软件设计.13 2.4.2 上位机软件设计.16 第 3 章 程序设计.19 3.1 下位机程序 .19 3.2 上位机程序 .22 第第 4 4 章章 结论结论 .2525 参考文献参考文献 .2626 iv 致致 谢谢 .2727 附录附录 1 1 下位机程序下位机程序 .2828 附录附录 2 2 上位机程序上位机程序.3434 1 第第 1 1 章章 绪论绪论 随着科学技术的迅猛发展,电子学的发展也越来越快,带动了

10、大批相关产业的发 展,其应用的范围也越来越广泛。如今,计算机的使用领域已经扩展到了各行各业, 甚至介入个人家庭。在这种形式下,对于计算机的认识是势在必得的,而且使用微机 已经成为了当代人的一种基本技能。所以对于我们来说,仅仅会使用微机是远远不够 的,要想适应当今社会的需要,我们就必须能够设计出基于 pc 技术的新的电子仪器, 以满足社会更高层次的需求。 近年来,单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃 兴起,单片机已经渗透到工业,农业,国防,科研及日常生活等各个领域。传统的温 度采集的方法不仅费时,而且精度差,满足不了各行业对于温度数据高精度,设备高 可靠性的需求。单片机

11、的出现使得温度数据的采集和处理得到了很好的解决。选择适 当的单片机和温度传感器及前端处理电路,可以获得较高精度的测量。不但方便快捷, 成本低廉,省事省力,而且大幅度提高了测量精度1。 。 本文介绍了一种利用单片机实现温度数据的采集和处理的一种设计方法。其中涉 及了传感器,数据采集,单片机数据处理,单片机和 pc 机通讯 vb 等一系列相关理论。 本文就如何将温度这一连续的物理量转换成模拟的电压信号,再将电压信号通过单片 机编码转换成数字信号这一过程,进行了阐述和分析。并且增加了报警电路。同时在 通过软件进行温度补偿和数据处理方面,也作为了具体介绍。在硬件电路设计方面, 从电路的简单,可靠数字化

12、,低成本等角度出发,设计者采用了硬件滤波软件补偿两 方面入手,使得设计达到所需精度要求,具有较高的性能价格比。 2 1.1 at89c51 简介 at89c51 是一种带 4k 字节闪烁可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压,高性能 cmos8 位微处理 器,俗称单片机。at89c2051 是一种带 2k 字节闪烁可编程可擦除只读存储器的单片机。 单片机的可擦除只读存储器可以反复擦除 100 次。该器件采用 atmel 高密度非易失存 储器制造技术制造,与工业标准的 mcs-51 指令集和输

13、出管脚相兼容。由于将多功能 8 位 cpu 和闪烁存储器组合在单个芯片中,atmel 的 at89c51 是一种高效微控制器, at89c2051 是它的一种精简版本。at89c51 单片机为很多嵌入式控制系统提供了一种灵 活性高且价廉的方案。 图 1.1 at89c51 管脚图 主要特性: 与 mcs-51 兼容 4k 字节可编程闪烁存储器 寿命:1000 写/擦循环 数据保留时间:10 年 全静态工作:0hz-24hz 三级程序存储器锁定 128*8 位内部 ram 32 可编程 i/o 线 两个 16 位定时器/计数器 3 5 个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器

14、和时钟电路 管脚说明: vcc:供电电压。 gnd:接地。 p0 口:p0 口为一个 8 位漏级开路双向 i/o 口,每脚可吸收 8ttl 门电流。当 p1 口 的管脚第一次写 1 时,被定义为高阻输入。p0 能够用于外部程序数据存储器,它可以 被定义为数据/地址的第八位。在 fiash 编程时,p0 口作为原码输入口,当 fiash 进 行校验时,p0 输出原码,此时 p0 外部必须被拉高。 p1 口:p1 口是一个内部提供上拉电阻的 8 位双向 i/o 口,p1 口缓冲器能接收输出 4ttl 门电流。p1 口管脚写入 1 后,被内部上拉为高,可用作输入,p1 口被外部下拉为 低电平时,将输

15、出电流,这是由于内部上拉的缘故。在 flash 编程和校验时,p1 口作 为第八位地址接收。 p2 口:p2 口为一个内部上拉电阻的 8 位双向 i/o 口,p2 口缓冲器可接收,输出 4 个 ttl 门电流,当 p2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并 因此作为输入时,p2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。 p2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,p2 口输出地址 的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器 进行读写时,p2 口输出其特殊功能寄存器的内容。p2 口在 flash 编程

16、和校验时接收高 八位地址信号和控制信号。 p3 口:p3 口管脚是 8 个带内部上拉电阻的双向 i/o 口,可接收输出 4 个 ttl 门电 流。当 p3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于 外部下拉为低电平,p3 口将输出电流(ill)这是由于上拉的缘故。 p3 口也可作为 at89c51 的一些特殊功能口,如下表所示: 口管脚 备选功能 p3.0 rxd(串行输入口) p3.1 txd(串行输出口) p3.2 /int0(外部中断 0) p3.3 /int1(外部中断 1) p3.4 t0(记时器 0 外部输入) p3.5 t1(记时器 1 外部输入) 4

17、p3.6 /wr(外部数据存储器写选通) p3.7 /rd(外部数据存储器读选通) p3 口同时为闪烁编程和编程校验接收一些控制信号。 rst:复位输入。当振荡器复位器件时,要保持 rst 脚两个机器周期的高电平时间。 ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。 在 flash 编程期间,此引脚用于输入编程脉冲。在平时,ale 端以不变的频率周期输出 正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时 目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ale 脉冲。如想禁 止 ale 的输出可在 sfr8eh 地

18、址上置 0。此时, ale 只有在执行 movx,movc 指令是 ale 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ale 禁止,置位 无效。 /psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周 期两次/psen 有效。但在访问外部数据存储器时,这两次有效的/psen 信号将不出现。 /ea/vpp:当/ea 保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不 管是否有内部程序存储器。注意加密方式 1 时,/ea 将内部锁定为 reset;当/ea 端保 持高电平时,此间内部程序存储器。在 flash 编程期间,此引脚也用于施加

19、 12v 编程 电源(vpp)。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出。 振荡器特性: xtal1 和 xtal2 分别为反向放大器的输入和输出。该反向放大器可以配置为片内振 荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,xtal2 应不接。有 余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何 要求,但必须保证脉冲的高低电平要求的宽度。 芯片擦除: 整个 perom 阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持 ale 管脚处于低电平 10ms 来完成。在芯片擦操作中,代码阵列全被写“1

20、”且在任何非空 存储字节被重复编程以前,该操作必须被执行。 此外,at89c51 设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可 选的掉电模式。在闲置模式下,cpu 停止工作。但 ram,定时器,计数器,串口和中断 系统仍在工作。在掉电模式下,保存 ram 的内容并且冻结振荡器,禁止所用其他芯片 功能,直到下一个硬件复位为止2。 5 1.2 ds18b20 传感器简介 ds18b20 温度传感器是美国 dallas 半导体公司最新推出的一种改进型智能温 度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据 实际要求通过简单的编程实现 912 位的数字值读数

21、方式。ds18b20 的性能特点如下: 独特的单线接口仅需要一个端口引脚进行通信; 多个 ds18b20 可以并联在惟一的三线上,实现多点组网功能; 无须外部器件; 可通过数据线供电,电压范围为 3.05.5; 零待机功耗; 温度以 9 或 12 位数字; 用户可定义报警设置; 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; ds18b20 采用脚 pr35 封装或 8 脚 soic 封装,其内部结构框图如图 1.2 所示。 图 1.2 ds18b20 内部结构图 i/o c 64 位 rom 和 单 线 接

22、 口 高 速 缓 存 存储器与控制逻辑 温度传感器 高温触发器 th 低温触发器 tl 配置寄存器 8 位 crc 发生器 vdd 6 64 位 rom 的结构开始 8 位是产品类型的编号,接着是每个器件的惟一的序号, 共有 48 位,最后 8 位是前面 56 位的 crc 检验码,这也是多个 ds18b20 可以采用一 线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。 ds18b20 温度传感器的内部存储器还包括一个高速暂存和一个非易失性的 可电擦除的 eeram。高速暂存 ram 的结构为 8 字节的存储器,结构如图 1.3 所示。 头 2 个字节包含测得的温度信息,第 3

23、 和第 4 字节 th 和 tl 的拷贝,是易失的,每次 上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转 换分辨率。ds18b20 工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各 位的定义如图 3 所示。低 5 位一直为,是工作模式位,用于设置 ds18b20 在工 作模式还是在测试模式,ds18b20 出厂时该位被设置为 0,用户要去改动,r1 和 r0 决定温度转换的精度位数,来设置分辨率。 tm r1 1r01111 . . . 图 1.3 ds18b20 字节定义 由表 1.1 可见,ds18b20 温度转换的时间比较长,而且分辨率越高,所需要

24、的温 度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。 表 1.1 ds18b20 温度转换时间表 温度 lsb 温度 msb th 用户字 节 1 tl 用户字节 2 配置寄存器 保留 保留 保留 crc r0r1 0 0 0 1 0 1 1 1 9 10 11 12 分辨率/位 温度最大转向时间/ms 93.75 187.5 375 750 . . . 7 高速暂存的第 6、7、8 字节保留未用,表现为全逻辑 1。第 9 字节读出前面 所有字节的 crc 码,可用来检验数据,从而保证通信数据的正确性。 当 ds18b20 接收到温度转换命令后,开始启动转换。转换完成后的

25、温度值就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 1、2 字节。单片机可以通 过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以 0.0625lsb 形 式表示。 当符号位 s=0 时,表示测得的温度值为正值,可以直接将二进制位转换为十进制; 当符号位 s=1 时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数 值。表 2 是一部分温度值对应的二进制温度数据。 表 1.2一部分温度对应值表 温度/二进制表示十六进制表示 +1250000 0111 1101 0000 07d0h +850000 0101 0101 0000 0550h +25.062

26、50000 0001 1001 0000 0191h +10.1250000 0000 1010 0001 00a2h +0.50000 0000 0000 0010 0008h 00000 0000 0000 1000 0000h -0.51111 1111 1111 0000 fff8h -10.1251111 1111 0101 1110 ff5eh -25.06251111 1110 0110 1111 fe6fh -551111 1100 1001 0000 fc90h 8 ds18b20 完成温度转换后,就把测得的温度值与 ram 中的 th、tl 字节内容作比较。 若 tth 或

27、 ttl,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作 出响应。因此,可用多只 ds18b20 同时测量温度并进行报警搜索。 在 64 位 rom 的最高有效字节中存储有循环冗余检验码(crc) 。主机 rom 前 56 位 来计算 crc 值,并和存入 ds18b20 的 crc 值作比较,以判断主机收到的 rom 数据是否 正确。 ds18b20 的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响 很小,用于产生固定频率的脉冲信号送给减法计数器 1;高温度系数晶振随温度变化其 振荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入。器件中还有一个计 数门,

28、当计数门打开时,ds18b20 就对低温度系数振荡器产生的时钟脉冲进行计数进而 完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将 55所对应的一个基数分别置入减法计数器 1、温度寄存器中,计数器 1 和温度寄存 器被预置在55所对应的一个基数值。 减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器 1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法 计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计 数器计数到 0 时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。 其输

29、出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到 温度寄存器值大致被测温度值。 另外,由于 ds18b20 单线通信功能是分时完成的,它有严格的时隙概念,因此读 写时序很重要。系统对 ds18b20 的各种操作按协议进行。操作协议为:初使化 ds18b20(发复位脉冲)发 rom 功能命令发存储器操作命令处理数据3。 9 第第 2 章章 系统设计 2.1 功能与设计方案 2.1.1 功能要求 设计一个基于 visual basic 6.0 的数据采集系统。用单片机系统接收温度传感器的 温度数据,并在数码管上显示当前温度值,可测温范围55-125 摄氏度,精度 0.1 摄

30、氏度。 使用 vb6.0 编写上位机程序,接收温度数据并储存在数据库中;接收数据时,要 求能同步画出温度变化的曲线;要求系统可查询历史温度信息。 基于 vb6.0 的数据采集系统在设计时主要应该满足如下功能指标: 1测量温度,并在数码管上显示当前温度值; 2可测温范围55-125 摄氏度,精度 0.1 摄氏度; 3每秒给上位机传送一次温度数据; 4上位机接收温度数据,并将数据、接收数据时间以及测温批次等信息存储到数 据库中; 5测温批次可以自动生成也可手动输入; 6接收温度数据时,同步画出温度变化的曲线; 7可按批次以及测温时间查询温度数据; 8将上位机软件打包,生成安装文件。 2.1.2 设

31、计方案 方案论证 方案一: 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随 10 被测温度变化的电压或电流采集过来,进行 a/d 转换后,就可以用单片机进行数据的 处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 a/d 转换电路, 感温电路比较麻烦。 方案二 : 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是 非常容易想到的,所以可以采用一只温度传感器 ds18b20,此传感器,可以很容易直接 读取被测温度值,进行转换,就可以满足设计要求。 从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单

32、, 故采用了方案二。 总体设计框图 温度计电路设计总体设计方框图如图 1 所示,控制器采用单片机 at89c51,温度 传感器采用 ds18b20,用 8 位 led 数码管以串口传送数据实现温度显示并通过串口与 上位机 pc 通讯,把数据传送给上位机,并用 vb 编写的图形界面把温度的变化曲线显 示出来,并通过数据库存储,可查询历史温度记录。 图 2.1 总体设计框图 主控制器 单片机 at89c51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满 足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。 显示电路 显示电路采用 8 位共阳极 le

33、d 数码管,从 p0 口输出段码,p2 口为 led 的位选信 号。 单片机 led 显 示温 度 传 感 器 复位电路 时钟振荡 蜂鸣器 p c 11 温度传感器 采用 ds18b20 温度传感器,它能直接读出被测温度,并且可根据实际要求通过简 单的编程实现 912 位的数字值读数方式。 pc 实时显示界面 显示实时温度数据变化曲线的界面,采用 vb6.0 编辑,在程序使用 vb6.0 的通用 串口控件 mscomm 来对发送到串口的数据进行采集处理。上下位机定义好通信协议和波 特率。 2.2 设计中所需要的器件 1、 单片机:at89c51 一块; 2、 温度传感器:ds18b20 一块;

34、 3、8位共阳极数码管 一块; 4、 30pf电容一个,开关一个,蜂鸣器一个; 5、 10k电阻 2个、5k的电阻排; 6、 串行通信线。 12 2.3 系统硬件设计 系统整体硬件电路包括,传感器数据采集电路,温度显示电路,报警电路,单片 机主板电路等,如图 2.2 所示。 13 图 2.2 设计原理图 温度传感器的数据线接单片机的 p3.3 口,单片机通过反复读写 p3.3 口的状态采集 数据,不过硬件简单,软件肯定复杂,读写时都有严格的时序要求。 显示电路采用 8 个共阳极的 led 显示,显示代码由 p0 口发送,当使用 p0 口时需 要接上拉电阻,p2 口的逻辑状态作位选线信号,达到分

35、时选通的目的,当相应口为高 电平时 led 才能显示相应代码。实际使用中只用到七个 led,最后 2 个用来显示摄氏 度符号,第二个用来显示温度的正负,当温度为负时,显示“”号,为正时不显示, 同样由软件可以实现,当百位为零时,百位不显示,百位十位为零时,百位十位都不 显示,这样设计方便观察,更加直观。 此外还接有蜂鸣器,当 ds18b20 不能正常工作时可以达到报警的目的。最后还要 实现单片机与上位机通信的功能,所以要连接好串口,以便能向上位机发送或接受数 据。 按健复位电路是最简单的手动复位,使用比较方便,在程序跑飞时,可以手动复 位,这样就不用在重起单片机电源,就可以实现复位。 2.4

36、系统软件设计 2.4.1 下位机软件设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子 程序,显示数据刷新子程序等。 主程序 主程序的主要功能是负责温度的实时显示、读出并处理 ds18b20 的测量的当前温 度值,温度测量每 1s 进行一次。这样可以在一秒之内测量一次被测温度,其程序流程 见图 2.3 所示。 14 图 2.3 主程序流程图 图 2.4 读温度流程图 读出温度子程序 读出温度子程序的主要功能是读出 ram 中的 9 字节,在读出时需进行 crc 校验, 校验有错时不进行温度数据的改写。其程序流程图如图 2.4 所示。 2

37、.4.1.3 计算温度子程序 初始化 调用显示子程序 1s 到? 初次上电 读出温度值温 度计算处理显 示数据刷新 发温度转换开始命令 的法国风格 法国 n y n y y 发 ds18b20 复位命令 发跳过 rom 命令 发读取温度命令 读取操作,crc 校验 9 字节完? crc 校验正? 确? 移入温度暂存器 结束 n n y 15 发 ds18b20 复位命 令 发跳过 rom 命令 发温度转换开始命令 结束 计算温度子程序将 ram 中读取值进行转换运算,并进行温度值正负的判定,其程 序流程图如图 2.5 所示。 图 2.5 计算温度流程图 图 2.6 温度转换流程图 2.4.1.

38、4 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令,当采用 12 位分辨率时转换时间 约为 750ms,在本程序设计中采用 1s 显示程序延时法等待转换的完成,如图 2.6 所示。 .1.5 显示数据刷新子程序 显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为 0 时 将符号显示位移入下一位。程序流程图如图 2.7 所示。 开始 温度零下? 温度值取补码置“” 标志 计算小数位温度值 计算整数位温度值 结束 置“+”标 志 n y 温度数据移入显示寄存器 十位数 0? 百位数 0? 十位数显示符号百 位数不显示 百位数显示数据 (不显示

39、符号) 结束 n n y y 16 图 2.7 显示数据刷新流程图 2.4.2 上位机软件设计 上位机是应用 vb 进行编写的,它把下位机传送上来是两字节的十六进制数据进 行解码显示出来。 当点击采集温度时,上位机向下位机发送采集温度命令字符“1” ,当下位机接受 到命令时,向上位机发送数据。 使用 vb6.0 编写上位机程序,接收温度数据并储存在数据库中;接收数据时,能 同步画出温度变化的曲线,系统可查询历史温度信息。 具体在上下位机程序里面体现出来。下图 2.8 为上位机工作流程图。 17 图 2.8 上位机工作流程图 数据采集实时显示程序设计思路: 本程序使用 vb6.0 的通用串口控件

40、 mscomm 来对发送到串口的数据进行采集处 理。vb6.0 的 mscomm 通信控件提供了一系列标准通信命令的接口,它允许建立串口 连接,可以连接到其他通信设备(如 modem) 还可以发送命令、进行数据交换以及 监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事 件驱动的、高效实用的通信程序。一般说来,计算机都有一个或多个串行端口,它们 依次为 com1、com2、,这些串口还提供了外部设备与 pc 进行数据传输和通信的 通道。这些串口在 cpu 和外设之间充当解释器的角色。 基本属性与描述如下: 属性 描述 commport 设置或返回通信端口号 setti

41、ngs 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位 portopen 设置或返回通信端口的状态。也可以打开和关闭端口 input 返回和删除接收缓冲区中的字符 18 output 将字符串写入发送缓冲区 commevent 属性为通信事件或错误返回下列值之一,在该控件的对象库中也可以 找到这些常量。 你只首先要确定一个 mscomm 控件在 system 目录下并且该控件已经被 windows 注 册,程序才能正常运行。 有数据向串口发过来时,程序可以将数据接收到,接收的数据是字符型的,那么将数据 转化为数字型的,再将这个数据的大小作为画图的某一个点的纵坐标,横坐标为数据的序 号

42、.将这些点用线连起来就是一个曲线图了,这个就是图形显示基本原理。查看原来的数 据的原理也是这样的,不同的地方就是,数据是从文件中来,同样的也是将多个数据分成一 个一个的,然后这一个数据的大小就是画图的某一个点的纵坐标,横坐标同样为数据的序 号,再将这些点用线连起来就是曲线图。图形能移动的原理,是我们首先改变的只是数据, 图形并没有变,但图形的形式是由这些数据来确定的,当数据发生变化后,我们通过刷新显 示区来变化的。vb 编写的实时显示界面如图 2.9 所示,点击查询可查询历史温度信息。 19 图 2.9 实时温度曲线显示及查询图 串口的波特率,串口号都采用下拉选择的方式,在使用中可跟据情况选择

43、读串口 数据的原理是,只要当有数据向串口发数据来时,计算机就会自动将其数据写到一个特定 的缓冲区,我们只要写程序去读那个特定的缓冲区就可以了。 此外为了保存和查询历史温度数据还要在 vb 中设计建立连接到 access 数据库的 控件,data 控件是 visual basic 6.0 中的一个内置数据控件,可以通过设置 data 控件 的 connect、databasename、recordsource 属性实现对数据库的连接和访问。建立 的数据库库文件和 vb 中创建的工程文件必须放在放在同一目录下5。 第第 3 章章 程序设计程序设计 3.1 下位机程序 下位机程序的编写主要使用 c

44、语言进行编写,可读性要比汇编语言好很多。其中 包括 ds18b20 的测温模块,显示模块和串口通信模块,当上位机向下位机发送读温度 指令时,单片机才会将所测得的数据传给上位机。温度采集系统的主程序设计如下: void main(void) 20 uchar receive; init(); while(1) read_temperature(); if (flash=0) disp_temperature(); else p2 = 0 x00; if (ri) ri = 0; receive = sbuf; if (receive = s) send_char(); 主程序为一无限循环,单片机

45、不断从 ds18b20 的数据口采集数据信号,用 flash 标志 ds18b20 是否正常,当 flash=1 时表示 ds18b20 不正常,就由软件设置及时关闭 led 显示并由蜂鸣器报警。当一帧数据采集完毕即 ri 接受中断标志位为 1,判断下位 机是否接受到来自上位机的字符“1”对应的 asc 码 49 时接收到时才开始将采集到的 数据发送给上位机进行处理,ri 标志位必须由软件清零。 在串口通信模块中,baudrate 的在程序初始化时已经定义为 9600b/s,晶振频率也 已设定好。 波特率的产生用定时器产生,在设置时选择定时器 1,并将它的设为工作方式 2,8 位的常数自动重新

46、装载的定时器,这种工作方式可以省去用户软件中重装初值的 程序,简化定时初值的计算方法,可以相当精确的确定定时时间。计算出定时器的初 21 值之后,在设定串行口的工作方式,在这里令 scon=0x50,即 scon 各位中,sm0=0,sm1=1,ren=1,其他控制字为 0,选择为工 作方式 1,8 位异步收发。令 tcon 中的 tr1=1,启动定时器,并禁止其他中断。程 序设计内容如下所示: void init(void) ea = 1; tmod = 0 x20; th1=(unsigned char)(256 - (xtal / (32l * 12l * baudrate); tl1=

47、(unsigned char)(256 - (xtal / (32l * 12l * baudrate); scon = 0 x50; pcon tr1 = 1; ie = 0 x00; 此外,在显示模块中,小数位的转化才用了一定的技巧,由于实际显示中只要求 显示一位小数,而 ds18b20 每一位的转化温度为 0.0625lsb,当每一位变化时, 第一位小数只有 16 种状态,我们只需一一算出放在一个数组中,通过查表指令即可获 取第一位小数的十进制值。由于每一位变化为 0.0625lsb,通过移位操作,即可获 得一个新的关于温度整数部分的数据,部分设计显示转化程序如下: display4=t

48、emp_data0 display0=ditabdisplay4; display4=(temp_data0 temp_data1=!( temp_data1) temp_data0=!( temp_data0); temp_data0= temp_data0+1; if(temp_data0=0) temp_data1= temp_data1+1; else flag_zf=0 其中 temp_data1 为温度数据的高八位,temp_data0为温度数据的低八位, flag_zf=1 表示温度为负,进行相应转化再执行上面的显示转化程序,为正则直接执行 显示转化程序里的内容。 其他延时子程序

49、以及 ds18b20 的读写子程序,可见附录 1 的完整的 ds18b20 温 度采集系统程序设计,在这里不做详细介绍了。 3.2 上位机程序 在上位机 vb 程序的编写中,最重要的是串口的初始化程序和接收触发程序的设 计。本程序使用 vb6.0 的通用串口控件 mscomm 来对发送到串口的数据进行采集处 理。主要使用方法如下: 串口设置:mscomm.setsettings(“波特率,校验方式,数据位数,停止位数”) 串口数据:mscomm. inputmode(输入模式设定) 其具体程序设计如下: private sub form_load() 23 on error goto err:

50、 mscomm1.commport = 1 mscomm1.inputmode = cominputmodebinary mscomm1.rthreshold = 1 mscomm1.sthreshold = 1 mscomm1.settings = 9600,n,8,2 call tabinit call scalesys if mscomm1.portopen = false then mscomm1.portopen = true mark = true cmdstop.enabled = false exit sub err: select case err.number case c

51、omportalreadyopen msgbox 没有发现此串口或被占用, 49, 温度采集系统 case else msgbox 没有发现此串口或被占用, 49, 温度采集系统 end select err.clear end sub 在 vb 程序中设置为串口 1,输入模式为二进制,且接收和发送一个字符就会触发 mscomm1 的 oncomm 接收触发事件。波特率设置为 9600,可以根据具体设计情况更 改波特率的大小,但要与下位机的一致。程序中还编写了错误处理程序,当串口被占 用时会转去执行 err 程序,出现系统报错。 24 接收触发事件的处理,当每发送一次指令时,就会触发 onco

52、mm 事件,并返回数 据串,通过计算获取温度测量值并显示出来,具体设计程序如下: private sub mscomm1_oncomm() dim inbyte() as byte dim buffer as string dim datatemp2a, datatemp2b as string dim datatemp2 as string dim count as integer 读取仪表返回数据串 select case mscomm1.commevent case comevreceive count = mscomm1.inbuffercount inbyte = mscomm1.i

53、nput if count 2 then exit sub counter = counter + 1 for i = lbound(inbyte) to ubound(inbyte) buffer = buffer + hex(inbyte(i) next i end select 程序中,接收到的数据暂存在 inbyte()中,buffer 为温度数据缓存,接收到的数 据按 16 进制的格式放入缓冲中,便于之后的数据处理。此外程序还添加了接收温度数 据的判定,接收到的温度数据应为两字节,且低位在前,当接收到的数据不是两字节 时,表示接收错误,跳出此程序。 为了在 vb 界面能够显示当前的温

54、度值,需要将采集的两字节温度数据转化为十 进制测量数据,转化程序如下: if len(trim(mid(buffer, 1, 2) = 1 then datatemp(num) = val( / 定义 ds18b20 端口 dq sbit beep = p37; unsigned char presence ; unsigned char code leddata1 =0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10,0 xff; unsigned char code leddata = 0 xc0,0 xf9,0 xa4,

55、0 xb0,0 x99,0 x92,0 x82,0 xf8, 0 x80,0 x90,0 xff; unsigned char data temp_data2 = 0 x00,0 x00; unsigned char data display5 = 0 x00,0 x00,0 x00,0 x00,0 x00; unsigned char code ditab16 = 0 x00,0 x01,0 x01,0 x02,0 x03,0 x03,0 x04,0 x04, 0 x05,0 x06,0 x06,0 x07,0 x08,0 x08,0 x09,0 x09; void beep(); sbit

56、 din = p07; / 小数点 bit flash=0; / 显示开关标记 bit flag_zf=0; / 正负温度标志 /*/ void delay(unsigned int num)/ 延时函数 while( -num ); /*/ uchar init_ds18b20(void) / 初始化 ds1820 长沙学院毕业设计 30 dq = 1; / dq 复位 delay(8); / 稍做延时 dq = 0; / 单片机将 dq 拉低 delay(90); / 精确延时 大于 480us dq = 1; / 拉高总线 delay(8); presence = dq; / 如果=0

57、则初始化成功 =1 则初始化失败 delay(100); dq = 1; return(presence); / 返回信号,0=presence,1= no presence /*/ uchar readonechar(void) / 读一个字节 unsigned char i = 0; unsigned char dat = 0; for (i = 8; i 0; i-) dq = 0; / 给脉冲信号 dat = 1; dq = 1; / 给脉冲信号 if(dq) dat |= 0 x80; delay(4); return (dat); /*/ void writeonechar(uns

58、igned char dat)/ 写一个字节 unsigned char i = 0; for (i = 8; i 0; i-) 长沙学院毕业设计 31 dq = 0; dq = dat delay(5); dq = 1; dat=1; /*/ void read_temperature(void)/ 读取温度 init_ds18b20(); if(presence=1) beep(); flash=1; / ds18b20 不正常,蜂鸣器报警 else flash=0; writeonechar(0 xcc); / 跳过读序号列号的操作 writeonechar(0 x44); / 启动温度

59、转换 init_ds18b20(); writeonechar(0 xcc); / 跳过读序号列号的操作 writeonechar(0 xbe); / 读取温度寄存器 temp_data0 = readonechar(); / 温度低 8 位 temp_data1 = readonechar(); / 温度高 8 位 /*/ void disp_temperature()/ 显示温度 unsigned char n=0; if(temp_data17) /当温度高八位中的高五位全为 o flag_zf=1; / 所测温度为负时,要进行转换 temp_data1=!( temp_data1);

60、temp_data0=!( temp_data0); temp_data0= temp_data0+1; 长沙学院毕业设计 32 if(temp_data0=0) temp_data1= temp_data1+1; else flag_zf=0 /判断测得的温度数据是正还是负,如果为正,不做任何 /理 display4=temp_data0 display0=ditabdisplay4; / 查表得小数位的值 display4=(temp_data0 display3=display4/100; display1=display4%100; display2=display1/10; disp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论