904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)

上传人:仙*** 文档编号:30074806 上传时间:2021-10-09 格式:DOC 页数:82 大小:979.50KB
收藏 版权申诉 举报 下载
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第1页
第1页 / 共82页
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第2页
第2页 / 共82页
904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)_第3页
第3页 / 共82页
资源描述:

《904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)》由会员分享,可在线阅读,更多相关《904953410基于VB6.0的温度数据采集系统毕业设计论文(单片机控制)(82页珍藏版)》请在装配图网上搜索。

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

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

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

4、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 technic, information processing te

5、chnic, 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 temperature signals measured by 18B20 sensors

6、 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 displayed on the screen .All the signals ca

7、n 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 establish the database ,form which

8、we can get the real temperature of the different objects. Keywords: temperature ,coding ,microcontroller ,current curve,18B20,vb6.0 III目 录摘摘 要要 .I IABSTRACTABSTRACT .IIII第第 1 1 章章 绪论绪论.1 11.1 AT89C51 简介 .21.2 DS18B20 传感器简介 .5第第 2 2 章章 系统设计系统设计 .9 92.1 功能与设计方案.92.1.1 功能要求.92.1.2 设计方案.92.2 设计中所需要的器件.1

9、12.3 系统硬件设计 .122.4 系统软件设计.132.4.1 下位机软件设计.132.4.2 上位机软件设计.16第 3 章 程序设计.193.1 下位机程序 .193.2 上位机程序 .22第第 4 4 章章 结论结论 .2525参考文献参考文献 .2626IV致致 谢谢 .2727附录附录 1 1 下位机程序下位机程序 .2828附录附录 2 2 上位机程序上位机程序.3434 1第第 1 1 章章 绪论绪论随着科学技术的迅猛发展,电子学的发展也越来越快,带动了大批相关产业的发展,其应用的范围也越来越广泛。如今,计算机的使用领域已经扩展到了各行各业,甚至介入个人家庭。在这种形式下,对

10、于计算机的认识是势在必得的,而且使用微机已经成为了当代人的一种基本技能。所以对于我们来说,仅仅会使用微机是远远不够的,要想适应当今社会的需要,我们就必须能够设计出基于 PC 技术的新的电子仪器,以满足社会更高层次的需求。近年来,单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机已经渗透到工业,农业,国防,科研及日常生活等各个领域。传统的温度采集的方法不仅费时,而且精度差,满足不了各行业对于温度数据高精度,设备高可靠性的需求。单片机的出现使得温度数据的采集和处理得到了很好的解决。选择适当的单片机和温度传感器及前端处理电路,可以获得较高精度的测量。不但方便快捷,成本低廉,省

11、事省力,而且大幅度提高了测量精度1。本文介绍了一种利用单片机实现温度数据的采集和处理的一种设计方法。其中涉及了传感器,数据采集,单片机数据处理,单片机和 PC 机通讯 VB 等一系列相关理论。本文就如何将温度这一连续的物理量转换成模拟的电压信号,再将电压信号通过单片机编码转换成数字信号这一过程,进行了阐述和分析。并且增加了报警电路。同时在通过软件进行温度补偿和数据处理方面,也作为了具体介绍。在硬件电路设计方面,从电路的简单,可靠数字化,低成本等角度出发,设计者采用了硬件滤波软件补偿两方面入手,使得设计达到所需精度要求,具有较高的性能价格比。21.1 AT89C51 简介AT89C51 是一种带

12、 4K 字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。AT89C2051 是一种带 2K 字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 100 次。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,AT89C2051 是它的一种精简版本。AT89C5

13、1 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 图 1.1 AT89C51 管脚图主要特性:与 MCS-51 兼容 4K 字节可编程闪烁存储器 寿命:1000 写/擦循环数据保留时间:10 年全静态工作:0Hz-24Hz三级程序存储器锁定128*8 位内部 RAM32 可编程 I/O 线两个 16 位定时器/计数器35 个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 管脚说明: VCC:供电电压。 GND:接地。 P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0

14、 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。 P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4个 TTL 门电流,当 P2

15、口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为

16、低电平,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 外部输入)4P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地

17、址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访

18、问外部数据存储器时,这两次有效的/PSEN 信号将不出现。 /EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。振荡器特性: XTAL1 和 XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱

