完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在测试时发现发射模块当按KEY1时 能接收,但要再按一次才会停止,我是想做一个遥控车 只是想当按键按下时就发送不按的时候就不发送,,接收和发送的程序我都改了N次还是不行,望哪位好心人帮忙改下,谢谢了本人新手
程序.rar (30.57 KB ) |
|
相关推荐
5个回答
|
|
#include
#include #include #include #define uint unsigned int #define uchar unsigned char #define U8 unsigned char #define U16 unsigned int #define ROW(x) (0x80|(x << 0x06)) #define COL(x) (x) #define LEN(x) ((x-0x01) << 0x03) #define LEN_MASK 0x38 #define COL_MASK 0x07 #define ROW_MASK 0xC0 #define ROW_COL (ROW_MASK|COL_MASK) #define HexDisp(x) HexDispArray[x] #define BYTE_LOW(x) (x & 0x0F) #define BYTE_HIGH(x) ((x & 0xF0)>>0x04) //配置口定义// ***it TXEN =  1^6; ***it TRX_CE =  1^0; ***it WR =  1^7; //SPI口定义// ***it MISO =  1^1; ***it MOSI =  1^4; ***it SCK =  1^2; ***it CSN =  1^3; // lcd bit define ***it LCD_RW = 2^2; ***it LCD_RS = 2^1; ***it LCD_EN = P2^0; #define LCD_DATA P0 ***it red_led = P2^6; ***it gre_led = P2^7; ***it key = P2^4; ***it key1 = P2^5; ***it key2 = P2^1; ***it key3 = P2^2; ***it key4 = P2^3; //***it key1 = P2^4; //状态输出口// ***it DR = P1^5; ***it LCD = P3^2; /*/RF寄存器配置// unsigned char idata RFConf[11]= { 0x00, //配置命令// 0x6C, //CH_NO,配置频段在433.2MHZ 0x0C, //输出功率为10db,不重发,节电为正常模式 0x44, //地址宽度设置,为4字节 0x03,0x03, //接收发送有效数据长度为3字节 0xE7,0xE7,0xE7,0xE7, //接收地址 0xC0, //CRC充许,16位CRC校验16M晶振 };*/ uchar TxRxBuffer[5]; bit success_flag=0; uchar key_value=0; uchar Rf_Rec_Cnt=0; void delay_2us(U16 delay_cnt); ///////////延时///////////////// void Delay(uint x) { uint i; for(i=0;i } } ////////////用SPI口写数据至NRF905内////////// void SpiWrite(unsigned char b) { unsigned char i=8; SCK=0; while (i--) { Delay(10); MOSI=(bit)(b&0x80); b><<=1 ; Delay(10); SCK=1; Delay(10); SCK=0; } SCK=0; } ///////////////from 905 read data//////////////// unsigned char SpiRead(void) { register unsigned char i=8; unsigned char ddata=0; SCK=0; while (i--) { ddata<<=1 ; ddata|=MISO; SCK=1 ; Delay(10); SCK=0 ; Delay(10); } SCK=0; return ddata; } ///////////////接收数据包///////////////// void RxPacket(void) { uchar i; i=0; //while(DR) { TxRxBuffer = SpiRead(); TxRxBuffer[1] = SpiRead(); TxRxBuffer[2] = SpiRead(); //i++; } } /* ;写发射数据命令:20H ;读发射数据命令:21H ;写发射地址命令:22H ;读发射地址命令:23H ;读接收数据命令:24H */ void TxPacket(void) { PWR=1; TXEN=1; TRX_CE=0; Delay(2); CSN=0; SpiWrite(0x22); //写发送地址,后面跟4字节地址// SpiWrite(0xE7); SpiWrite(0xE7); SpiWrite(0xE7); SpiWrite(0xE7); CSN=1; Delay(2); CSN=0; SpiWrite(0x20); //写发送数据命令,后面跟三字节数据// SpiWrite(0x01); SpiWrite(0x02); //SpiWrite(0x03); SpiWrite(key_value); CSN=1; Delay(5); TRX_CE=1; //使能发射模式// Delay(500); //等带发送完成// TRX_CE=0; while(!DR); } ////////////////等待接收数据包/////////////////// uchar temp; void Wait_Rec_Packet(void) { //TXEN=0; //TRX_CE=1; //PWR=1; //Delay(1000); //while(1) {// if (LCD==1) if(DR) { TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作 CSN=0; SpiWrite(0x24); RxPacket(); CSN=1; while(DR); TRX_CE=1; if((TxRxBuffer[0]==0x01)&&(TxRxBuffer[1]==0x02)&&(TxRxBuffer[2]==0x03)) { success_flag=1; /* red_led=0; Delay(5000); Delay(5000); success_flag=0; red_led=1; */ } //break; } } } ////////////初始化配置寄存器//////////////// void Ini_System(void) { // uchar i; CSN=1; SCK=0; PWR=1; TRX_CE=0; TXEN=0; Delay(2); CSN=0; SpiWrite( 0x00); //配置命令// SpiWrite( 0x6C); //CH_NO,配置频段在433.2MHZ SpiWrite( 0x0C); //输出功率为10db,不重发,节电为正常模式 SpiWrite( 0x44); //地址宽度设置,为4字节 SpiWrite( 0x03);SpiWrite( 0x03); //接收发送有效数据长度为3字节 SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7); //接收地址 SpiWrite( 0xDE); /*for(i=0;i<11;i++){ SpiWrite(RFConf); }*/ CSN=1; PWR=1; TRX_CE=1; TXEN=0; Delay(1000); } void main(void) { Ini_System(); DR=1; red_led=0; gre_led=0; success_flag=0; TRX_CE=0; Delay(1000); TXEN=0; TRX_CE=1; PWR=1; key_value=0x0; while(1) { if(!key) //senfing key0 { Delay(5); if(!key) { Delay(3); while(!key); key_value=0xa0; } } else if(!key1) //senfing key1 { Delay(5); if(!key1) { Delay(3); while(!key1); key_value=0xa1; } } if(!key2) //senfing key2 { Delay(5); if(!key2) { Delay(3); while(!key2); key_value=0xa2; } } if(!key3) //senfing key3 { Delay(5); if(!key3) { Delay(3); while(!key3); key_value=0xa3; } } if(!key4) //senfing key2 { Delay(5); if(!key4) { Delay(3); while(!key4); key_value=0xa4; } } if(key_value!=0x0) { red_led=1; TxPacket(); key_value=0x0; TXEN=0; TRX_CE=1; PWR=1; Delay(6000); red_led=0; } } } //----------------- 20091113 START--------------- |
|
|
|
#include
#include #include #include #define uint unsigned int #define uchar unsigned char #define U8 unsigned char #define U16 unsigned int #define ROW(x) (0x80|(x << 0x06)) #define COL(x) (x) #define LEN(x) ((x-0x01) << 0x03) #define LEN_MASK 0x38 #define COL_MASK 0x07 #define ROW_MASK 0xC0 #define ROW_COL (ROW_MASK|COL_MASK) #define HexDisp(x) HexDispArray[x] #define BYTE_LOW(x) (x & 0x0F) #define BYTE_HIGH(x) ((x & 0xF0)>>0x04) //配置口定义// ***it TXEN =  1^6; ***it TRX_CE =  1^0; ***it WR =  1^7; //SPI口定义// ***it MISO =  1^1; ***it MOSI =  1^4; ***it SCK =  1^2; ***it CSN =  1^3; // lcd bit define ***it LCD_RW = 2^2; ***it LCD_RS = 2^1; ***it LCD_EN = P2^0; #define LCD_DATA P0 ***it red_led = P2^6; ***it gre_led = P2^7; ***it led1 = P3^2; ***it led2 = P3^3; ***it led3 = P3^5; ***it key = P2^4; ***it key1 = P2^5; //***it key1 = P2^4; //状态输出口// ***it DR = P1^5; //***it LCD = P3^2; /*/RF寄存器配置// unsigned char idata RFConf[11]= { 0x00, //配置命令// 0x6C, //CH_NO,配置频段在433.2MHZ 0x0C, //输出功率为10db,不重发,节电为正常模式 0x44, //地址宽度设置,为4字节 0x03,0x03, //接收发送有效数据长度为3字节 0xE7,0xE7,0xE7,0xE7, //接收地址 0xC0, //CRC充许,16位CRC校验16M晶振 };*/ uchar TxRxBuffer[5]; bit success_flag=0; void delay_2us(U16 delay_cnt); void Ini_System(void); ///////////延时///////////////// void Delay(uint x) { uint i; for(i=0;i } } ////////////用SPI口写数据至NRF905内////////// void SpiWrite(unsigned char b) { unsigned char i=8; SCK=0; while (i--) { Delay(10); MOSI=(bit)(b&0x80); b><<=1 ; Delay(10); SCK=1; Delay(10); SCK=0; } SCK=0; } ///////////////from 905 read data//////////////// unsigned char SpiRead(void) { register unsigned char i=8; unsigned char ddata=0; SCK=0; while (i--) { ddata<<=1 ; ddata|=MISO; SCK=1 ; Delay(10); SCK=0 ; Delay(10); } SCK=0; return ddata; } ///////////////接收数据包///////////////// void RxPacket(void) { uchar i; i=0; //while(DR) { TxRxBuffer = SpiRead(); TxRxBuffer[1] = SpiRead(); TxRxBuffer[2] = SpiRead(); //i++; } } /* ;写发射数据命令:20H ;读发射数据命令:21H ;写发射地址命令:22H ;读发射地址命令:23H ;读接收数据命令:24H */ void TxPacket(void) { PWR=1; TXEN=1; CSN=0; SpiWrite(0x22); //写发送地址,后面跟4字节地址// SpiWrite(0xE7); SpiWrite(0xE7); SpiWrite(0xE7); SpiWrite(0xE7); CSN=1; Delay(2); CSN=0; SpiWrite(0x20); //写发送数据命令,后面跟三字节数据// SpiWrite(0x01); SpiWrite(0x02); SpiWrite(0x03); CSN=1; Delay(5); TRX_CE=1; //使能发射模式// Delay(500); //等带发送完成// TRX_CE=0; while(!DR); } uchar temp; void Wait_Rec_Packet(void) { //TXEN=0; //TRX_CE=1; //PWR=1; //Delay(1000); //while(1) {// if (LCD==1) if(DR) { TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作 CSN=0; SpiWrite(0x24); RxPacket(); CSN=1; while(DR); TRX_CE=1; if((TxRxBuffer[0]==0x01)&&(TxRxBuffer[1]==0x02)) //&&(TxRxBuffer[2]==0x03)) { TxRxBuffer[0]=0xff; TxRxBuffer[1]=0xff; success_flag=1; if(TxRxBuffer[2]==0xa0) { red_led=~red_led; } else if(TxRxBuffer[2]==0xa1) { gre_led=~gre_led; } else if(TxRxBuffer[2]==0xa2) { led1=~led1; } else if(TxRxBuffer[2]==0xa3) { led2=~led2; } else if(TxRxBuffer[2]==0xa4) { led3=~led3; } Ini_System(); /* red_led=0; Delay(5000); Delay(5000); success_flag=0; red_led=1; */ } //break; } } } ////////////初始化配置寄存器//////////////// void Ini_System(void) { // uchar i; CSN=1; SCK=0; PWR=1; TRX_CE=0; TXEN=0; Delay(2); CSN=0; SpiWrite( 0x00); //配置命令// SpiWrite( 0x6C); //CH_NO,配置频段在433.2MHZ SpiWrite( 0x0C); //输出功率为10db,不重发,节电为正常模式 SpiWrite( 0x44); //地址宽度设置,为4字节 SpiWrite( 0x03);SpiWrite( 0x03); //接收发送有效数据长度为3字节 SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7); //接收地址 SpiWrite( 0xDE); /*for(i=0;i<11;i++){ SpiWrite(RFConf); }*/ CSN=1; PWR=1; TRX_CE=1; TXEN=0; Delay(1000); } void main(void) { Ini_System(); PWR=0; //P0=0; DR=1; red_led=1; gre_led=1; led1 = 1; led2 = 1; led3 = 1; success_flag=0; TRX_CE=0; Delay(1000); TXEN=0; TRX_CE=1; PWR=1; Delay(5000); TXEN=0; TRX_CE=1; PWR=1; Delay(1000); while(1) { Wait_Rec_Packet(); //等待接收完成 if(success_flag) { TXEN=0; TRX_CE=1; PWR=1; Delay(5000); Delay(5000); success_flag=0; Delay(10000); } } } //----------------- 20091113 START--------------- |
|
|
|
等待好心人出现.
|
|
|
|
我有STM32F103C8的,还是低功耗15uA,6年了,你还要吗?
|
|
|
|
按键按下后设置一个标志,标志有效时发送数据,发送完数据就清除标志
|
|
|
|
只有小组成员才能发言,加入小组>>
3322 浏览 9 评论
3000 浏览 16 评论
3497 浏览 1 评论
9070 浏览 16 评论
4090 浏览 18 评论
1190浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2341浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 09:19 , Processed in 1.343712 second(s), Total 85, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号