温度数据采集与无线传输系统设计.docx

上传人:b****2 文档编号:11526153 上传时间:2023-06-01 格式:DOCX 页数:21 大小:37.36KB
下载 相关 举报
温度数据采集与无线传输系统设计.docx_第1页
第1页 / 共21页
温度数据采集与无线传输系统设计.docx_第2页
第2页 / 共21页
温度数据采集与无线传输系统设计.docx_第3页
第3页 / 共21页
温度数据采集与无线传输系统设计.docx_第4页
第4页 / 共21页
温度数据采集与无线传输系统设计.docx_第5页
第5页 / 共21页
温度数据采集与无线传输系统设计.docx_第6页
第6页 / 共21页
温度数据采集与无线传输系统设计.docx_第7页
第7页 / 共21页
温度数据采集与无线传输系统设计.docx_第8页
第8页 / 共21页
温度数据采集与无线传输系统设计.docx_第9页
第9页 / 共21页
温度数据采集与无线传输系统设计.docx_第10页
第10页 / 共21页
温度数据采集与无线传输系统设计.docx_第11页
第11页 / 共21页
温度数据采集与无线传输系统设计.docx_第12页
第12页 / 共21页
温度数据采集与无线传输系统设计.docx_第13页
第13页 / 共21页
温度数据采集与无线传输系统设计.docx_第14页
第14页 / 共21页
温度数据采集与无线传输系统设计.docx_第15页
第15页 / 共21页
温度数据采集与无线传输系统设计.docx_第16页
第16页 / 共21页
温度数据采集与无线传输系统设计.docx_第17页
第17页 / 共21页
温度数据采集与无线传输系统设计.docx_第18页
第18页 / 共21页
温度数据采集与无线传输系统设计.docx_第19页
第19页 / 共21页
温度数据采集与无线传输系统设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

温度数据采集与无线传输系统设计.docx

《温度数据采集与无线传输系统设计.docx》由会员分享,可在线阅读,更多相关《温度数据采集与无线传输系统设计.docx(21页珍藏版)》请在冰点文库上搜索。

温度数据采集与无线传输系统设计.docx

温度数据采集与无线传输系统设计

1.硬件连接原理图

2.源程序

(1)DS18B20

#include"ds18b20.h"

ucharcodeid[DS18B20_NUM][8]={

{0x28,0xfe,0xb3,0x82,0x02,0x00,0x00,0xef},

/*保存有18b20ID*/

{0x28,0x95,0x78,0x82,0x02,0x00,0x00,0x86}

};

voidwriteBit0(void);

voidwriteBit1(void);

ucharreadBit(void);

voidwriteByte(ucharwbyte)

{

bitwbit;

uchari;

for(i=0;i<8;i++)

{

wbit=wbyte&0x01;

wbyte=wbyte>>1;

if(wbit)

writeBit1();

else

writeBit0();

}

}

ucharreadByte(void)

{

ucharrbyte=0;

chari,j;

for(i=0;i<8;i++)

{

j=readBit();

rbyte=(j<<7)|(rbyte>>1);

}

returnrbyte;

}

voidselectedDq(ucharselect)

{

uchari;

if(select>3)

writeByte(0xcc);

else

{

writeByte(0x55);

for(i=0;i<8;i++)

{

writeByte(id[select][i]);

}

}

}

uintreadTemp(ucharselected)

{

uinttemp;

uchardatatempdata[2]={0x00,0x00};

resetDQ();

_nop_();

_nop_();

_nop_();

selectedDq(selected);

writeByte(0x44);

resetDQ();

_nop_();

_nop_();

_nop_();

_nop_();

selectedDq(selected);

writeByte(0xbe);

tempdata[0]=readByte();

tempdata[1]=readByte();

temp=tempdata[1];

temp<<=8;

temp=temp|tempdata[0];

returntemp;

}

)nRF905

#include"nRF905.h"

#ifdefSET_TX_MODE

uchardataTxBuf[DATA_LONG];

#else

uchardataRxBuf[DATA_LONG];

#endif

ucharcodeRxTxConf[10]=

{

0x4c,

0x0c,

ADDR_LONG*0x11,

DATA_LONG,

DATA_LONG,

RXADDR,

RXADDR,

RXADDR,

RXADDR,

0x58

};

ucharbdataSPI_BUF;

sbitspi_buf0=SPI_BUF^0;

sbitspi_buf7=SPI_BUF^7;

voidspiWrite(ucharwrByte)

{

uchari;

SPI_BUF=wrByte;

for(i=0;i<8;i++)

{

if(spi_buf7)

MOSI=1;

else

MOSI=0;

_nop_();

SCK=1;

_nop_();

_nop_();

_nop_();

SPI_BUF=SPI_BUF<<1;

_nop_();

SCK=0;

}

MOSI=0;

}