19、动器件,XTAL2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。芯片擦除: 整个 PEROM 阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持 ALE管脚处于低电平 10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51 设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU 停止工作。但 RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存 RAM 的内容并且冻结振荡器,禁止

20、所用其他芯片功能,直到下一个硬件复位为止2。51.2 DS18B20 传感器简介 DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。DS18B20 的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个 DS18B20 可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为 3.05.5;零待机功耗;温度以 9 或 12 位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报

21、警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20 采用脚 PR35 封装或 8 脚 SOIC 封装,其内部结构框图如图 1.2 所示。 图 1.2 DS18B20 内部结构图I/OC64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器 TH低温触发器 TL配置寄存器8 位 CRC 发生器Vdd664 位 ROM 的结构开始 8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最后 8 位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户

22、报警上下限。DS18B20 温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的 EERAM。高速暂存 RAM 的结构为 8 字节的存储器,结构如图 1.3 所示。头 2 个字节包含测得的温度信息,第 3 和第 4 字节 TH 和 TL 的拷贝,是易失的,每次上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图 3 所示。低 5 位一直为,是工作模式位,用于设置 DS18B20 在工作模式还是在测试模式,DS18B20 出厂时该位被设置为 0,用户要去改动,R1

23、 和 R0决定温度转换的精度位数,来设置分辨率。TM R11R01111.图 1.3 DS18B20 字节定义由表 1.1 可见,DS18B20 温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。 表 1.1 DS18B20 温度转换时间表温度 LSB温度 MSBTH 用户字节 1TL 用户字节2配置寄存器保留保留保留CRCR0R1000101119101112分辨率/位 温度最大转向时间/ms93.75187.5375750.7高速暂存的第 6、7、8 字节保留未用,表现为全逻辑 1。第 9 字节读出前面所有字节的 CRC 码

24、,可用来检验数据,从而保证通信数据的正确性。当 DS18B20 接收到温度转换命令后,开始启动转换。转换完成后的温度值就以 16位带符号扩展的二进制补码形式存储在高速暂存存储器的第 1、2 字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以 0.0625LSB 形式表示。当符号位 S=0 时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位 S=1 时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表 2 是一部分温度值对应的二进制温度数据。表 1.2一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101

25、000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H8DS18B20 完成温度转换后,就把测得的温度值与 RAM

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

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

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

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

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

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

32、ED 显 示温 度 传 感 器复位电路时钟振荡蜂鸣器P C11温度传感器采用 DS18B20 温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。PC 实时显示界面显示实时温度数据变化曲线的界面,采用 VB6.0 编辑,在程序使用 VB6.0 的通用串口控件 MSCOMM 来对发送到串口的数据进行采集处理。上下位机定义好通信协议和波特率。2.2 设计中所需要的器件1、 单片机:AT89C51 一块;2、 温度传感器:DS18B20 一块;3、8位共阳极数码管 一块;4、 30PF电容一个,开关一个,蜂鸣器一个;5、 10K电阻 2个、5K的电阻排

33、;6、 串行通信线。122.3 系统硬件设计系统整体硬件电路包括,传感器数据采集电路,温度显示电路,报警电路,单片机主板电路等,如图 2.2 所示。13 图 2.2 设计原理图温度传感器的数据线接单片机的 P3.3 口,单片机通过反复读写 P3.3 口的状态采集数据,不过硬件简单,软件肯定复杂,读写时都有严格的时序要求。显示电路采用 8 个共阳极的 LED 显示,显示代码由 P0 口发送,当使用 P0 口时需要接上拉电阻,P2 口的逻辑状态作位选线信号,达到分时选通的目的,当相应口为高电平时 LED 才能显示相应代码。实际使用中只用到七个 LED,最后 2 个用来显示摄氏度符号,第二个用来显示

34、温度的正负,当温度为负时,显示“”号,为正时不显示,同样由软件可以实现,当百位为零时,百位不显示,百位十位为零时,百位十位都不显示,这样设计方便观察,更加直观。此外还接有蜂鸣器,当 DS18B20 不能正常工作时可以达到报警的目的。最后还要实现单片机与上位机通信的功能,所以要连接好串口,以便能向上位机发送或接受数据。按健复位电路是最简单的手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。2.4 系统软件设计2.4.1 下位机软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。2.4.1.1 主程

