硬件设计

(末尾附文件)

代码设计

#include<reg51.h>
#include<string.h>
#include "lcd.h"
#define _SUCC_   0x0f//数据传送成功
#define _ERR_    0xf0//数据传送失败
unsigned char aa=0xff;//主机与从机之间通信标志
unsigned char temp=0xff;
unsigned char Buff[20];//数据缓冲区
unsigned char recive[6];     //用于保存从机发送的数据
sbit KEY1=P1^3;
sbit KEY2=P1^2;
sbit KEY3=P1^1;
sbit KEY4=P1^0;
sbit KEY5=P3^2;
sbit KEY6=P3^3;//sbit KEY5=P1^4;
//sbit KEY6=P1^5;
//延时1ms函数
void delay_1ms(unsigned int i)
{unsigned int x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);
}
//串口初始化函数
void init()
{TMOD=0x20; //定时器1工作于方式2TH1=0xfd;  TL1=0xfd; //波特率为9600PCON=0;SCON=0xd0;  //串口工作于方式3TR1=1;  //开启定时器TI=0;RI=0;
}//发送数据函数
void SEND_data(unsigned char *Buff)
{unsigned char i,lenth,check;lenth=strlen(Buff);      //计算数据长度check=lenth;TI=0;         //发送数据长度TB8=0;       //发送数据帧SBUF=lenth;while(!TI);TI=0;for(i=0;i<lenth;i++)  //发送数据{check=check^Buff[i];TB8=0;SBUF=Buff[i];      while(!TI);TI=0;}TB8=0;      //发送校验字节SBUF=check;    while(!TI);TI=0;
}//接收数据函数
unsigned char RECE_data(unsigned char *Buff)
{unsigned char i;unsigned char lenth;unsigned char check;RI=0;     //接收数据长度while(!RI);if(RB8==1){RI = 0;    return 0xfe;  //若接收到地址帧,则返回0xfe}lenth=SBUF;RI=0;     check=lenth;for(i=0;i<lenth;i++) //接收数据{while(!RI);if(RB8==1)   //若接收到地址帧,则返回0xfereturn 0xfe;Buff[i]=SBUF;   check=check^(Buff[i]);RI=0;}while(!RI);    //接收校验字节if(RB8==1)    //若接收到地址帧,则返回0xfereturn 0xfe;temp=SBUF;RI=0;check=temp^check;  //将从主机接收到的校验码与自己计算的校验码比对if(check!=0)   //校验码不一致,表明数据接收错误,向主机发送错误信号,函数返回0xff{TI=0;TB8=0;SBUF=_ERR_;while(!TI);TI=0;return 0xff;}TI=0;           //校验码一致,表明数据接收正确,向主机发送成功信号,函数返回0x00TB8=0;SBUF=_SUCC_;         while(!TI);TI=0;return 0;
}               //发送从机地址
void ADDR_data(unsigned addr)
{while(temp!=addr) //主机等待从机返回其地址作为应答信号{TI=0;    //发送从机地址TB8=1;    //发送地址帧SBUF=addr;while(!TI);TI=0; RI=0;while(!RI);temp=SBUF;RI=0;}
}void keyscan(){if(KEY1==0){LcdWriteCom(0x01);  //清屏delay_1ms(5);if(KEY1==0){while(!KEY1);ADDR_data(0x01);//发送从机地址temp=_ERR_;   //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xfe};SEND_data(Buff);//发送数据RI=0;while(!RI);temp=SBUF;RI=0;}SM2=0;       //接收数据帧aa=0xff;    //从机接收数据,并将数据保存到数据缓冲区while(aa==0xff){aa=RECE_data(Buff);P0 = 0xff;}P0 = 0xfe;recive[0] = Buff[0];recive[1] = Buff[1];recive[2] = Buff[2];}}if(KEY2==0){LcdWriteCom(0x01);  //清屏delay_1ms(5);if(KEY2==0){while(!KEY2);ADDR_data(0x01);temp=_ERR_;   //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xff};SEND_data(Buff);RI=0;while(!RI);  RI=0;temp=SBUF;}}}if(KEY3==0){LcdWriteCom(0x01);  //清屏delay_1ms(5);if(KEY3==0){while(!KEY3);ADDR_data(0x02);temp=_ERR_;   //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xfe};SEND_data(Buff);RI=0;while(!RI);temp=SBUF;RI=0;}SM2=0;       //接收数据帧aa=0xff;    //从机接收数据,并将数据保存到数据缓冲区while(aa==0xff){aa=RECE_data(Buff);P0 = 0xff;}P0 = 0xfe;/*recive[3] = Buff[0];recive[4] = Buff[1];recive[5] = Buff[2];*/recive[0] = Buff[0];recive[1] = Buff[1];recive[2] = Buff[2];}}if(KEY4==0){LcdWriteCom(0x01);  //清屏delay_1ms(5);if(KEY4==0){while(!KEY4);ADDR_data(0x02);temp=_ERR_;   //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xff};SEND_data(Buff);RI=0;while(!RI);temp=SBUF;RI=0;}}}

链接:https://pan.baidu.com/s/1O6FYzpRDkedPM2ZW6Uivuw
提取码:5jpj

基于51单片机MAX487实现RS485多机通信protues仿真相关推荐

  1. 基于51单片机的产品数量自动计量系统protues仿真

    硬件设计 (末尾附文件) 代码设计 ///************************************************************************* ///** ...

  2. 【043】基于51单片机的篮球比赛积分计时系统Proteus仿真

    一.压缩包资料内容 (1).基于51单片机的篮球比赛积分计时系统proteus仿真设计一份: (2).基于51单片机的篮球比赛积分计时系统proteus仿真设计keli源代码一份: (3).基于51单 ...

  3. 【038】基于51单片机的土壤湿度自动浇花系统Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的土壤湿度自动浇花系统proteus仿真设计一份: (2).基于51单片机的土壤湿度自动浇花系统proteus仿真设计keli源代码一份: (3).基于51单 ...

  4. 基于51单片机HX711的电子秤称重计价proteus仿真程序设计

    设计要求 1.利用压力传感器检测重量信号,经放大和A/D转换,送单片机进行处理,并在液晶屏上显示出被称重量值: 2.最小显示单位为1克: 3.量程超过报警值蜂鸣器报警 资料下载地址:基于51单片机HX ...

  5. 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告)

    本设计: 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告) Proteus仿真版本:proteus7.8 程序编译器:keil 4 编程语言:C语言 编号C0018 ----本设计分享下 ...

  6. 基于51单片机的简易电容值测量仪proteus仿真设计

    51单片机简易电感测量仪仿真设计( proteus仿真+程序+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0039 51单片机简 ...

  7. 基于51单片机的智能超声波四轮遥控小车proteus仿真

    硬件设计 下边讲一下遥控小车,同样是基于51单片机,利用超声波进行测距,利用蓝牙模块实现遥控(仿真里边没有蓝牙,所以采用的是RS485通信模拟) 仿真图: 由LCD1602作为显示器,具有蜂鸣器报警, ...

  8. 基于51单片机的数字电压表(ADC0832)(Proteus仿真+程序)

    编号:29 基于51单片机的数字电压表(ADC0832) 功能描述: 本设计由51单片机最小系统+ADC0832模块+两路模拟量输入模块+液晶1602显示模块 1.主控制器是AT89C82单片机 2. ...

  9. 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)

    按键1:加(手动开启窗帘 按键2:减(手动关闭窗帘) 按键3:进入定时模式开启时间和光控阈值数值大小的开启 按键4:进入当前时间的设置(年.月.日.时.分的设置) 按键5:切换模式(在手动模式.定时模 ...

最新文章

  1. Xenapp安装后手动更改XML Service端口,以便使用不同于 IIS 的端口
  2. JavaScript 浮点数陷阱及解法
  3. python中__name__的使用
  4. 【Java 笔记】 java 格式化输出
  5. EntityFramework Core 2.0执行原始查询如何防止SQL注入?
  6. hadooprbac_rbac权限管理系统的学习
  7. 计算机一级重点知识,计算机一级MSOffice考试重点:数制的基本概念
  8. linux set命令例子,学习一个 Linux 命令:declare/typeset 命令
  9. 多个线程交替打印ABC,打印10次
  10. Python初学16——程序设计方法学
  11. 操作系统课设实验五---Nachos文件系统扩展
  12. QQ音乐下载qmc0/3批量转MP3工具
  13. msn 邮箱服务器,MSN邮箱的POP怎么设置?
  14. intel hd3000 本 在 64位 ubuntu10.04 下 液晶亮度无法调节 的解决之道(亲测)
  15. 【路径规划】基于粒子群算法实现机器人栅格地图路径规划matlab源码
  16. php mysql好学吗_零基础小白PHP开发好学吗
  17. 4k视频写入速度要求_4K视频要用什么卡?极速专业存储卡盘点
  18. 有关直方图的常用操作
  19. 大疆 android 简书,实测大疆智图与CC(Smart3D)三维建模、正射拼图对比
  20. 西游记中孙悟空成佛后地位比观世音菩萨高吗?

热门文章

  1. 强力推荐各位攻城狮查看,收藏IT职业技能图谱(全套13张)
  2. 2017年全球大数据产业报告之海外篇(第六集)
  3. Android修行手册 - RatingBar全解
  4. 玩弄互联网的寒潮,有必要吗?
  5. 长生生物收到深交所重大违法强制退市决定,2019首支退市股!...
  6. python调用vbs脚本_使用python创建的参数执行vbs文件
  7. java坦克大战总体功能设计_Java编程:坦克大战游戏的设计
  8. 武汉最牛批的互联网基本都在这了!
  9. 一台计算机连接两个投影,如何实现多台电脑连接一台投影仪并快速切换
  10. 用git拉取微信小程序项目到本地运行(简单实用)