找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3417|回复: 0
收起左侧

单片机温湿度检测RS485多机通信仿真+主、从机源程序

[复制链接]
ID:1011991 发表于 2022-3-22 14:10 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif Screenshot_20220322_135253.jpg


单片机源程序如下:
#include "reg52.h"
#include "lcd1206.h"

sbit Rs485_die=P3^7; //高电平输出  低电平输入
sbit Data=P1^0;              //传感器接口
sbit KEY1=P1^1;              //传感器接口
u8 tempt1;

unsigned char RH_TP[6];


void serial_init(void);
u8 SEND_data(u8 addr);
void delay_1ms(unsigned int t);


void DISplay_RT_1()           //传感器1的数据        显示
{
///显示温度
    lcd_pos(0X03);
         LcdWriteData(RH_TP[0]+'0');
        lcd_pos(0X04);
         LcdWriteData(RH_TP[1]+'0');

///显示湿度
     lcd_pos(0X43);
         LcdWriteData(RH_TP[2]+'0');
        lcd_pos(0X44);
         LcdWriteData(RH_TP[3]+'0');


}

void DISplay_RT_2()           //传感器2的数据
{
///显示温度
    lcd_pos(0X0C);
         LcdWriteData(RH_TP[0]+'0');
        lcd_pos(0X0D);
         LcdWriteData(RH_TP[1]+'0');

///显示湿度
     lcd_pos(0X4C);
         LcdWriteData(RH_TP[2]+'0');
        lcd_pos(0X4D);
         LcdWriteData(RH_TP[3]+'0');


}




main()
{
         

        LcdInit();
        serial_init();

  Rs485_die=1;
  TB8=1;SM2=0; Rs485_die=1;         //fa song di zi        

lcd_pos(0x00);                           ///温度1
LcdWriteData( 'T');
  lcd_pos(0x01);
LcdWriteData('1');
  lcd_pos(0x02);
LcdWriteData( ':');
  lcd_pos(0x06);
LcdWriteData( 'C');

                                                        //湿度1
lcd_pos(0x40);
LcdWriteData( 'R');
  lcd_pos(0x41);
LcdWriteData('1');
  lcd_pos(0x42);
LcdWriteData( ':');
  lcd_pos(0x46);
LcdWriteData( 'H');


  lcd_pos(0x09);                ///温度2
LcdWriteData( 'T');
  lcd_pos(0x0A);
LcdWriteData( '2');
  lcd_pos(0x0B);
LcdWriteData( ':');
   lcd_pos(0x0F);
LcdWriteData( 'C');


   lcd_pos(0x49);                ///湿度2
LcdWriteData( 'T');
  lcd_pos(0x4A);
LcdWriteData( '2');
  lcd_pos(0x4B);
LcdWriteData( ':');
   lcd_pos(0x4F);
LcdWriteData( 'H');

  Data=1;

                        
  while(1)
  {


         TB8=1;
     delay_1ms(5);
         SEND_data(0x01);         //获取主机一的数据
         delay_1ms(5);
            DISplay_RT_1();              //显示获取的数据

         TB8=1;
     delay_1ms(5);
         SEND_data(0x02);         //获取主机2的数据
         delay_1ms(5);
            DISplay_RT_2();              //显示获取的数据

         if(KEY1==0)
         {
          Data=0;
         
         }else
         {
             Data=1;
         }

  }

}


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(void)
{
TMOD=0x20; //定时器1工作于方式2
TH1=0xfd;  
TL1=0xfd; //波特率为9600
PCON=0;
SCON=0xd0;  //串口工作于方式3
TR1=1;  //开启定时器
TI=0;        //                                                           清除中断标志位
RI=0;
//ES=1;                                                //打开接收中断
//EA=1;                                                //打开总中断
SM2=0;
}
//发送数据函数
u8 SEND_data(u8 addr)
{
      u8 i=0;
         
      Rs485_die=1;
      TB8=1;
          TI=0;
          SBUF=addr;
          while(!TI);
          TI=0;
            
          Rs485_die=0;
          for(i=0;i<6;i++)
          {
          RI=0;
          while(!RI);
          RH_TP[ i] =SBUF;
          RI=0;

          }

         Rs485_die=1;
}

Keil代码与Proteus仿真下载: 温湿度检测单片机485多机通信.zip (145.06 KB, 下载次数: 155)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表