xxxx职业技专科毕业设计(论文)
status=NRF_WriteReg(STATUS,status);//清除自动重发标志 NRF_WriteReg(CONFIG,0X0E);//切换模式为发射模式 NRF_WriteReg(RF_CH ,0x0F);//设置频道 Delay(20);
buf[0]=P3;
NRF_WriteBuf(T_TX_PAYLOAD ,buf,data_width );//送发射数据 CE=0;
Delay(255); CE=1;
NRF_WCMD(FLUSH_RX);
Delay_ms(10);//等待发射完成
//status=NRF_ReadReg(FIFO_STATUS);//读TX_FIFO状态 //if(status&0x20)NRF_WCMD(FLUSH_TX);//清TX_FIFO NRF_WriteReg(CONFIG,0x0f);//设置配置寄存器 }
void NRF_RxPacket(uchar *buf)//接收数据包 {
uchar status; CE=1;
Delay(255);
NRF_WriteReg(CONFIG,0x0f);//设置配置寄存器 NRF_WriteReg(RF_CH ,0x0F);//设置频道
NRF_WriteReg(CONFIG,0x0f);//设置配置寄存器
status=NRF_ReadReg(STATUS);
if(status&0X40) {
NRF_ReadBuf(R_RX_PAYLOAD,buf,data_width);//接收数据 NRF_WriteReg(STATUS,status); P2=buf[0];//处理数据 P2=P2&0X7F;
NRF_WCMD(FLUSH_RX); //NRF_WCMD(FLUSH_TX); } }
\子函数
#ifndef __DHT11_H__
34
xxxx职业技专科毕业设计(论文)
#define __DHT11_H__ void ReadDHT(uchar *dat); #endif
#ifndef __LCD1602_H__ #define __LCD1602_H__ void LCD_CMD(uchar cmd); void LCD_Init();
void LCD_DAT(uchar add,uchar dat); void LCD_String(uchar add,uchar *dat); #endif
#ifndef __Define_H__ #define __Define_H__
/******************命令字*****************/ #define R_RX_PAYLOAD 0X61 #define T_TX_PAYLOAD 0XA0 #define FLUSH_TX 0XE1 #define FLUSH_RX 0XE2 #define REUSE_TX 0XE3 #define NOP 0XFF #define R_REG 0X00 #define T_REG 0X20
/*****************************************/ /*****************寄存器******************/
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address #define SETUP_AW 0x03 // 'Setup address width' register address #define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address #define RF_CH 0x05 // 'RF channel' register address #define RF_SETUP 0x06 // 'RF setup' register address #define STATUS 0x07 // 'Status' register address
#define OBSERVE_TX 0x08 // 'Observe TX' register address #define CD 0x09 // 'Carrier Detect' register address #define RX_ADDR_P0 0x0A // 'RX address pipe0' register address #define RX_ADDR_P1 0x0B // 'RX address pipe3' register address #define RX_ADDR_P4 0x0E // 'RX address pipe4' register address #define RX_ADDR_P5 0x0F // 'RX address pipe5' register address #define TX_ADDR 0x10 // 'TX address' register address
#define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address #define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address #define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address #define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
35
xxxx职业技专科毕业设计(论文)
#define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address #define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address /*****************************************/ #endif
#ifndef __NRF24L01_H__ #define __NRF24L01_H__
void NRF_RxPacket(uchar *buf);//接收数据包 void NRF_TxPacket(uchar *buf);//发射数据包 void NRF_Init(); #endif 主机程序:
#include
#define uchar unsigned char sbit beep=P2^2;
uchar dat0,dat1,dat2; uchar idata NRF_Dat[32]; uchar time=0;
void delay_10ms(void) //误差 0us {
unsigned char a,b,c; for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--); }
void int0_init(void) {
IE0=0; EA=1; EX0=1; IT0=0; }
void baojing() {
if(dat0>=3&&dat1>=1) {
beep=0;
Delay(600); beep=1; Delay(50); }
36
xxxx职业技专科毕业设计(论文)
}
void main(void) {
static bit Flag=0; int0_init(); LCD_Init(); NRF_Init(); LCD_CMD(0x01); NRF_Init(); LCD_Init();
LCD_String(0x00,\ LCD_String(0x40,\ while(1) {
delay_10ms(); if(time>200) {
if(!Flag) {
LCD_String(0x00,\ LCD_String(0x40,\ }
Flag=1; } else {
Flag=0; time++; }
baojing(); } }
void INT0Interrupt(void) interrupt 0 {
extern uchar code asc[]; NRF_RxPacket(NRF_Dat); if(time>200) {
LCD_String(0x00,\ LCD_String(0x40,\ }
time=0;
37
xxxx职业技专科毕业设计(论文)
dat0=NRF_Dat[3]; dat2=dat0/100; dat1=dat0;
dat0=dat00/10;
if(dat2!=0)LCD_DAT(0x0C,asc[dat2]);//灭零 else LCD_DAT(0x0C,' '); LCD_DAT(0x0E,asc[dat1]); LCD_DAT(0x0D,asc[dat0]); LCD_DAT(0x0F,'C');
dat0=NRF_Dat[1]; dat2=dat0/100; dat1=dat0; dat1=dat0;
dat0=dat00/10;
LCD_DAT(0x4E,asc[dat1]); LCD_DAT(0x4D,asc[dat0]); LCD_DAT(0x4F,'%');
if(dat2!=0)LCD_DAT(0x4C,asc[dat2]);//灭零 else LCD_DAT(0x4C,' ');
}
38