- 2
- 0
- 约2.89千字
- 约 6页
- 2017-09-03 发布于湖北
- 举报
远程温度监控系统(无线的)(程序已附)
2007年06月25日 星期一 13:15
?????? 搞了一个星期终于在最后时刻搞出来了,这其中我可是熬了两个通宵,不容易啊,不过搞出来还是很欣慰的。不说废话了,介绍下我做的东西吧。
?????? DS18B20测量多路温度(我做了两路,两个18B20在一条总线上,占了1个IO口),然后温度被单片机读取出来,经过处理,再编码,通过DF无线发射模块发射出去,这是下位机系统。上位机系统:DF无线接受模块把接受到的信号传给单片机,单片机对信号进行解码,然后通过LED显示出来,两个按键用来选择显示第几路温度。
?????? 系统就是这样了,感觉很简单,做的时候可没少费功夫啊,光那个无线发射接受的解码就搞了好几天才搞出来,18B20的多路数据读取也郁闷了一小下,呵呵。本来是湿度也要做的,可是没买到湿度传感器也就算了。
?????? 18B20的程序网上多的是,我就不发了。
????????????????? 发射模块
????????????????? 接受模块
????????????????????????????????????????? 编码格式
码组格式: 前导码+同步码+ 数据帧
编码程序
includereg51.hsbit send=P1^1;
void delay(int cnt){??? int i;??? for(i=0;icnt;i++);}
/*发送同步信号*/void send_tong(void){??? send=1;??? delay(624);??? send=0;??? delay(10);}/*发送一位数据*/void send_bit(unsigned char cet){??? if(cet)???? {?????? send=1;?????? delay(49);?????? send=0;?????? delay(24);????? }???? else???? {?????? send=1;?????? delay(24);?????? send=0;?????? delay(49);???? }}
/*发送一字节数据*/void send_byte( unsigned char dat){???? unsigned char i;unsigned char t;????? for(i=0;i8;i++){??????? t=dati;???? t=t0x01;???? send_bit(t);?????? }??? }
/*send_dats*/void main(void){
??? send_byte(0xfe);??? send_byte(0xfe);/*发前导码*/while(1){
??????? send_tong();/*发同步码*/??????? send_byte(0xaa);??????? send_byte(0x56);
???? }
}
接受解码程序
#includereg51.h
sbit rec=P1^0;bit flag;unsigned char??? get[2]={0x11,0x12};unsigned int N;
/*定时中断*/void time(void)interrupt 1 using 1{??? N=N+1;??? }
/*************接受同步码****************/unsigned char rec_tong(void){??? unsigned char a;???? N=0;????? while(!rec);???? while(rec);???? TR0=1;
???? while(!rec);?????? TR0=0;
??? if(N180N220)a=1;??? else a=0;??? return a;
}
/*接受1位数据*/unsigned char rec_bit(void){??? unsigned char a[6],b;??? N=0;??? while(rec);??? TR0=1;??? while(TR0)??? {????? if(N==2){a[0]=rec;}???????? else if(N==6)a[1]=rec;????????? else if(N==10)a[2]=rec;??????????? else if(N==14)a[3]=rec;???????????? else if(N==18)a[4]=rec;?????????????? else if
原创力文档

文档评论(0)