




已阅读5页,还剩83页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
长沙学院毕业设计 I 基于基于 VB6 0VB6 0 的温度数据采集系统毕业设计的温度数据采集系统毕业设计 目 录 摘摘 要要 I I ABSTRACTABSTRACT IIII 第第 1 1 章章 绪论绪论 1 1 1 1 AT89C51 简介 2 1 2 DS18B20 传感器简介 5 第第 2 2 章章 系统设计系统设计 9 9 2 1 功能与设计方案 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 长沙学院毕业设计 II 第第 4 4 章章 结论结论 2525 参考文献参考文献 2626 致致 谢谢 2727 附录附录 1 1 下位机程序下位机程序 2828 附录附录 2 2 上位机程序上位机程序 3434 长沙学院毕业设计 1 第第 1 1 章章 绪论绪论 随着科学技术的迅猛发展 电子学的发展也越来越快 带动了大批相关产业的发 展 其应用的范围也越来越广泛 如今 计算机的使用领域已经扩展到了各行各业 甚至介入个人家庭 在这种形式下 对于计算机的认识是势在必得的 而且使用微机 已经成为了当代人的一种基本技能 所以对于我们来说 仅仅会使用微机是远远不够 的 要想适应当今社会的需要 我们就必须能够设计出基于 PC 技术的新的电子仪器 以满足社会更高层次的需求 近年来 单片机发展十分迅速 一个以微机应用为主的新技术革命浪潮正在蓬勃 兴起 单片机已经渗透到工业 农业 国防 科研及日常生活等各个领域 传统的温 度采集的方法不仅费时 而且精度差 满足不了各行业对于温度数据高精度 设备高 可靠性的需求 单片机的出现使得温度数据的采集和处理得到了很好的解决 选择适 当的单片机和温度传感器及前端处理电路 可以获得较高精度的测量 不但方便快捷 成本低廉 省事省力 而且大幅度提高了测量精度 1 本文介绍了一种利用单片机实现温度数据的采集和处理的一种设计方法 其中涉 及了传感器 数据采集 单片机数据处理 单片机和 PC 机通讯 VB 等一系列相关理论 本文就如何将温度这一连续的物理量转换成模拟的电压信号 再将电压信号通过单片 机编码转换成数字信号这一过程 进行了阐述和分析 并且增加了报警电路 同时在 通过软件进行温度补偿和数据处理方面 也作为了具体介绍 在硬件电路设计方面 从电路的简单 可靠数字化 低成本等角度出发 设计者采用了硬件滤波软件补偿两 方面入手 使得设计达到所需精度要求 具有较高的性能价格比 长沙学院毕业设计 2 1 1 AT89C51 简介 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器 FPEROM Flash Programmable and Erasable Read Only Memory 的低电压 高性能 CMOS8 位微处理 器 俗称单片机 AT89C2051 是一种带 2K 字节闪烁可编程可擦除只读存储器的单片机 单片机的可擦除只读存储器可以反复擦除 100 次 该器件采用 ATMEL 高密度非易失存 储器制造技术制造 与工业标准的 MCS 51 指令集和输出管脚相兼容 由于将多功能 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 个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 管脚说明 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 口被外部下拉为 低电平时 将输出电流 这是由于内部上拉的缘故 在 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 口也可作为 AT89C51 的一些特殊功能口 如下表所示 口管脚 备选功能 P3 0 RXD 串行输入口 P3 1 TXD 串行输出口 P3 2 INT0 外部中断 0 P3 3 INT1 外部中断 1 P3 4 T0 记时器 0 外部输入 P3 5 T1 记时器 1 外部输入 长沙学院毕业设计 4 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器读选通 P3 口同时为闪烁编程和编程校验接收一些控制信号 RST 复位输入 当振荡器复位器件时 要保持 RST 脚两个机器周期的高电平时间 ALE PROG 当访问外部存储器时 地址锁存允许的输出电平用于锁存地址的地位字节 在 FLASH 编程期间 此引脚用于输入编程脉冲 在平时 ALE 端以不变的频率周期输出 正脉冲信号 此频率为振荡器频率的 1 6 因此它可用作对外部输出的脉冲或用于定时 目的 然而要注意的是 每当用作外部数据存储器时 将跳过一个 ALE 脉冲 如想禁 止 ALE 的输出可在 SFR8EH 地址上置 0 此时 ALE 只有在执行 MOVX MOVC 指令是 ALE 才起作用 另外 该引脚被略微拉高 如果微处理器在外部执行状态 ALE 禁止 置位 无效 PSEN 外部程序存储器的选通信号 在由外部程序存储器取指期间 每个机器周 期两次 PSEN 有效 但在访问外部数据存储器时 这两次有效的 PSEN 信号将不出现 EA VPP 当 EA 保持低电平时 则在此期间外部程序存储器 0000H FFFFH 不 管是否有内部程序存储器 注意加密方式 1 时 EA 将内部锁定为 RESET 当 EA 端保 持高电平时 此间内部程序存储器 在 FLASH 编程期间 此引脚也用于施加 12V 编程 电源 VPP XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入 XTAL2 来自反向振荡器的输出 振荡器特性 XTAL1 和 XTAL2 分别为反向放大器的输入和输出 该反向放大器可以配置为片内振 荡器 石晶振荡和陶瓷振荡均可采用 如采用外部时钟源驱动器件 XTAL2 应不接 有 余输入至内部时钟信号要通过一个二分频触发器 因此对外部时钟信号的脉宽无任何 要求 但必须保证脉冲的高低电平要求的宽度 芯片擦除 整个 PEROM 阵列和三个锁定位的电擦除可通过正确的控制信号组合 并保持 ALE 管脚处于低电平 10ms 来完成 在芯片擦操作中 代码阵列全被写 1 且在任何非空 存储字节被重复编程以前 该操作必须被执行 此外 AT89C51 设有稳态逻辑 可以在低到零频率的条件下静态逻辑 支持两种软件可 选的掉电模式 在闲置模式下 CPU 停止工作 但 RAM 定时器 计数器 串口和中断 系统仍在工作 在掉电模式下 保存 RAM 的内容并且冻结振荡器 禁止所用其他芯片 功能 直到下一个硬件复位为止 2 长沙学院毕业设计 5 1 2 DS18B20 传感器简介 DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温 度传感器 与传统的热敏电阻等测温元件相比 它能直接读出被测温度 并且可根据 实际要求通过简单的编程实现 9 12 位的数字值读数方式 DS18B20 的性能特点如下 独特的单线接口仅需要一个端口引脚进行通信 多个 DS18B20 可以并联在惟一的三线上 实现多点组网功能 无须外部器件 可通过数据线供电 电压范围为 3 0 5 5 零待机功耗 温度以 9 或 12 位数字 用户可定义报警设置 报警搜索命令识别并标志超过程序限定温度 温度报警条件 的器件 负电压特性 电源极性接反时 温度计不会因发热而烧毁 但不能正常工作 DS18B20 采用 脚 PR 35 封装或 8 脚 SOIC 封装 其内部结构框图如图 1 2 所示 图 1 2 DS18B20 内部结构图 I O C 64 位 ROM 和 单 线 接 口 高 速 缓 存 存储器与控制逻辑 温度传感器 高温触发器 TH 低温触发器 TL 配置寄存器 8 位 CRC 发生器 Vdd 长沙学院毕业设计 6 64 位 ROM 的结构开始 8 位是产品类型的编号 接着是每个器件的惟一的序号 共有 48 位 最后 8 位是前面 56 位的 CRC 检验码 这也是多个 DS18B20 可以采用一 线进行通信的原因 温度报警触发器 和 可通过软件写入户报警上下限 DS18B20 温度传感器的内部存储器还包括一个高速暂存 和一个非易失性的 可电擦除的 EERAM 高速暂存 RAM 的结构为 8 字节的存储器 结构如图 1 3 所示 头 2 个字节包含测得的温度信息 第 3 和第 4 字节 TH 和 TL 的拷贝 是易失的 每次 上电复位时被刷新 第 5 个字节 为配置寄存器 它的内容用于确定温度值的数字转 换分辨率 DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值 该字节各 位的定义如图 3 所示 低 5 位一直为 是工作模式位 用于设置 DS18B20 在工 作模式还是在测试模式 DS18B20 出厂时该位被设置为 0 用户要去改动 R1 和 R0 决定温度转换的精度位数 来设置分辨率 TM R1 1R01111 图 1 3 DS18B20 字节定义 由表 1 1 可见 DS18B20 温度转换的时间比较长 而且分辨率越高 所需要的温 度数据转换时间越长 因此 在实际应用中要将分辨率和转换时间权衡考虑 表 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 接收到温度转换命令后 开始启动转换 转换完成后的温度值就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 1 2 字节 单片机可以通 过单线接口读出该数据 读数据时低位在先 高位在后 数据格式以 0 0625 LSB 形 式表示 当符号位 S 0 时 表示测得的温度值为正值 可以直接将二进制位转换为十进制 当符号位 S 1 时 表示测得的温度值为负值 要先将补码变成原码 再计算十进制数 值 表 2 是一部分温度值对应的二进制温度数据 表 1 2 一部分温度对应值表 温度 二进制表示十六进制表示 1250000 0111 1101 0000 07D0H 850000 0101 0101 0000 0550H 25 06250000 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 字节内容作比较 若 T TH 或 T TL 则将该器件内的报警标志位置位 并对主机发出的报警搜索命令作 出响应 因此 可用多只 DS18B20 同时测量温度并进行报警搜索 在 64 位 ROM 的最高有效字节中存储有循环冗余检验码 CRC 主机 ROM 前 56 位 来计算 CRC 值 并和存入 DS18B20 的 CRC 值作比较 以判断主机收到的 ROM 数据是否 正确 DS18B20 的测温原理是这这样的 器件中低温度系数晶振的振荡频率受温度的影响 很小 用于产生固定频率的脉冲信号送给减法计数器 1 高温度系数晶振随温度变化其 振荡频率明显改变 所产生的信号作为减法计数器 2 的脉冲输入 器件中还有一个计 数门 当计数门打开时 DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数进而 完成温度测量 计数门的开启时间由高温度系数振荡器来决定 每次测量前 首先将 55 所对应的一个基数分别置入减法计数器 1 温度寄存器中 计数器 1 和温度寄存 器被预置在 55 所对应的一个基数值 减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数 当减法计数器 1 的预置值减到 0 时 温度寄存器的值将加 1 减法计数器 1 的预置将重新被装入 减法 计数器 重新开始对低温度系数晶振产生的脉冲信号进行计数 如此循环直到减法计 数器计数到 0 时 停止温度寄存器的累加 此时温度寄存器中的数值就是所测温度值 其输出用于修正减法计数器的预置值 只要计数器门仍未关闭就重复上述过程 直到 温度寄存器值大致被测温度值 另外 由于 DS18B20 单线通信功能是分时完成的 它有严格的时隙概念 因此读 写时序很重要 系统对 DS18B20 的各种操作按协议进行 操作协议为 初使化 DS18B20 发复位脉冲 发 ROM 功能命令 发存储器操作命令 处理数据 3 长沙学院毕业设计 9 第第 2 章章 系统设计 2 1 功能与设计方案 2 1 1 功能要求 设计一个基于 Visual Basic 6 0 的数据采集系统 用单片机系统接收温度传感器的 温度数据 并在数码管上显示当前温度值 可测温范围 55 125 摄氏度 精度 0 1 摄 氏度 使用 VB6 0 编写上位机程序 接收温度数据并储存在数据库中 接收数据时 要 求能同步画出温度变化的曲线 要求系统可查询历史温度信息 基于 VB6 0 的数据采集系统在设计时主要应该满足如下功能指标 1 测量温度 并在数码管上显示当前温度值 2 可测温范围 55 125 摄氏度 精度 0 1 摄氏度 3 每秒给上位机传送一次温度数据 4 上位机接收温度数据 并将数据 接收数据时间以及测温批次等信息存储到数 据库中 5 测温批次可以自动生成也可手动输入 6 接收温度数据时 同步画出温度变化的曲线 7 可按批次以及测温时间查询温度数据 8 将上位机软件打包 生成安装文件 2 1 2 设计方案 2 1 2 1 方案论证 方案一 由于本设计是测温电路 可以使用热敏电阻之类的器件利用其感温效应 在将随 长沙学院毕业设计 10 被测温度变化的电压或电流采集过来 进行 A D 转换后 就可以用单片机进行数据的 处理 在显示电路上 就可以将被测温度显示出来 这种设计需要用到 A D 转换电路 感温电路比较麻烦 方案二 进而考虑到用温度传感器 在单片机电路设计中 大多都是使用传感器 所以这是 非常容易想到的 所以可以采用一只温度传感器 DS18B20 此传感器 可以很容易直接 读取被测温度值 进行转换 就可以满足设计要求 从以上两种方案 很容易看出 采用方案二 电路比较简单 软件设计也比较简单 故采用了方案二 2 1 2 2 总体设计框图 温度计电路设计总体设计方框图如图 1 所示 控制器采用单片机 AT89C51 温度 传感器采用 DS18B20 用 8 位 LED 数码管以串口传送数据实现温度显示并通过串口与 上位机 PC 通讯 把数据传送给上位机 并用 VB 编写的图形界面把温度的变化曲线显 示出来 并通过数据库存储 可查询历史温度记录 图 2 1 总体设计框图 主控制器 单片机 AT89C51 具有低电压供电和体积小等特点 四个端口只需要两个口就能满 足电路系统的设计需要 很适合便携手持式产品的设计使用系统可用二节电池供电 显示电路 显示电路采用 8 位共阳极 LED 数码管 从 P0 口输出段码 P2 口为 LED 的位选信 号 单片机 LED 显 示温 度 传 感 器 复位电路 时钟振荡 蜂鸣器 P C 长沙学院毕业设计 11 温度传感器 采用 DS18B20 温度传感器 它能直接读出被测温度 并且可根据实际要求通过简 单的编程实现 9 12 位的数字值读数方式 PC 实时显示界面 显示实时温度数据变化曲线的界面 采用 VB6 0 编辑 在程序使用 VB6 0 的通用 串口控件 MSCOMM 来对发送到串口的数据进行采集处理 上下位机定义好通信协议和波 特率 2 2 设计中所需要的器件 1 单片机 AT89C51 一块 2 温度传感器 DS18B20 一块 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 口的逻辑状态作位选线信号 达到分时选通的目的 当相应口为高 电平时 LED 才能显示相应代码 实际使用中只用到七个 LED 最后 2 个用来显示摄氏 度符号 第二个用来显示温度的正负 当温度为负时 显示 号 为正时不显示 同样由软件可以实现 当百位为零时 百位不显示 百位十位为零时 百位十位都不 显示 这样设计方便观察 更加直观 此外还接有蜂鸣器 当 DS18B20 不能正常工作时可以达到报警的目的 最后还要 实现单片机与上位机通信的功能 所以要连接好串口 以便能向上位机发送或接受数 据 按健复位电路是最简单的手动复位 使用比较方便 在程序跑飞时 可以手动复 位 这样就不用在重起单片机电源 就可以实现复位 2 4 系统软件设计 2 4 1 下位机软件设计 系统程序主要包括主程序 读出温度子程序 温度转换命令子程序 计算温度子 程序 显示数据刷新子程序等 2 4 1 1 主程序 主程序的主要功能是负责温度的实时显示 读出并处理 DS18B20 的测量的当前温 度值 温度测量每 1s 进行一次 这样可以在一秒之内测量一次被测温度 其程序流程 见图 2 3 所示 长沙学院毕业设计 14 图 2 3 主程序流程图 图 2 4 读温度流程图 2 4 1 2 读出温度子程序 读出温度子程序的主要功能是读出 RAM 中的 9 字节 在读出时需进行 CRC 校验 校验有错时不进行温度数据的改写 其程序流程图如图 2 4 所示 2 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 4 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令 当采用 12 位分辨率时转换时间 约为 750ms 在本程序设计中采用 1s 显示程序延时法等待转换的完成 如图 2 6 所示 2 4 2 4 1 5 显示数据刷新子程序 显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作 当最高显示位为 0 时 将符号显示位移入下一位 程序流程图如图 2 7 所示 开始 温度零下 温度值取补码置 标志 计算小数位温度值 计算整数位温度值 结束 置 标 志 N Y 温度数据移入显示寄存器 十位数 0 百位数 0 十位数显示符号百 位数不显示 百位数显示数据 不显示符号 结束 N N Y Y 长沙学院毕业设计 16 图 2 7 显示数据刷新流程图 2 4 2 上位机软件设计 上位机是应用 VB 进行编写的 它把下位机传送上来是两字节的十六进制数据进 行解码显示出来 当点击采集温度时 上位机向下位机发送采集温度命令字符 1 当下位机接受 到命令时 向上位机发送数据 使用 VB6 0 编写上位机程序 接收温度数据并储存在数据库中 接收数据时 能 同步画出温度变化的曲线 系统可查询历史温度信息 具体在上下位机程序里面体现出来 下图 2 8 为上位机工作流程图 长沙学院毕业设计 17 图 2 8 上位机工作流程图 数据采集实时显示程序设计思路 本程序使用 VB6 0 的通用串口控件 MSComm 来对发送到串口的数据进行采集处 理 VB6 0 的 MSComm 通信控件提供了一系列标准通信命令的接口 它允许建立串口 连接 可以连接到其他通信设备 如 Modem 还可以发送命令 进行数据交换以及 监视和响应在通信过程中可能发生的各种错误和事件 从而可以用它创建全双工 事 件驱动的 高效实用的通信程序 一般说来 计算机都有一个或多个串行端口 它们 依次为 Com1 Com2 这些串口还提供了外部设备与 PC 进行数据传输和通信的 通道 这些串口在 CPU 和外设之间充当解释器的角色 基本属性与描述如下 属性 描述 CommPort 设置或返回通信端口号 Settings 以字符串的形式设置或返回波特率 奇偶校验 数据位和停止位 PortOpen 设置或返回通信端口的状态 也可以打开和关闭端口 Input 返回和删除接收缓冲区中的字符 长沙学院毕业设计 18 Output 将字符串写入发送缓冲区 CommEvent 属性为通信事件或错误返回下列值之一 在该控件的对象库中也可以 找到这些常量 你只首先要确定一个 mscomm 控件在 system 目录下并且该控件已经被 windows 注 册 程序才能正常运行 有数据向串口发过来时 程序可以将数据接收到 接收的数据是字符型的 那么将数据 转化为数字型的 再将这个数据的大小作为画图的某一个点的纵坐标 横坐标为数据的序 号 将这些点用线连起来就是一个曲线图了 这个就是图形显示基本原理 查看原来的数 据的原理也是这样的 不同的地方就是 数据是从文件中来 同样的也是将多个数据分成一 个一个的 然后这一个数据的大小就是画图的某一个点的纵坐标 横坐标同样为数据的序 号 再将这些点用线连起来就是曲线图 图形能移动的原理 是我们首先改变的只是数据 图形并没有变 但图形的形式是由这些数据来确定的 当数据发生变化后 我们通过刷新显 示区来变化的 VB 编写的实时显示界面如图 2 9 所示 点击查询可查询历史温度信息 长沙学院毕业设计 19 图 2 9 实时温度曲线显示及查询图 串口的波特率 串口号都采用下拉选择的方式 在使用中可跟据情况选择读串口 数据的原理是 只要当有数据向串口发数据来时 计算机就会自动将其数据写到一个特定 的缓冲区 我们只要写程序去读那个特定的缓冲区就可以了 此外为了保存和查询历史温度数据还要在 VB 中设计建立连接到 Access 数据库的 控件 Data 控件是 Visual Basic 6 0 中的一个内置数据控件 可以通过设置 Data 控件 的 connect DatabaseName RecordSource 属性实现对数据库的连接和访问 建立 的数据库库文件和 VB 中创建的工程文件必须放在放在同一目录下 5 第第 3 章章 程序设计程序设计 3 1 下位机程序 下位机程序的编写主要使用 C 语言进行编写 可读性要比汇编语言好很多 其中 包括 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 主程序为一无限循环 单片机不断从 DS18B20 的数据口采集数据信号 用 flash 标志 DS18B20 是否正常 当 flash 1 时表示 DS18B20 不正常 就由软件设置及时关闭 LED 显示并由蜂鸣器报警 当一帧数据采集完毕即 RI 接受中断标志位为 1 判断下位 机是否接受到来自上位机的字符 1 对应的 ASC 码 49 时接收到时才开始将采集到的 数据发送给上位机进行处理 RI 标志位必须由软件清零 在串口通信模块中 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 1 TMOD 0 x20 TH1 unsigned char 256 XTAL 32L 12L baudrate TL1 unsigned char 256 XTAL 32L 12L baudrate SCON 0 x50 PCON TR1 1 IE 0 x00 此外 在显示模块中 小数位的转化才用了一定的技巧 由于实际显示中只要求 显示一位小数 而 DS18B20 每一位的转化温度为 0 0625 LSB 当每一位变化时 第一位小数只有 16 种状态 我们只需一一算出放在一个数组中 通过查表指令即可获 取第一位小数的十进制值 由于每一位变化为 0 0625 LSB 通过移位操作 即可获 得一个新的关于温度整数部分的数据 部分设计显示转化程序如下 display 4 temp data 0 display 0 ditab display 4 display 4 temp data 0 temp data 1 temp data 1 temp data 0 temp data 0 temp data 0 temp data 0 1 if temp data 0 0 temp data 1 temp data 1 1 Else flag zf 0 其中 temp data 1 为温度数据的高八位 temp data 0 为温度数据的低八位 flag zf 1 表示温度为负 进行相应转化再执行上面的显示转化程序 为正则直接执行 显示转化程序里的内容 其他延时子程序以及 DS18B20 的读写子程序 可见附录 1 的完整的 DS18B20 温 度采集系统程序设计 在这里不做详细介绍了 3 2 上位机程序 在上位机 VB 程序的编写中 最重要的是串口的初始化程序和接收触发程序的设 计 本程序使用 VB6 0 的通用串口控件 MSComm 来对发送到串口的数据进行采集处 理 主要使用方法如下 串口设置 MSComm SetSettings 波特率 校验方式 数据位数 停止位数 串口数据 MSComm InputMode 输入模式设定 其具体程序设计如下 长沙学院毕业设计 23 Private Sub Form Load On 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 False Then MSComm1 PortOpen True mark True CmdStop Enabled False Exit Sub err Select Case err Number Case comPortAlreadyOpen MsgBox 没有发现此串口或被占用 49 温度采集系统 Case Else MsgBox 没有发现此串口或被占用 49 温度采集系统 End Select err Clear End Sub 在 VB 程序中设置为串口 1 输入模式为二进制 且接收和发送一个字符就会触发 MSComm1 的 OnComm 接收触发事件 波特率设置为 9600 可以根据具体设计情况更 改波特率的大小 但要与下位机的一致 程序中还编写了错误处理程序 当串口被占 长沙学院毕业设计 24 用时会转去执行 err 程序 出现系统报错 接收触发事件的处理 当每发送一次指令时 就会触发 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 读取仪表返回数据串 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 进制的格式放入缓冲中 便于之后的数据处理 此外程序还添加了接收温度数 据的判定 接收到的温度数据应为两字节 且低位在前 当接收到的数据不是两字节 时 表示接收错误 跳出此程序 为了在 VB 界面能够显示当前的温度值 需要将采集的两字节温度数据转化为十 进制测量数据 转化程序如下 If Len Trim Mid buffer 1 2 1 Then 长沙学院毕业设计 25 datatemp num Val 定义 DS18B20 端口 DQ sbit BEEP P3 7 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 char data temp data 2 0 x00 0 x00 unsigned char data display 5 0 x00 0 x00 0 x00 0 x00 0 x00 unsigned char code ditab 16 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 P0 7 小数点 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 则初始化成功 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 unsigned 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 启动温度转换 Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 xBE 读取温度寄存器 temp data 0 ReadOneChar 温度低 8 位 temp data 1 ReadOneChar 温度高 8 位 void Disp Temperature 显示温度 unsigned char n 0 if temp data 1 7 当温度高八位中的高五位全为 O flag zf 1 所测温度为负时 要进行转换 temp data 1 temp data 1 temp data 0 temp data 0 temp data 0 temp data 0 1 长沙学院毕业设计 32 if temp data 0 0 temp data 1 temp data 1 1 Else flag zf 0 判断测得的温度数据是正还是负 如果为正 不做任何 理 display 4 temp data 0 display 0 ditab display 4 查表得小数位的值 display 4 temp data 0 display 3 display 4 100 display 1 display 4 100 display 2 display 1 10 display 1 display 1 10 if flag zf 1 p0 0 xbf P2 0 x02 Delay 300 温度为负数时第二个数码管显示负号 if display 3 高位为 0 不显示 display 3 0 x0a if display 2 次高位为 0 不显示 display 2 0 x0a P0 0 xc6 显示 C P2 0 xfe 位选线为 P2 7 口 LED 为共阳极显示 当位选线为低电平时选通 Delay 300 P0 0 x9c 显示 P2 0 xfd 选中 P2 6 口 Delay 300 P0 LEDData display 0 显示小数位 P2 0 xfb p2 5 Delay 300 P0 LEDData1 display 1 显示个位 P2 0 xf7 Delay 300 长沙学院毕业设计 33 P0 LEDData display 2 显示十位 P2 0 xef Delay 300 P0 LEDData display 3 显示百位 P2 0 xdf Delay 300 P2 0 xff 关闭显示 void beep void unsigned char i for i 0 i 100 i Delay 60 BEEP BEEP BEEP 取反 BEEP 1 关闭蜂鸣器 void init void EA 1 中断总允许 TMOD 0 x20 定时器 1 工作于 8 位自动重载模式 用于产生波特率 TH1 unsigned char 256 XTAL 32L 12L baudrate TL1 unsigned char 256 XTAL 32L 12L baudrate 定时器 0 赋初值 SCON 0 x50 设定串行口工作方式 PCON 波特率不倍增 TR1 1 启动定时器 1 IE 0 x00 禁止任何中断 void send char void 传送十六位的温度数据 低位在前 长沙学院毕业设计 34 unsigned i 0 while i 2 SBUF temp data i while TI 等特数据传送 TI 0 清除数据传送标志 i void main void uchar receive init while 1 Read Temperature 读取温度 if flash 0 Disp Temperature 显示温度 else P2 0 x00 DS18B20 不正常 关闭显示 if RI 是否有数据到来 RI 0 receive SBUF if receive 49 是否开始采集温度 send char 传送采集的温度 长沙学院毕业设计 35 附录 2 上位机程序 定义窗体级变量 在显示 绘图 报警等过程中使用 Dim datatemp 200 As Single 用于存储温度采样值 Dim num As Integer 用于存储采样值个数 Dim counter As Integer 采样个数计数器 Dim mark As Boolean 暂停标志 Dim strSql As String Private Sub cmd Search Click strSql select from Tbl wD where 1 1 Set Rs New ADODB Recordset Rs CursorLocation adUseClient Rs Open strSql Db adOpenKeyset adLockReadOnly If Rs RecordCount 200 Or Txttimes 60 Or Txttime Txttimes Text 1 Then 接收个数判断 Timer1 Enabled False 接收完毕 Shpstate FillColor Persist Security Info False Data Source 下面的语句是连接 sqlserver 数据库的 Set Db New ADODB Connection Db Open iConcstr FrmMain Show Exit Sub errp MsgBox 数据库访问失败 或者数据库不存在 请选择有效的数据库文件 长沙学院毕业设计 49 End Sub 2009 届届 本科生毕业设计资料本科生毕业设计资料 第二部分第二部分 外文资料翻译外文资料翻译 2 Microcontroller A microcontroller also microcontroller unit MCU or C is a small computer on a single integrated circuit consisting of a relatively simple CPU combined with support functions such as a crystal oscillator timers watchdog serial and analog I O etc Program memory in the form of NOR flash or OTP ROM is also often included on chip as well as a typically small read write memory Microcontrollers are designed for small applications Thus in contrast to the microprocessors used in personal computers and other high performance applications simplicity is emphasized Some microcontrollers may operate at clock frequencies as low as 32KHz as this is adequate for many typical applic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《三年级家长会精美课件》
- 液压与液力元件在高铁车辆中的应用考核试卷
- 《化学反应基本原理》课件
- 卢敬教学课件 - 中学语文课堂展示
- 《单片机原理》课程培训心得体会
- 肥料产业政策研究考核试卷
- 2025年果蔬预冷保鲜运输车合作协议书
- 货摊经营风险防范与应对考核试卷
- 《注塑成型工艺与优化》课件
- 《代数与几何习题课》课件
- 学校同学聚会活动策划方案
- 2025年入团考试试题及答案完美呈现
- 形势与政策补考2-国开(XJ)-参考资料
- 2022年四川省绵阳市中考英语试题及参考答案
- 防疫小组人员名单
- 眼部健康检测与分析课件
- 偏心块振动式土壤夯实机的结构设计说明
- 苏州市建设工程造价计价解释
- 主题班会《坚定信念--放飞理想》
- S771(一) 水力循环澄清池
- 高密度电法探测及数据处理解释--答辩
评论
0/150
提交评论