毕业论文 - 基于51单片机和NRF24L01的无线温度监控 - 图文

发布时间 : 星期三 文章毕业论文 - 基于51单片机和NRF24L01的无线温度监控 - 图文更新完毕开始阅读

SPI_RW_reg(WRITE_REG+SETUP_RETR,0X1F); SPI_RW_reg(WRITE_REG+RF_CH,40); SPI_RW_reg(WRITE_REG+RF_SETUP,0X0F); SPI_RW_reg(WRITE_REG+CONFIG,0X0e); CE=1; }

//NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);//写入数据 uchar Check_ACK() {

// while(IRQ); // CE=0; sta=SPI_read(STATUS); if(TX_DS||MAX_RT) {

// if(clear) // 是否清除TX FIFO,没有清除在复位MAX_RT中断标志后重发 SPI_RW_reg(WRITE_REG + STATUS, 0xff); // 清除TX_DS或MAX_RT中断标志 CSN=0; SPI_RW(FLUSH_TX); CSN=1; return (1); } else return (0); // CE=1; IRQ = 1; // if(TX_DS) // return(0x00); // else

// return(0xff);

} /*

unchar CheckACK() { //用于发射 sta=NRFReadReg(R_REGISTER+STATUS); // 返回状态寄存器 if(TX_DS||MAX_RT) //发送完毕中断 { NRFWriteReg(W_REGISTER+STATUS,0xff); // 清除TX_DS或MAX_RT中断标志 CSN=0; NRFSPI(FLUSH_TX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!! CSN=1;

没有天生的聪明 只有不懈的努力

28

return(0); } else return(1); } */

void delayus(uint z,uint x) { uint i,j; for(i=z;i>0;i--) for(j=x;j>0;j--); }

void dreset(void) //初始化 { uint i; // ds=1; // _nop_(); ds=0; delayus(7,15); ds=1; i=4; while(i>0) i--; delayus(1,100); }

bit tempreadbit(void) //读一位数据 { uint i; bit dat; // ds=1;i++; ds=0; _nop_(); ds=1; i++;i++; dat=ds; i=8; while(i>0)i--; return(dat); }

uchar tempread(void) //读一个字节函数 { uchar i,j,dat; dat=0; for(i=0;i<8;i++)

{ j=tempreadbit(); dat=(j<<7)|(dat>>1); } return(dat); }

void tempwritebyte(uchar dat) { uint i; uchar j; bit testb; for(j=0;j<8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { ds=0; i++;i++; //延时确定时间15US ds=1; i=8; while(i>0)i--; } else { ds=0; // i=8; // while(i>0)i--; delayus(1,5); ds=1; i++;i++; } } }

void tempchange(void) //DS18B20温度转换 { dreset(); delayus(1,113); tempwritebyte(0xcc); //跳过度ROM指令 tempwritebyte(0x44);//温度转换指令 }

uint get_temp()//读取寄存器中存储的温度数据 { uchar a,b;

没有天生的聪明 只有不懈的努力

30

dreset(); delayus(1,113); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); b=tempread(); temp=b; temp<<=8; temp=temp|a; f_temp=temp*0.0625; temp=f_temp*10+0.5; // f_temp=f_temp+0.05; return temp; }

void main() { uchar tx_buf[4]={0}; init_io(); while(1) { tempchange(); delayus(1,113); get_temp(); tx_buf[0]=(uchar)(temp/100); tx_buf[1]=(uchar)((temp0)/10); tx_buf[2]='.'; tx_buf[3]=(uchar)((temp0)); TX_mode(tx_buf); } }

接收程序

#include //#include

#define uchar unsigned char #define uint unsigned int

#define READ_REG 0x00 // Define read command to register #define WRITE_REG 0x20 // Define write command to register #define RD_RX_PLOAD 0x61 // Define RX payload register address #define WR_TX_PLOAD 0xA0 // Define TX payload register address #define FLUSH_TX 0xE1 // Define flush TX register command #define FLUSH_RX 0xE2 // Define flush RX register command

联系合同范文客服:xxxxx#qq.com(#替换为@)