仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
#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)
|