我的毕业设计_labViEW与单片机.pdf_第1页
我的毕业设计_labViEW与单片机.pdf_第2页
我的毕业设计_labViEW与单片机.pdf_第3页
我的毕业设计_labViEW与单片机.pdf_第4页
我的毕业设计_labViEW与单片机.pdf_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1 labVIEWlabVIEWlabVIEWlabVIEW 与单片机温度采集与单片机温度采集 想了很久 该做一个什么样的毕业设计呢 在学校的时候 接触的东西太少 了 很多知识在学校的时候都没有听说过 比如 STC12C5A60S2 这块单片机就 很强大 1T 工作方式 比传统 51 在相同晶振下运行速度快 8 12 倍 还有 labVIEW 一款强大的软件 采用 G 语言进行软件开发 我主要是用它来进行上 位机开发 这些都是我快毕业的时候才看到的 后悔啊 主要还是因为网络的 原因 在学校的时候 也不怎么上网 也不还去逛一些电子论坛 现在我经常去 逛一下论坛 比如 和 经常逛一下 能过学到 很多知识 不懂的发帖讨论一下 这是种不错的学习方式 这个设计虽然简单 但涉及到了很多方法 比如比如多任务 FIFO 收发数 据 CRC 检验等 还有一些程序编写习惯问题 我也会说下我的编程习惯 每 个人都有自己的编程风格 但一个好的风格给人一看 就知道你将来是否能成为 高手 下面我来主要介绍一下 我的这个设计硬件包括 STC12C5A60S2 单片机 18B20 温度传感器和 DS1302 时钟芯片 软件采用利用定时器中断运行多任务 使用队列建立缓存进行串口收发数据 添加 CRC 检验 上位机采用 labVIEW 进 行编写 下面我来详细讲解一下 如果您觉得哪里写的不够清楚 可以联系我 我的邮箱 452914287 2 目录目录目录目录 1 养成一个好的编程风格 2 2 芯片简介 7 1 1单片机 STC12C5A60S2 简介 8 1 2温度传感器 18B20 简介 8 1 3时钟芯片 DS1302 简介 10 3 定时器多任务 12 4 CRC 循环冗码校验 19 5 串口与 FIFO 进行收发数据 23 6 labVIEW 编写上位机程序 26 7 参考文献下载地址 32 3 1 1 养成一个好的养成一个好的编程风格编程风格 为什么从这说起呢 因为一个好的编程风格 可以减少自己的麻烦 能过 很好的维护代码 比如很久以前写的一个程序 由于没有写注释 自己都不知道 为什么要这样安排 像是在看别人的程序一样 所以注释是很重要的 这样别人 进行二次开发也比较容易 还有命名很重要 很多人喜欢使用拼音甚至拼音缩写 还是觉得使用英文比较好 将来说不定还能走出去 缩进尽量使用 Tab 键 比空 格键好用 这是网上老师说的 mars 老师 下面我来介绍一下我的风格 1 1 写一个属于自己程序的版本号 比如 我的毕业设计 V1 0 421 我的 版本号命名规则 A B BCD A 为主版本号 程序有重大修改进行更改 B 为次版本 号 一般添加或删除功能时修改 BCD 为修改日期 我的版本命名规则能过满足 我的要求 这是我的目录 查找起来很方便 看起来也很舒服 1 2 程序文件夹 有一个好的程序文件夹 不仅看起来不乱 查找起来也很 容易 将输出的都放在同一目录 工程列表放在同一目录 程序文件放在同一目录 程序文件 我也分为 3 类 一种是底层驱动程序 一种是应用程序 一种是主程 序 1 3 下面我来介绍一下怎么设置的 首先创建一个文件夹比如 我的毕业设 计 V1 0 421 在创建子目录如 1 2 图所示 OutputFiles ProjectList 4 SourcesFiles 运行 Keil 点击 进行设置 选着鼠标所指的 Select Folder for Objects 选着文件夹 OutputFiles 同样 list 也是这样进行选择文件夹 ProjectList 1 4 把不同的功能的程序放在不同的目录中 如图所示 这样管理起来很方 便 5 在 project 的方框中 上图 任意位置 单击右键 选择 Manage Component 这样就可以添加所需要的目录了 1 5 头文件与 C 文件分开这个是很有必要的 如果要查看哪个 C 文件有什么 功能 可以直接看头文件 有个技巧很好 说一下 将所有头文件放置在一个主 头文件中 如 HeadFile h 6 如果再添加 C 文件 直接加入 include XXXX HeadFile h 很方便 不会 漏掉所需要的文件 1 6 readme txt 很重要 在我下载的很多软件中 都有 readme 这个说明文 件 所以我也加到我的程序中去了 这样别人首先就看 readme 把一些重要说 明写进去 比如程序功能 作者 创建时间等信息放进去 7 1 7 每个函数都应有个说明 所以我的程序中函数一般是这样 一个好习惯就应该从细节做起 这样就可以养成一个好的风格 给人耳目一 新的感觉 是迈向优秀工程师重要的一步 8 2 2 芯片简介芯片简介 1 1 单片机 STC12C5A60S2 STC12C5A60S2系列单片机是宏晶科技生产的单时钟 机器周期 1T 的单片机 是高速 低功耗 超强抗干扰的新一代8051单片机 指令代码完全兼容传统8051 但速度快 8 12倍 内部集成MAX810专用复位电路 2路PWM 8路高速10位A D转换 针对电机控制 强 干扰场合 增强型 8051 CPU 1T 单时钟 机器周期 指令代码完全兼容传统8051 1 2 温度传感器 18B20 DS18B20 是单总线的数字温度传感器 其与单片机的接口只需要一根数据线 即可 当然连线简单意味着软件处理上可能要麻烦一点 下面来看看它的优点 9 DS18B20 的内部存储器分为以下几部分 ROM 存放该器件的编码 前8 位为单线系列的编码 DS18B20 的编码是19H 后面 48 位为芯片的唯一序列号 在出场的时候就已经设置好 用户无法更改 最后8 位是以上56 位的CRC 码 RAM DS18B20 的内部暂存器共9 个字节 其中第一个和第二个字节存放转换后 的温度值 第二个和第三个字节分别存放高温和低温告警值 可以用RAM 指令 将其拷贝到EEPROM 中 第四个字节为配置寄存器 第5 7 个字节保留 第9 个字 节为前8 个字节的CRC 码 DS18B20 的温度存放如上图所示 其中S 位符号位 当温度值为负值时 S 1 反之则S 0 我们把得到的温度数据乘上对应的分辨率即可以得到转换后的温度值 DS18B20 的通讯协议 在对DS18B20 进行读写编程时 必须严格保证读写的时序 否则将无法读取测温 结果 根据DS18B20 的通讯协议 主机控制DS18B20 完成温度转换必须经过3 个 步骤 每一次读写之前都要对DS18B20 进行复位 复位成功后发送一条ROM 指令 最后发送RAM 指令 这样才能对DS18B20 进行预定的操作 复位要求主机将数据线下拉500us 然后释放 DS18B20 收到信号后等待16 160us 然后发出60 240us的存在低脉冲 主机收到此信号表示复位成功 DS18B20 的复位时序图 10 读操作的时序图 写操作的时序图 根据时序图写出程序 这里就不贴程序了 1 3 DS1302 时钟芯片 DS1302DS1302 是美国 DALLASDALLAS 公司推出的一种高性能 低功耗的实时时钟芯片 附 加 3131 字节静态 RAMRAM 采用 SPISPI 三线接口与 CPUCPU 进行同步通信 并可采用突发方 11 式一次传送多个字节的时钟信号和 RAMRAM 数据 实时时钟可提供秒 分 时 日 星期 月和年 一个月小与 3131 天时可以自动调整 且具有闰年补偿功能 工作 电压宽达 2 52 5 5 5V5 5V 采用双电源供电 主电源和备用电源 可设置备用电源 充电方式 提供了对后背电源进行涓细电流充电的能力 DS1302DS1302 的外部引脚分 配如图 1 1 所示及内部结构如图 2 2 所示 DS1302DS1302 用于数据记录 特别是对某些具 有特殊意义的数据点的记录上 能实现数据与出现该数据的时间同时记录 因此 广泛应用于测量系统中 详细的可以看芯片的 datasheet 这里就不细讲 12 3 3 定时器多任务定时器多任务 使用多任务在程序设计中是很有必要的 比如串口收发数据为一个任务 温 度读取并显示为一个任务 时间显示为一个任务 读取键盘并响应为一个任务 这样 一个大程序就可以分割为几个小程序 便于维护管理 多任务复杂流程图 首先需要理解 CPU 一旦运行起来 就无法停止 硬件支持时钟停止的不在 这里讨论 谁能够控制一批脱缰的马呢 对了 有中断 中断能够让CPU 回到 特定的位置 设想 能不能用一个定时中断 周期性的将 CPU 这匹运行着的脱 缰的马召唤回来 重新给它安排特定的任务 事实上 任务切换就是这样实现的 13 定时中断实现任务切换 如图所示 CPU 在空闲任务循环等待 定时中断将 CPU 周期性唤回 根据任务 设计了不同的响应频度 满足条件的任务将获得CPU 资源 CPU 为不同任务 关 照 完成后 再次返回空闲任务 如此周而复始 对于各个任务而言 好像各自 拥有一个独立的CPU 各自独立运行 用这种思想构建的程序框架 最大的好处 是任务很容易裁剪 系统能够做得很复杂 下面写出我的os c c程序 include MainFunction HeadFile h uchar TASK DELAY MAX TASK 定义任务延时量变量 函数功能 定时器0初始化 输入 无 输出 无 作者 小鹰fighting 创建日期 最后修改时间 2012年3月18日 14 备注 无 void OS Timer0Iint void uchar i for i 0 i MAX TASK i 任务延时变量归零 TASK DELAY i 0 TMOD TMOD 定时器0工作在模式1 16Bit定时器模式 TH0 256 CLOCK TIME PER SEC 12 256 定时器0赋初值 TL0 256 CLOCK TIME PER SEC 12 256 函数功能 开启系统OS 输入 无 输出 无 作者 小鹰fighting 创建日期 2012年3月18日 最后修改时间 2012年3月18日 备注 无 void OS Open void TR0 1 开启定时器 ET0 1 开启定时器中断 EA 1 开启总中断开关 函数功能 关闭系统OS 输入 无 输出 无 作者 小鹰fighting 创建日期 2012年3月18日 最后修改时间 2012年3月18日 备注 无 void OS Close void TR0 0 关闭定时器 ET0 0 关闭定时器中断 EA 0 关闭总中断开关 15 函数功能 系统OS定时中断服务 输入 无 输出 无 作者 小鹰fighting 创建日期 最后修改时间 2012年3月18日 备注 无 void OS Timer0 void interrupt 1 uchar i TH0 256 CLOCK TIME PER SEC 12 256 定时器0赋初值 TL0 256 CLOCK TIME PER SEC 12 256 for i 0 i 1 20 if crc crc 0 x1021 余式CRC 乘以2 再求 CRC else crc 8 以8位二进制数的形式暂存CRC 的高8 位 crc 8 4 暂存 CRC 的高四位 crc 4 CRC 的高4 位和本字节的前 半字节相加后查表计算CRC 然后加上上一次 CRC 的余数 da uchar crc 8 4 暂存 CRC 的高4 位 crc front 0 Q rear 0 Q bufferCount 0 函数功能 入列 输入 无 输出 无 作者 小鹰 fighting 创建日期 2012 年 3 月 25 日 最后修改时间 2012 年 3 月 25 日 备注 采用循环队列 uchar QueueIn struct Fifo4Serial Q ElemType dat uchar i 0 24 ET0 0 if Q rear QUEUE BUFFER Q front Q base Q rear dat Q rear Q rear 1 QUEUE BUFFER ET0 1 Q bufferCount return QUEUE OK 函数功能 出列 输入 无 输出 无 作者 小鹰 fighting 创建日期 2012 年 3 月 25 日 最后修改时间 2012 年 3 月 25 日 备注 无 uchar QueueOut struct Fifo4Serial Q ElemType dat if Q front Q rear else dat Q base Q front Q front Q front 1 QUEUE BUFFER Q bufferCount return QUEUE OK 下面是 Fifo4Serial h 程序 25 在串口中断服务程序中使用方法为 在串口发送数据时 很多人都会这样写 SBUF 0 x55 While TI 其实 While TI 可以不需要 发送数据是由硬件自动完成 不会影响软件 运行 我还没有想到在什么样的极端情况下会影响数值传递 6 6 labVIEWlabVIEW 编写上位机程序编写上位机程序 26 6 1LabVIEW Laboratory Virtual instrument Engineering 是一种图形化的编程语言 它广泛地被工业界 学术界和研究实验室所接受 视为一个标准的数据采集和仪器控制软件 LabVIEW 集成了与满足 GPIB VXI RS 232 和 RS 485 协议的硬件及数据采集卡通讯的全 部功能 它还内置了便于应用 TCP IP ActiveX 等软件标准的库函数 这是一个功能强大且 灵活的软件 利用它可以方便地建立自己的虚拟仪器 其图形化的界面使得编程及使用过程 都生动有趣 图形化的程序语言 又称为 语言 使用这种语言编程时 基本上不写程序代码 取而代之的是流程图或流程图 它尽可能利用了技术人员 科学家 工程师所熟悉的术语 图标和概念 因此 LabVIEW 是一个面向最终用户的工具 它可以增强你构建自己的科学 和工程系统的能力 提供了实现仪器编程和数据采集系统的便捷途径 使用它进行原理研究 设计 测试并实现仪器系统时 可以大大提高工作效率 下面来介绍一下我的程序 首先是前面板 主要包括串口配置 时间显示与同步按钮 27 还有数据接收状态 还有波形图标 下面是程序框图 28 6 2 先来说一下串口配置 29 串口字 VI 调用串口子 VI 程序框图 使用子 VI 可以很方便的调用 并且一看就知道是串口配置 6 3 时间同步程序 时间显示程序 6 4 发送指令程序与程序接受温度值并进行 CRC 校验实时显示波形程序 30 6 5 CRC 检验程序 这是小图标 程序框图为 程序的下载地址在最后一页 下面是效果图 31 32 以上就是我的毕业设计的介绍 通过这个设计 掌握了定时器多任务 CRC 校验 FIFO 串口使用 上位机 labVIEW 的开发及 labVIEW 的一些使用方法 意 义颇丰 通过自己动手实际操作 才能很深刻的理解应用 在这里要感谢两个 人 一个是我的单片机老师 程利民 是他把我引上单片机开发这条路 是我 入了门 并且我记得他讲过的三句话给我影响颇深 所有的程序都是由不同状态组成 搞清这些状态才能写好一个程序所有的程序都是由不同状态组成 搞清这些状态才能写好一个程序 永远不用给程序有死循环的机会永远不用给程序

温馨提示

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

评论

0/150

提交评论