35、序主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量的当前温度值,温度测量每 1s 进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图 2.3 所示。14 图 2.3 主程序流程图 图 2.4 读温度流程图 2.4.1.2 读出温度子程序读出温度子程序的主要功能是读出 RAM 中的 9 字节,在读出时需进行 CRC 校验,校验有错时不进行温度数据的改写。其程序流程图如图 2.4 所示。2.4.1.3 计算温度子程序初始化调用显示子程序1S 到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令的法国风格 法国 NYNYY发 DS18B20 复位命令发跳

36、过 ROM 命令发读取温度命令读取操作,CRC 校验9 字节完?CRC 校验正?确?移入温度暂存器结束NNY15发 DS18B20 复位命令发跳过 ROM 命令发温度转换开始命令 结束计算温度子程序将 RAM 中读取值进行转换运算,并进行温度值正负的判定,其程序流程图如图 2.5 所示。图 2.5 计算温度流程图 图 2.6 温度转换流程图 2.4.1.4 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用 12 位分辨率时转换时间约为 750ms,在本程序设计中采用 1s 显示程序延时法等待转换的完成,如图 2.6 所示。2.4.2.4.1.5 显示数据刷新子程序显示数据刷

37、新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为 0 时将符号显示位移入下一位。程序流程图如图 2.7 所示。 开始温度零下?温度值取补码置“”标志计算小数位温度值 计算整数位温度值 结束置“+”标志NY温度数据移入显示寄存器十位数 0?百位数 0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY16图 2.7 显示数据刷新流程图 2.4.2 上位机软件设计上位机是应用 VB 进行编写的,它把下位机传送上来是两字节的十六进制数据进行解码显示出来。当点击采集温度时,上位机向下位机发送采集温度命令字符“1” ,当下位机接受到命令时,向上位机发送数据。使用 VB

38、6.0 编写上位机程序,接收温度数据并储存在数据库中;接收数据时,能同步画出温度变化的曲线,系统可查询历史温度信息。具体在上下位机程序里面体现出来。下图 2.8 为上位机工作流程图。17图 2.8 上位机工作流程图数据采集实时显示程序设计思路:本程序使用 VB6.0 的通用串口控件 MSComm 来对发送到串口的数据进行采集处理。VB6.0 的 MSComm 通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如 Modem) 还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序

39、。一般说来,计算机都有一个或多个串行端口,它们依次为 Com1、Com2、,这些串口还提供了外部设备与 PC 进行数据传输和通信的通道。这些串口在 CPU 和外设之间充当解释器的角色。基本属性与描述如下:属性 描述CommPort 设置或返回通信端口号Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位PortOpen 设置或返回通信端口的状态。也可以打开和关闭端口Input 返回和删除接收缓冲区中的字符18Output 将字符串写入发送缓冲区 CommEvent 属性为通信事件或错误返回下列值之一,在该控件的对象库中也可以找到这些常量。你只首先要确定一个 mscomm

40、控件在 system 目录下并且该控件已经被 windows 注册,程序才能正常运行。有数据向串口发过来时,程序可以将数据接收到,接收的数据是字符型的,那么将数据转化为数字型的,再将这个数据的大小作为画图的某一个点的纵坐标,横坐标为数据的序号.将这些点用线连起来就是一个曲线图了,这个就是图形显示基本原理。查看原来的数据的原理也是这样的,不同的地方就是,数据是从文件中来,同样的也是将多个数据分成一个一个的,然后这一个数据的大小就是画图的某一个点的纵坐标,横坐标同样为数据的序号,再将这些点用线连起来就是曲线图。图形能移动的原理,是我们首先改变的只是数据,图形并没有变,但图形的形式是由这些数据来确定

41、的,当数据发生变化后,我们通过刷新显示区来变化的。VB 编写的实时显示界面如图 2.9 所示,点击查询可查询历史温度信息。19图 2.9 实时温度曲线显示及查询图串口的波特率,串口号都采用下拉选择的方式,在使用中可跟据情况选择读串口数据的原理是,只要当有数据向串口发数据来时,计算机就会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特定的缓冲区就可以了。此外为了保存和查询历史温度数据还要在 VB 中设计建立连接到 Access 数据库的控件,Data 控件是 Visual Basic 6.0 中的一个内置数据控件,可以通过设置 Data 控件的 connect、DatabaseName