ucharspiRead(void)

{

uchari;

for(i=0;i<8;i++)

{

SPI_BUF=SPI_BUF<<1;

SCK=1;

if(MISO)

spi_buf0=1;

else

spi_buf0=0;

_nop_();

_nop_();

_nop_();

SCK=0;

}

returnSPI_BUF;

}

voidenSPI(void)

{

CSN=0;

}

voiduenSPI(void)

{

CSN=1;

}

voidinit905(void)

{

LED=0;

uenSPI();

SCK=0;

DR=1;

AM=1;

PWR_UP=1;

TRX_CE=0;

TX_EN=0;

delay_11us(200);

LED=1;

}

voidconfig905(void)

{

uchari;

LED=0;

enSPI();

spiWrite(WC);

for(i=0;i<10;i++)

{

spiWrite(RxTxConf[i]);

}

uenSPI();

delay_11us(200);

LED=1;

}

#ifdefSET_TX_MODE

voidsetTxMode(void)

{

TX_EN=1;

TRX_CE=0;

delay_11us(60);

}

voidTxPacket(void)

{

uchari;

LED=0;

enSPI();

spiWrite(WTP);

_nop_();

_nop_();

for(i=0;i

{

spiWrite(TxBuf[i]);

}

uenSPI();

delay_11us

(1);

enSPI();

spiWrite(WTA);

_nop_();

_nop_();

for(i=0;i

{

spiWrite(TXADDR);

}

uenSPI();

TRX_CE=1;

delay_11us(200);

TRX_CE=0;

while(!

DR);

LED=1;

}

#else

voidsetRxMode(void)

{

TX_EN=0;

TRX_CE=1;

delay_11us(60);

}

voidRxPacket(void)

{

uchari;

LED=0;

while(!

DR);

enSPI();

spiWrite(RRP);

for(i=0;i

{

RxBuf[i]=spiRead();

}

uenSPI();

delay_11us(10);

LED=1;

}

#endif

)LCD

#include"lcd1602.h"

#ifndef_CODE_LINE0_

uchardatamyLine0[DISPLONG0];

#else

#defineDISPLONG04

ucharcodemyLine0[]={'T','E','M','P'};

#endif

#ifndef_CODE_LINE1_

uchardatamyLine1[DISPLONG1];

#else

#defineDISPLONG13

ucharcodemyLine1[]={'z','z','z'};

#endif

#ifdef_MAKE_CHAR_

uchardatamyChar[]={0,0,0,0,0,0,0,0};

#endif

voidwrLCDCmd(ucharcmd)

{

while(isLCDBusy());

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

LCD_DB=cmd;

delay_11us

(1);

LCD_EN=1;

delay_11us

(2);

LCD_EN=0;

}

voidwrLCDDat(uchardat)

{

while(isLCDBusy());

LCD_RS=1;

LCD_RW=0;

LCD_EN=0;

LCD_DB=dat;

delay_11us

(1);

LCD_EN=1;

delay_11us

(2);

LCD_EN=0;

}

bitisLCDBusy(void)

{

bitisBusy;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

delay_11us

(1);

isBusy=LCD_BF;

LCD_EN=0;

returnisBusy;

}

voidinitLCD1602(void)

{

wrLCDCmd(CLEAR);

delay_11us(200);

wrLCDCmd(FUNC);

delay_11us(5);

wrLCDCmd(DISP);

delay_11us(5);

wrLCDCmd(MODE);

delay_11us(5);

wrLCDCmd(CLEAR);

delay_11us(200);

}

voidsetAddrLCD(ucharpos)

{

wrLCDCmd(pos|0x80);

delay_11us(5);

}

#ifdef_MAKE_CHAR_

voidwrCGRAM(ucharpos)

{

uchari;

wrLCDCmd(0x40||(pos<<3));

delay_11us(5);

for(i=0;i<8;i++)

wrLCDDat(myChar[i]);

}

#endif

voiddispLCD(void)

{

ucharm;

setAddrLCD(0x00);

for(m=0;m

{

wrLCDDat(myLine0[m]);

}

setAddrLCD(0x40);

for(m=0;m

{

wrLCDDat(myLine1[m]);

}

}

)发送主函数

#include"src\nRF905\nRF905.h"

#include"src\DS18B20\ds18b20.h"

#include"src\lcd1602\lcd1602.h"

uchardatabuffer[]={0,0,0,0,0};

ucharcodepoint[16]=

{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

voidsaveTemp(uint,uchar);

voidshowTemp(void);

voidinitLCDdata(void);

voidmain()

{

uchari;

uinttemp;

initLCD1602();

initLCDdata();

init905();

config905();

while

(1)

{

for(i=0;i

{

temp=readTemp(i);

saveTemp(temp,i);

showTemp();

dispLCD();

setTxMode();

TxPacket();

delay_11us(50000);

}

}

}

voidsaveTemp(uinttemp,ucharid)

{

uchari;

buffer[0]=id;

if(temp>6348)

{

temp=65536-temp;

buffer[1]=1;

}

else

buffer[1]=0;

buffer[4]=point[(temp&0x0f)];

buffer[2]=temp>>4;

buffer[3]=buffer[2]%10;

buffer[2]=buffer[2]/10;

for(i=0;i<5;i++)

{

TxBuf[i]=buffer[i];

}

}

voidinitLCDdata(void)

{

myLine1[0]='N';

myLine1[1]='O';

myLine1[2]='.';

myLine1[3]='3';

myLine1[4]=':

';

myLine1[5]=0x20;

myLine1[6]='-';

myLine1[7]='1';

myLine1[8]='9';

myLine1[9]='.';

myLine1[10]='5';

myLine1[11]=0xdf;

myLine1[12]='C';

}

voidshowTemp(void)

{

myLine1[3]=TxBuf[0]+0x30;

if(TxBuf[1])

myLine1[6]=0x2d;

else

myLine1[6]=0x20;

if(TxBuf[2])

myLine1[7]=TxBuf[2]+0x30;

else

myLine1[7]=0x20;

myLine1[8]=TxBuf[3]+0x30;

myLine1[10]=TxBuf[4]+0x30;

}

)接收主函数

#include"src\lcd1602\lcd1602.h"

#include"src\nRF905\nRF905.h"

voidsaveTemp(void);

voidinitLCDdata(void);

voidmain()

{

init905();

config905();

initLCD1602();

initUART();

while

(1)

{

setRxMode();

RxPacket();

initLCDdata();

delay_11us(5000);

saveTemp();

dispLCD();

delay_11us(5000);

/*for(i=0;i

{

SBUF=RxBuf[i];

while(TI==0);

TI=0;

}*/

delay_11us(50000);

delay_11us(50000);

delay_11us(50000);

}

}

voidsaveTemp(void)

{

myLine1[3]=RxBuf[0]+0x30;

if(RxBuf[1])

myLine1[6]=0x2d;

else

myLine1[6]=0x20;

if(RxBuf[2])

myLine1[7]=RxBuf[2]+0x30;

else

myLine1[7]=0x20;

myLine1[8]=RxBuf[3]+0x30;

myLine1[10]=RxBuf[4]+0x30;

}

voidinitLCDdata(void)

{

myLine1[0]='N';

myLine1[1]='O';

myLine1[2]='.';

myLine1[3]='3';

myLine1[4]=':

';

myLine1[5]=0x20;

myLine1[6]='-';

myLine1[7]='1';

myLine1[8]='9';

myLine1[9]='.';

myLine1[10]='5';

myLine1[11]=0xdf;

myLine1[12]='C';

}

)延时子函数和串口调试

#include"config.h"

voiddelay_11us(uintt)

{for(;t>0;t--);}

voidinitUART(void)

{

SCON=0x40;

PCON=0;

REN=1;

TMOD=0x20;

TH1=0xe8;

TL1=0xe8;

TR1=1;

}

(7)配置

#ifndef_nRF905_H_

#define_nRF905_H_

#include"..\config.h"

#ifndef_CONFIG_RF905_

#define_CONFIG_RF905_

#defineSET_TX_MODE

#ifdefSET_TX_MODE

#defineRXADDR0xcc

#defineTXADDR0xcc

#else

#defineRXADDR0xcc

#defineTXADDR0xcc

#endif

#defineDATA_LONG32

#defineADDR_LONG4

sbitTX_EN=P0^0;

sbitTRX_CE=P0^1;

sbitPWR_UP=P1^1;

sbitAM=P0^2;

sbitDR=P1^2;

sbitMISO=P0^3;

sbitMOSI=P0^4;

sbitSCK=P0^5;

sbitCSN=P0^6;

//sbitCD=P2^3;

sbitLED=P0^7;

#defineWC0x00

#defineRC0X10

#defineWTP0x20

#defineRTP0x21

#defineWTA0x22

#defineRTA0x23

#defineRRP0x24

voidenSPI(void);

voiduenSPI(void);

voidspiWrite(uchar);

ucharspiRead(void);

voidinit905(void);

voidconfig905(void);

#ifdefSET_TX_MODE

externucharTxBuf[DATA_LONG];

voidsetTxMode(void);

voidTxPacket(void);

#else

externucharRxBuf[DATA_LONG];

voidsetRxMode(void);

voidRxPacket(void);

#endif

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2