智能仪器课程设计报告_第1页
智能仪器课程设计报告_第2页
智能仪器课程设计报告_第3页
智能仪器课程设计报告_第4页
智能仪器课程设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

智能仪器设计课程设计报告智能仪器设计课程设计报告 采用采用 RSRS 485485 标准的主从式多机系统设标准的主从式多机系统设 计计 学生姓名 学生姓名 王王 学学 号 号 班班 级 级 任课教师 任课教师 成成 绩 绩 1 1 设计要求设计要求 a 系统基本结构 1个51系列单片机主机 2个51系列单片机从机 从机1 和从机2 采用RS 485组成主从式多机系统 b 系统基本功能 在主机键盘上按 1 键 从机1的LED数码显示器上显 示 1 此后从机1键盘上每按下1个数字键 主机LED数码显示器上能显示对 应的数字 当从机1键盘上按下 0 键时 此次通信结束 从机1键盘上再按下 任意数字键 主机不显示相应数字 在主机键盘上按 2 从机2的LED数码 显示器上显示 2 此后从机2键盘上每按下1个数字键 主机LED数码显示器 上能显示对应的数字 当从机2键盘上按下 0 键时 此次通信结束 从机2键 盘上按下任意数字键后 主机不显示相应数字 c 选做 从机 1 和从机 2 可设计成相关物理量的测量系统 当主机呼叫从 机时 从机能把最新的测量值发给主机 2 2 方案论证方案论证 1 系统组成 系统组成 由三个 51 单片机构成主从通信系统 本组使用的芯片型号是 STC89C52 其功能是一致的 每个单片机搭配 LED 数码管显示器和键盘 通信 采用 RS 485 标准 可使用 MAX485 芯片作为通信收发器 单片机控制 MAX485 的 使能端进行发送和接受逻辑控制 单主机多从机的通讯系统需要区分地址信息 和数据信息 可利用 51 串口模式中的模式 2 进行通信 修改主机的 SCON 3 状 态表明主机发送的是否是地址信息 修改某台从机的 SM2 状态来建立和主机的 唯一通信 数据输入使用键盘输入 数据显示可简单的使用数码管显示 图 1 系统结构图 2 2 串口模式分析 串口模式分析 51 单片机串口的 2 3 模式下是作为 11 位异步通信用 8 位数据位后的第九位是可编程位 SCON 3 主机可以对此位进行 0 或 1 赋值 进 行地址信息和数据信息的区分 通常赋为 1 表示地址信息 为 0 表示数据信息 51 单片机的串行口控制寄存器 SCON 的 SM2 位是专门用来使通信接口具有识别 功能的多机控制位 在串行口以方式 2 3 接收时 若 SM2 1 此时出现两种情 况 第一 接收到的第九位为 1 单片机接收时可编程位进入 SCON 2 则前 8 位数据装入 SBUF 并置 RI 为 1 产生中断标志 第二 接收到的第九位为 0 则不产生中断标志 接收信息被弃 若 SM2 0 则接收到的第九位无论为 0 还 是 1 RI 均为 1 产生中断标志 接收到的前 8 位数据装入 SBUF 所以多机通 信可按下述过程进行 参与通信的所有从机的 SM2 位置 1 即从机处于只接收地址帧的状态 主机发送一帧地址信息 包括 8 位地址及第九位地址 数据标志位 该位应为 1 表示该帧信息的前 8 位为地址 由于从机的 SM2 位已置 1 故主机发送的地址信息被所有从机收到 各从机 鉴别接收到的地址信息是否与本机地址相同 每个从机已规定其相应的地址 对于接收到的地址与本机地址相符的从机 通过程序将其 SM2 置为 0 这样主 机之后发送的其他数据信息将被选中的从机接收到 主机与所选的从机之间通 信 主机可向从机发送命令数据或从机向主机发送相关的测量结果等 由于未 选中的从机的 SM2 仍为 1 故未选中的从机将不理会主机与选中从机之间传送 的数据信息 因为这些信息的第九位均为 0 直到主机发送新的地址帧为止 MAX485MAX485 芯片的使用芯片的使用 MAX485 是 MAXIM 公司推出的专门用于 RS 485 标准通信的 接口芯片 它是半双工工作的收发器 其典型工作电路如图 2 所示 图 2 MAX485 工作电路 其中管脚 DE 是收发器的控制脚 根据 MAX485 的逻辑功能表 DE 都RERE 置为高电平 则发送器可工作 接收器不工作 DE 都置为低电平 则接RE 收器可工作 发送器不工作 发送器和接收器无法同时工作 所以可用单片机 的 io 口使能 DE 来实现半双工通信 51 与 MAX485 的接口示意图如下 RE 图 3 单片机与 MAX485 连接示意图 3 3 键盘设计 键盘设计 根据题意 主机由于只需使用到两个按键 所以主机的按键可 使用独立式按键方式 即两个按键接入单片机的两个 io 口 通过判断高低电平 判断哪个键被按下 从机则需要使用矩阵式键盘 本组使用 4 4 的矩阵式键盘 并用线反转法进行键值扫描 4 显示单元 显示单元 由于需要显示的信息比较简单 所以可以简单的使用 LED 数码 管来显示 本组使用的单片机开发板上集成了 4 个数码管 共用一个译码器 可以通过循环点亮的方式显示多个数字 3 3 硬件设计硬件设计 主机和从机通过 MAX485 连接的电气图 图 4 主机和从机通过 MAX485 连接的电气图 主机和按键 数码管的连接图 从机和键盘 数码管的连接图 图 5 主机和按键 数码管的连接图 图 6 从机和键盘 数码管的连接图 4 4 软件设计软件设计 led led 数码管显示子程序 数码管显示子程序 单片机开发板上的 LED 数码管是共阳极连接方式 数码管的 a h 脚分别连 到 P0 0 P0 7 四个 LED 的控制角分别接到 P2 0 P2 3 在数码管上需要显示的 数字或字符的共阳极代码如下 显示 内容 共阳极 代码 显示 内容 共阳极 代码 显示 内容 共阳极 代码 显示 内容 共阳极 代码 显示 内容 共阳极 代码 0C0H3B0H682H96FHdA1H 1F9H499H7F8HE79H 2A4H592H880HNC8H 程序代码 define uchar unsigned char sbit P2 0 P2 0 用来点亮数码管 1 sbit P2 1 P2 1 用来点亮数码管 2 sbit P2 2 P2 2 用来点亮数码管 3 sbit P2 3 P2 3 用来点亮数码管 4 uchar code table 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 0 x80 0 x90 液晶查询表 void display 1 unsigned int number void display 2 unsigned int number void display 3 unsigned int number void display 4 unsigned int number 函数名 void display 1 参数 unsigned int number 作用 根据输入的数字点亮显示数码管 1 void display 1 unsigned int number P0 table number P2 0 0 函数名 void display 2 参数 unsigned int number 作用 根据输入的数字点亮显示数码管 2 void display 2 unsigned int number P0 table number P2 1 0 函数名 void display 3 参数 unsigned int number 作用 根据输入的数字点亮显示数码管 3 void display 3 unsigned int number P0 table number P2 2 0 函数名 void display 4 参数 unsigned int number 作用 根据输入的数字点亮显示数码管 4 void display 4 unsigned int number P0 table number P2 3 0 键盘扫描子程序键盘扫描子程序 使用线反转法扫描键盘 矩阵键盘的 1 4 行接入 P1 7 P1 4 1 4 列接入 P1 3 P1 0 同时 P1 3 P1 0 接上拉电阻 线反转法的步骤 1 将列线作为输 出线 行线作为输入线 置输出线全部为 0 此时行线中呈低电平 0 的为按键 所在行 如果全部都不是 0 则没有按键按下 2 将第一步反过来 即将行线 作为输出线 列线作为输入线 置输出线全部为 0 此时列线中呈低电平 0 的 为按键所在列 至此便确定了按键的位置 可根据行列参数查询实现写好的键 值表 获取键值 线反转法扫键流程图 图 7 键盘子程序流程图 扫描键盘子程序代码 include int hang 定义行号 int lie 定义列号 unsigned int Key Val 1 保存键值 unsigned int keymap 1 2 3 0 4 5 6 0 7 8 9 0 0 0 0 0 设置键盘 逻辑键值 int KeyScan 扫键子函数 void Delay 延时 key Val 对应键值 列 p13 p12 p11 p10 行 p17 1 1 2 2 3 3 4 A p16 5 4 6 5 7 6 8 B p15 9 7 10 8 11 9 12 C p14 13 14 0 15 16 D void Delay 延时子函数 long i for i 1000 i 0 i int KeyScan 扫键子函数 P1 0 xF0 列输出全 0 if P1 break case 0 xB0 hang 2 break case 0 xD0 hang 3 break case 0 xE0 hang 4 break default break Delay 延时去抖动 P1 0 x0F 行输出全 0 if P1 break case 0 x0B lie 2 break case 0 x0D lie 3 break case 0 x0E lie 4 break default break return 1 扫描到按键按下 则返回 1 else return 0 未扫描到按键按下 返回 0 主机程序 主机程序 在主机主程序中首先进行串口的配置 需要将串口置为模式 3 然后程序 一直循环查询是否有按键按下 K1 或 K2 如果有按键按下 则进入与从机通 信的子程序 主机主程序流程图 图 8 主机主程序流程图 主机与从机通信的子程序是主机程序的最关键部分 负责主机与从机建立 联系 数据通信和终止连接的任务 以按下按键 K1 为例 按下 K1 表示应与从 机 1 通信 程序进入通信子程序 首先主机向所有从机发送从机 1 的地址 0 x01 然后主机等待从机 1 的回应 从机 1 收到请求会发回本机的地址信号 0 x01 作为回应 接收到回应则继续进行通信 然后主机一直处于接收状态 循环接收从机发送的数据 并将数据通过数码管显示 直到接收到数据 0 则 退出子程序 注意由于单片机外接 MAX485 进行通信 所以在发送或接收前需要 改变控制脚 DE 改变 MAX485 的收发状态 RE 图 9 主机与子程序通信流程图 主机程序代码 主机程序 include include include sbit RE P3 2 MAX485 的控制脚 RE 和 DE sbit DE P3 3 发送时置高 接收时置地 unsigned char temp 0 xff sbit KEY1 P2 4 P2 4 P2 5 是两个按键 sbit KEY2 P2 5 延时 1ms 函数 void delay 1ms unsigned int t unsigned int x y for x t x 0 x for y 110 y 0 y 串口初始化函数 void serial init TMOD 0 x20 定时器 1 工作于方式 2 TH1 0 xfd TL1 0 xfd 波特率为 9600 PCON 0 SCON 0 xd0 串口工作于方式 3 TR1 1 开启定时器 TI 0 RI 0 向指定从机地址发送数据 和从机通信 void ADDR data unsigned addr int j 0 while temp addr 主机等待从机返回其地址作为应答信号 RE 1 发送状态 DE 1 TI 0 发送从机地址 TB8 1 发送地址帧 SBUF addr while TI TI 0 RE 0 接收状态 DE 0 RI 0 接收从机应答信号 while RI temp SBUF 从机会发送自己的地址作为回应 RI 0 选通从机后跳出循环 display 1 addr 接通后在数码管上显示 1 或 2 主机循环接收从机发过来的数字信号并在数码管上显示 直到接收到 0 do RE 0 接收状态 DE 0 RI 0 while RI temp SBUF RI 0 display 1 temp 在数码管上显示数字 while temp 0 接收到 0 表示此次通信结束 数码管闪烁表示 for j 0 j 50 j display 1 addr delay 1ms 10 P2 0 1 P0 0 x86 P2 1 0 delay 1ms 10 P2 1 1 P0 0 xc8 P2 2 0 delay 1ms 10 P2 2 1 P0 0 xa1 P2 3 0 delay 1ms 10 P2 3 1 void main RE 1 DE 1 初始为发送状态 serial init while 1 if KEY1 0 delay 1ms 5 消抖 if KEY1 0 while KEY1 ADDR data 0 x01 if KEY2 0 delay 1ms 5 if KEY2 0 while KEY2 ADDR data 0 x02 RE 1 DE 1 重置为发送状态 从机程序 从机程序 从机首先进行串口初始化 然后处于循环接收状态 即等待主机的请求 如果接收缓存区有数据 判断是否等于本机地址 等于则表明有主机请求 则 再向主机发送本机地址作为回应 然后从机进入读键子程序 循环读出键值并 将键值发送到主机 直到有 0 键按下 从机将 0 发送后退出子程序 即结束此 次通信 重新开始主循环 注意由于单片机外接 MAX485 进行通信 所以在发送 或接收前需要改变控制脚 DE 改变 MAX485 的收发状态 RE 从机主程序流程图 图 10 从机程序流程图 从机程序代码 从机 1 从机 1 程序 include include include include define addr 0 x01 从机 2 的地址 sbit RE P3 2 MAX485 的控制脚 RE 和 DE sbit DE P3 3 发送时置高 接收时置地 unsigned char aa 0 xff 主机与从机之间通信标志 延时 1ms 函数 void delay 1ms unsigned int t unsigned int x y for x t x 0 x for y 110 y 0 y 串口初始化函数 void serial init TMOD 0 x20 定时器 1 工作于方式 2 TH1 0 xfd TL1 0 xfd 波特率为 9600 PCON 0 SCON 0 xd0 串口工作于方式 3 TR1 1 开启定时器 TI 0 RI 0 void main unsigned int Key unsigned int j RE 0 DE 0 初始为接收状态 serial init while 1 SM2 1 接收地址帧 while aa addr 从机等待主机请求自己的地址 RE 0 接收状态 DE 0 RI 0 while RI aa SBUF RI 0 RE 1 发送状态 DE 1 TI 0 一旦被请求 从机返回自己地址作为应答 等待接收数据 TB8 0 SBUF addr while TI TI 0 SM2 0

温馨提示

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

评论

0/150

提交评论