42、、RecordSource 属性实现对数据库的连接和访问。建立的数据库库文件和 VB 中创建的工程文件必须放在放在同一目录下5。第第 3 章章 程序设计程序设计3.1 下位机程序下位机程序的编写主要使用 C 语言进行编写,可读性要比汇编语言好很多。其中包括 DS18B20 的测温模块,显示模块和串口通信模块,当上位机向下位机发送读温度指令时,单片机才会将所测得的数据传给上位机。温度采集系统的主程序设计如下:void main(void)20uchar receive; init(); while(1) Read_Temperature(); if (flash=0) Disp_Temperat

43、ure(); else P2 = 0 x00; if (RI) RI = 0;receive = SBUF;if (receive = s) send_char(); 主程序为一无限循环,单片机不断从 DS18B20 的数据口采集数据信号,用 flash标志 DS18B20 是否正常,当 flash=1 时表示 DS18B20 不正常,就由软件设置及时关闭LED 显示并由蜂鸣器报警。当一帧数据采集完毕即 RI 接受中断标志位为 1,判断下位机是否接受到来自上位机的字符“1”对应的 ASC 码 49 时接收到时才开始将采集到的数据发送给上位机进行处理,RI 标志位必须由软件清零。在串口通信模块中

44、,baudrate 的在程序初始化时已经定义为 9600b/s,晶振频率也已设定好。波特率的产生用定时器产生,在设置时选择定时器 1,并将它的设为工作方式2,8 位的常数自动重新装载的定时器,这种工作方式可以省去用户软件中重装初值的程序,简化定时初值的计算方法,可以相当精确的确定定时时间。计算出定时器的初21值之后,在设定串行口的工作方式,在这里令SCON=0X50,即 SCON 各位中,SM0=0,SM1=1,REN=1,其他控制字为 0,选择为工作方式 1,8 位异步收发。令 TCON 中的 TR1=1,启动定时器,并禁止其他中断。程序设计内容如下所示:void init(void)EA

45、= 1; TMOD = 0 x20;TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate);TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate); SCON = 0 x50;PCON &= 0 x00;TR1 = 1;IE = 0 x00;此外,在显示模块中,小数位的转化才用了一定的技巧,由于实际显示中只要求显示一位小数,而 DS18B20 每一位的转化温度为 0.0625LSB,当每一位变化时,第一位小数只有 16 种状态,我们只需一一算出放在一个数组中,通过查表指令即可获取

46、第一位小数的十进制值。由于每一位变化为 0.0625LSB,通过移位操作,即可获得一个新的关于温度整数部分的数据,部分设计显示转化程序如下:display4=temp_data0&0 x0f;display0=ditabdisplay4; display4=(temp_data0&0 xf0)4)|(temp_data1&0 x0f)7) flag_zf=1; temp_data1=!( temp_data1) temp_data0=!( temp_data0);temp_data0= temp_data0+1;if(temp_data0=0) temp_data1= temp_data1+1

47、;Else flag_zf=0 其中 temp_data1 为温度数据的高八位,temp_data0为温度数据的低八位,flag_zf=1 表示温度为负,进行相应转化再执行上面的显示转化程序,为正则直接执行显示转化程序里的内容。其他延时子程序以及 DS18B20 的读写子程序,可见附录 1 的完整的 DS18B20 温度采集系统程序设计,在这里不做详细介绍了。3.2 上位机程序 在上位机 VB 程序的编写中,最重要的是串口的初始化程序和接收触发程序的设计。本程序使用 VB6.0 的通用串口控件 MSComm 来对发送到串口的数据进行采集处理。主要使用方法如下:串口设置:MSComm.SetSe

48、ttings(“波特率,校验方式,数据位数,停止位数”)串口数据:MSComm. InputMode(输入模式设定)其具体程序设计如下:Private Sub Form_Load()23On Error GoTo err: 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 = Fal

