|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
#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的數(shù)據(jù) 顯示
{
///顯示溫度
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的數(shù)據(jù)
{
///顯示溫度
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); //獲取主機(jī)一的數(shù)據(jù)
delay_1ms(5);
DISplay_RT_1(); //顯示獲取的數(shù)據(jù)
TB8=1;
delay_1ms(5);
SEND_data(0x02); //獲取主機(jī)2的數(shù)據(jù)
delay_1ms(5);
DISplay_RT_2(); //顯示獲取的數(shù)據(jù)
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--);
}
//緩沖區(qū)初始化
//串口初始化函數(shù)
void serial_init(void)
{
TMOD=0x20; //定時(shí)器1工作于方式2
TH1=0xfd;
TL1=0xfd; //波特率為9600
PCON=0;
SCON=0xd0; //串口工作于方式3
TR1=1; //開啟定時(shí)器
TI=0; // 清除中斷標(biāo)志位
RI=0;
//ES=1; //打開接收中斷
//EA=1; //打開總中斷
SM2=0;
}
//發(fā)送數(shù)據(jù)函數(shù)
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仿真下載:
溫濕度檢測(cè)單片機(jī)485多機(jī)通信.zip
(145.06 KB, 下載次數(shù): 155)
2022-3-22 14:02 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|