MD600G的Internet無線傳感器網(wǎng)絡設計
2.3 節(jié)點溫度采集軟件設計
#include Mini51B.h//Mini51板頭文件
#include LCD1602.h//液晶模塊頭文件
#include ds18b20.h//溫度傳感器頭文件
#include stdio.h//C標準函數(shù)庫,系統(tǒng)集成
#include DS1302.h
#define uchar unsigned char
uchar n,temp;
uchar a[6]=000000; //串口字符串
SYSTEMTIME RTC;
void main(void) {
float V; //記錄溫度浮點型
uchar str_buff[20];//字符緩沖區(qū)
SCON=0x50;//串口工作在方式1,波特率9600,//晶振為22.1184 MHz
PCON=0;
TMOD=0x20;//定時器1工作在方式2
TH1=0xfa;
TL1=0xfa;
IE=0x91;//1001 0001,EA=1,ES=1,EX0=1
IT0=1;//外部中斷0為低電平觸發(fā)方式
TR1=1;//定時器T1開始計數(shù)
ds18b20_init();//初始化溫度傳感器時鐘測試
Initial_DS1302();//初始化時鐘時間設定,執(zhí)行一次后刪除該部分
Write1302(DS1302_MINUTE, 0x11);
Write1302(DS1302_HOUR,0x08);
Write1302(DS1302_DAY,0x15);
Write1302(DS1302_MONTH,0x04);
Write1302(DS1302_YEAR,0x08);
lcd1602_init();
lcd_put_xyns(2,1,14,www.stuelab.cn);
delay_ms(1000);
while(1) {
for(n=0;n10;n++) { //10*0.5 s=5 s數(shù)據(jù)發(fā)送周期
V=ReadTemperature()/100.0; //溫度部分
sprintf(str_buff,%2.2f,V); //格式轉換
lcd_put_xyns(1,1,11,Temperatur=);
lcd_put_xyns(12,1,5,str_buff);
seg7_disp(V*100);
sprintf(a,%2.2f,V);//送串口字符串
DS1302_GetTime(RTC);//時間部分
DateToStr(RTC);
TimeToStr(RTC);
lcd_put_xyns(1,2,8,RTC.DateString);
lcd_put_xyns(9,2,8,RTC.TimeString);
delay_ms(500);
}
for(n=0;n6;n++) {
SBUF=a[n];
while(!TI);
TI=0;
}
}
}
void external0() interrupt 0{//外部中斷0發(fā)送數(shù)據(jù)
for(n=0;n6;n++) {
SBUF=a[n];
while(!TI);
TI=0;
}
delay_ms(1100);
}
void receving() interrupt 4 {//串口中斷程序接收數(shù)據(jù)
temp=SBUF;
RI=0;
}
結語
經(jīng)過實際運行和測試證明,系統(tǒng)穩(wěn)定可靠,系統(tǒng)誤差達到了規(guī)定的要求。本系統(tǒng)雖然是以無線溫度傳感器節(jié)點為例,但同樣也適合其他各種類型的無線傳感器節(jié)點,因此可以推廣到無線傳感器網(wǎng)絡的其他應用領域或行業(yè),如電力抄表、配電自動化、路燈監(jiān)控、道路交通等。
評論