49、se Then MSComm1.PortOpen = True mark = True CmdStop.Enabled = False Exit Suberr: Select Case err.Number Case comPortAlreadyOpen MsgBox 没有发现此串口或被占用, 49, 温度采集系统 Case Else MsgBox 没有发现此串口或被占用, 49, 温度采集系统 End Select err.Clear End Sub在 VB 程序中设置为串口 1,输入模式为二进制,且接收和发送一个字符就会触发MSComm1 的 OnComm 接收触发事件。波特率设置为 96

50、00,可以根据具体设计情况更改波特率的大小,但要与下位机的一致。程序中还编写了错误处理程序,当串口被占用时会转去执行 err 程序,出现系统报错。24接收触发事件的处理,当每发送一次指令时,就会触发 OnComm 事件,并返回数据串,通过计算获取温度测量值并显示出来,具体设计程序如下: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 读取仪表

51、返回数据串 Select Case MSComm1.CommEvent Case comEvReceive count = MSComm1.InBufferCount Inbyte = MSComm1.Input 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 进制的格式放

52、入缓冲中,便于之后的数据处理。此外程序还添加了接收温度数据的判定,接收到的温度数据应为两字节,且低位在前,当接收到的数据不是两字节时,表示接收错误,跳出此程序。为了在 VB 界面能够显示当前的温度值,需要将采集的两字节温度数据转化为十进制测量数据,转化程序如下:If Len(Trim(Mid(buffer, 1, 2) = 1 Then datatemp(num) = Val(&H & Mid(buffer, 3, 3) & Str(0) & Mid(buffer, 1, 2) * 0.062525 Elsedatatemp(num) = Val(&H & Mid(buffer, 3, 3)

53、& Mid(buffer, 1, 2) * 0.0625 End If 保存数据 Data_save (datatemp(num)此外,本 VB 程序还做了一定的功能扩展,能够显示历史温度的最大值和最小值以及平均值,还可通过下拉方式选择合适的波特率、串口和采样间隔时间。采集的温度数据还通过 Data 控件存入数据库中。在设计过程中可以用虚拟串口和串口调试助手对所设计的 VB 程序进行仿真,看是否达到设计要求。整个 VB 界面及数据库程序的编写见附录 2 所示。第第 4 4 章章 结论结论 随着科技的发展,在各个领域都要用到数据采集系统,其中就包括最普遍的温度的数据采集。传统的温度采集方法费时且

54、精度较差,而如今各个行业对温度数据的要求越来越高,如科研实验室,因此新型的数字温度计大量出现,其中最普遍的是使用传感器和单片机组成采集电路就可以 获得较高的精度要求。在这种背景下,选择基于 VB6.0 的数据采集系统这个课题具有很大的现实意义,用 VB 编写上位机程序,在 PC 上通过图形界面就能控制下位机即单片机采集温度数据信号,设计直观大方,使用 DS18B20 高灵敏度的温度传感器采集温度数据,再用26AT89C51 处理数据,由 7 位共阳极的 LED 数码管显示当前温度,并且可以通过串口向上位机传送数据,显示实时温度曲线和把数据存入数据库中,方便查询历史温度记录。读数方便,测量范围广

55、,测温准确。硬件电路较简单,所以软件设计较复杂,DS18B20 只有一个数据口,所以它的读写程序对时序有很高的要求。在整个采集系统中,包括温度采集程序,串口通信程序,和上位机 VB 的程序,数据库等等几个部分,为了避免干扰,当上位机 VB 界面点击“采集温度”时,向下位机发送特定字符,当下位机识别正确字符,才将温度数据传送给上位机。此外在设计要求的基础上,还做了一定程度的功能扩展,使用蜂鸣器来判断温度传感器是否工作正常,并且在图形界面上可以显示历史平均温度,最大温度,最小温度。可以选择串口和波特率满足不同要求,设置采集间隔时间,显示不同时间范围的温度满足不同场合的测温要求。硬件简单,成本也低。

56、在设计过程中,对整个系统硬件和软件的分析,采用模块化程序设计的方法,流程图分析设计思路,将系统分成几个模块,最终进行整合,从而实现了基于 VB6.0 的数据采集系统的设计。在毕业设计的过程中,针对所要设计的课题,我更加系统的学习了 VB6.0 语言和C 语言,能够较熟练的运用伟福、PROTEUS 和 VB6.0 等设计软件,使我了解了测温的原理和相关领域的知识。就个人而言,在这次毕业设计锻炼了个人意志以及在克服困难的毅力,培养了我在一定的压力下进行研究和设计的心理素质,独立处理问题的能路,提高了我查找运用各种参考资料以及与其他人沟通交流解决问题的能力。此外,整个设计过程中由于指导老师的帮助下,

57、开拓了我的思维,提高了将所学知识学以致用的能力。参考文献1 黄仁欣单片机原理及应用技术M 北京:清华大学出版社,2005:56-622 马忠梅,籍顺心等单片机的 C 语言应用程序设计M 北京:航空航天大学出版社,2001:98-1013 刘文涛Visual Basic + Access 数据库开发与实例M 北京:清华大学出版社,2006:27 32-34,51-534 李敏业, 王颖Visual Basic + Access 完全解析M 北京:人民邮电出版社,2006: 102-1105 占维, 刘伟VB6.0 数据库实用编程 100 例M 北京:中国铁道出版社,2004: 120-1256

58、张靖武, 周灵彬单片机系统的 PROTEUS 设计与仿真M 北京:电子工业出版社,2007:96-105致 谢本学位论文是在我的指导老师谢明华的耐心指导下完成的。从论文开题时就给予了许多中肯意见,使我在之后的设计过程中能够少走弯路,事半功倍。同时也感谢长沙学院能够提供如此的师资力量和实验室研究条件。谢老师始终都给予了细心的指导和很大支持,解答了我在设计过程中很多的疑惑,在论文的选题、研究理论、框架结构、数据整理,直至撰写、修改和定稿等各个环节均严格把关,并投入了大量的时间和精力。谢老师治学严谨,学识渊博,为我营造了一种良好的设计氛围。在跟随谢老28师学习的过程中,丰富了自己的理论知识和学术思想

59、。很庆幸这些年来我遇到了许多恩师益友,无论在学习上、生活上还是工作上都给予了我无私的帮助和热心的照顾,让我在许多方面都有所成长。感恩之情难以用语言量度,谨对多年来给予我关心与支持的良师益友和亲人们致以最诚挚的谢意! 学生签名:日 期:长沙学院毕业设计29附录 1 下位机程序/* DS18B20 温度采集系统程序 通过 DD18B20 读取温度,数码管显示温度值,并由串口传送到上位机再执行相应操作。*/#include #define XTAL 11059200 / CUP晶振频率#define baudrate 9600 / 通信波特率#define uchar unsigned char#d

60、efine uint unsigned intsbit DQ = P33; / 定义 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,0 xB0,0 x99,0 x92,0 x82,0 xF8, 0 x80,0 x90,0 xff;unsigned cha

61、r 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 DIN = P07; / 小数点bit flash=0; / 显示开关标记bit flag_zf=0; / 正负温度标志/*/v

62、oid 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 则初始化成功 =1 则初始化失败 Delay(100); DQ = 1; return(presence); / 返回信号,0=presence,

63、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(unsigned char dat)/ 写一个字节 unsigned char i = 0; for (i = 8; i 0; i-) 长沙学院毕业设计31 DQ =

64、 0; DQ = dat&0 x01; 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); / 启动温度转换 Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作 WriteOneChar(0 xBE); /

65、读取温度寄存器 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); temp_data0=!( temp_data0);temp_data0= temp_data0+1;长沙学院毕业设计32if(temp_data0=0)

66、 temp_data1= temp_data1+1;Else flag_zf=0 /判断测得的温度数据是正还是负,如果为正,不做任何/理 display4=temp_data0&0 x0f;display0=ditabdisplay4; / 查表得小数位的值display4=(temp_data0&0 xf0)4)|(temp_data1&0 x0f)4);display3=display4/100;display1=display4%100;display2=display1/10;display1=display1%10; if(flag_zf=1) p0=0 xbf; P2=0 x02; Delay(300); /温度为负数时第二个数码管显示负号 if(!display3) / 高位为 0,不显示 display3=0 x0a; if(!display2) / 次高位为 0,不显示 display2=0 x0a; P0 = 0 xc6; / 显示 CP2 = 0 xfe; / 位选线为 P2.7 口,LED 为共阳极显示,当位选线为低电平时选通Delay(300);P0 = 0

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!