欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
2.4G發射接收小車程序電路圖+單片機代碼
[打印本頁]
作者:
LCL000
時間:
2018-11-19 22:09
標題:
2.4G發射接收小車程序電路圖+單片機代碼
這是一個用2.4無線模塊控制的小車電路,實測10米之內無延時
電路原理圖如下:
0.png
(96.38 KB, 下載次數: 52)
下載附件
2018-11-20 04:16 上傳
單片機源程序如下:
/*-----------------------------------------------
獨角獸電子產品
官方討論群號:900 600 59
名稱:NRF24L01無線遙控簡易程序
內容:利用本店的遙控器,再碰上STC89C52RC就可以了
------------------------------------------------*/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define TX_ADDR_WITDH 5//發送地址寬度設置為5個字節
//#define RX_ADDR_WITDH 5
//#define TX_DATA_WITDH 8
#define RX_DATA_WITDH 5
/******************************************************************
// nRF24L01指令格式:
*******************************************************************/
#define R_REGISTER 0x00 // 讀寄存器
#define W_REGISTER 0x20 // 寫寄存器
#define R_RX_PLOAD 0x61 // 讀RX FIFO有效數據,1-32字節,當讀數據完成后,數據被清除,應用于接收模式
#define W_TX_PLOAD 0xA0 // 寫TX FIFO有效數據,1-32字節,寫操作從字節0開始,應用于發射模式
#define FLUSH_TX 0xE1 // 清除TX FIFO寄存器,應用于發射模式
#define FLUSH_RX 0xE2 // 清除RX FIFO寄存器,應用于接收模式
#define REUSE_TX_PL 0xE3 // 重新使用上一包有效數據,當CE為高過程中,數據包被不斷的重新發射
#define NOP 0xFF // 空操作,可以用來讀狀態寄存器
/******************************************************************
// nRF24L01寄存器地址
*******************************************************************/
#define CONFIG 0x00 // 配置寄存器
#define EN_AA 0x01 // “自動應答”功能寄存器
#define EN_RX_ADDR 0x02 // 接收通道使能寄存器
#define SETUP_AW 0x03 // 地址寬度設置寄存器
#define SETUP_RETR 0x04 // 自動重發設置寄存器
#define RF_CH 0x05 // 射頻通道頻率設置寄存器
#define RF_SETUP 0x06 // 射頻設置寄存器
#define STATUS 0x07 // 狀態寄存器
#define OBSERVE_TX 0x08 // 發送檢測寄存器
#define CD 0x09 // 載波檢測寄存器
#define RX_ADDR_P0 0x0A // 數據通道0接收地址寄存器
#define RX_ADDR_P1 0x0B // 數據通道1接收地址寄存器
#define RX_ADDR_P2 0x0C // 數據通道2接收地址寄存器
#define RX_ADDR_P3 0x0D // 數據通道3接收地址寄存器
#define RX_ADDR_P4 0x0E // 數據通道4接收地址寄存器
#define RX_ADDR_P5 0x0F // 數據通道5接收地址寄存器
#define TX_ADDR 0x10 // 發送地址寄存器
#define RX_PW_P0 0x11 // 數據通道0有效數據寬度設置寄存器
#define RX_PW_P1 0x12 // 數據通道1有效數據寬度設置寄存器
#define RX_PW_P2 0x13 // 數據通道2有效數據寬度設置寄存器
#define RX_PW_P3 0x14 // 數據通道3有效數據寬度設置寄存器
#define RX_PW_P4 0x15 // 數據通道4有效數據寬度設置寄存器
#define RX_PW_P5 0x16 // 數據通道5有效數據寬度設置寄存器
#define FIFO_STATUS 0x17 // FIFO狀態寄存器
//*********************************************************************************
uchar sta; // 狀態變量
#define RX_DR (sta & 0x40) // 接收成功中斷標志
#define TX_DS (sta & 0x20) // 發射成功中斷標志
#define MAX_RT (sta & 0x10) // 重發溢出中斷標志
sbit MISO =P2^1;
sbit MOSI =P2^2;
sbit SCK =P2^3;
sbit CE =P2^5;
sbit CSN =P2^4;
sbit IRQ =P2^0;
sbit LED =P0^2;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit IN5=P1^4;
sbit IN6=P1^5;
sbit IN7=P1^6;
sbit IN8=P1^7;
uchar code TX_Addr[]={0x34,0x43,0x10,0x10,0x01};
//uchar code TX_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar RX_Buffer[RX_DATA_WITDH];
void _delay_us(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<12;i++);
}
void _delay_ms(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<120;i++);
}
void nRF24L01_Init(void)
{
_delay_us(2000);
CE=0;
CSN=1;
SCK=0;
IRQ=1;
}
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
if(byte&0x80)
MOSI=1;
else
MOSI=0;
byte<<=1;
SCK=1;
if(MISO)
byte|=0x01;
SCK=0;
}
return byte;
}
uchar SPI_W_Reg(uchar reg,uchar value)
{
uchar status;
CSN=0;
status=SPI_RW(reg);
SPI_RW(value);
CSN=1;
return status;
}
uchar SPI_R_byte(uchar reg)
{
uchar status;
CSN=0;
SPI_RW(reg);
status=SPI_RW(0);
CSN=1;
return status;
}
uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)
{
uchar reg_value,i;
CSN=0;
reg_value=SPI_RW(reg);
for(i=0;i<Dlen;i++)
{
Dat_Buffer[i]=SPI_RW(0);
}
CSN=1;
return reg_value;
}
uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
{
uchar reg_value,i;
CSN=0;
reg_value=SPI_RW(reg);
for(i=0;i<Dlen;i++)
{
SPI_RW(TX_Dat_Buffer[i]);
}
CSN=1;
return reg_value;
}
void nRF24L01_Set_RX_Mode(void)
{
CE=0;//待機
SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);
SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH);
SPI_W_Reg(W_REGISTER+EN_AA,0x01);//auot ack
SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);
SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);
SPI_W_Reg(W_REGISTER+RX_PW_P0,RX_DATA_WITDH);
SPI_W_Reg(W_REGISTER+RF_CH,0);
SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);//0db,lna
SPI_W_Reg(W_REGISTER+CONFIG,0x0f);
CE=1;
_delay_ms(5);
}
uchar nRF24L01_RX_Data(void)
{
// uchar i,status;
sta=SPI_R_byte(R_REGISTER+STATUS);
if(RX_DR)
{
CE=0;
SPI_R_DBuffer(R_RX_PLOAD,RX_Buffer,RX_DATA_WITDH);
// P3=RX_Buffer[0];
SPI_W_Reg(W_REGISTER+STATUS,0xff);
CSN=0;
SPI_RW(FLUSH_RX);
CSN=1;
return 1;
}
else
return 0;
}
/********************************************/
/* 函數功能:檢測24L01是否存在 */
/* 返回值; 0 存在 */
/* 1 不存在 */
/********************************************/
uchar NRF24L01_Check(void)
{
uchar check_in_buf[5]={0x11,0x22,0x33,0x44,0x55};
uchar check_out_buf[5]={0x00};
CE=0;
SPI_W_DBuffer(W_REGISTER+TX_ADDR, check_in_buf, 5);
SPI_R_DBuffer(R_REGISTER+TX_ADDR, check_out_buf, 5);
if((check_out_buf[0] == 0x11)&&\
(check_out_buf[1] == 0x22)&&\
(check_out_buf[2] == 0x33)&&\
(check_out_buf[3] == 0x44)&&\
(check_out_buf[4] == 0x55))return 0;
else return 1;
}
/********************************************
**************定時器0**********/
void InitTimer0()
{
TMOD = 0x01;
TH0 = 0x0FC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
}
uchar a=0,b=0;
//************************************主函數************************************************************
void main(void)
{
nRF24L01_Init();
while(NRF24L01_Check());
LED=0;
_delay_ms(100);
LED=1;
_delay_ms(100);
LED=0;
_delay_ms(100);
LED=1;
_delay_ms(100);
nRF24L01_Set_RX_Mode();
InitTimer0();
while(1)
{
if(nRF24L01_RX_Data())
CE=1;
}
}
void Timer0Interrupt() interrupt 1
{
TH0 =(65535-1000)/256;
TL0 =(65535-1000)%256;
a++;
b++;
if(RX_Buffer[3]==1&&RX_Buffer[4]==1) //前進
{
IN2=0;
IN4=0;
IN6=0;
IN8=0;
if(a==RX_Buffer[1]+1){IN1=0;IN3=0;IN5=0;IN7=0;}//
if(a==16){IN1=1;IN3=1;IN5=1;IN7=1;}
}
else if(RX_Buffer[3]==3&&RX_Buffer[4]==3) //后退
{
IN1=0;
IN3=0;
IN5=0;
IN7=0;
if(a==RX_Buffer[1]+1){IN2=0;IN4=0;IN6=0;IN8=0;}//
if(a==16){IN2=1;IN4=1;IN6=1;IN8=1;}
}
else if((RX_Buffer[3]==2&&RX_Buffer[4]==1)||(RX_Buffer[3]==2&&RX_Buffer[4]==3))//左前轉
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
IN6=0;
IN8=0;
if(a==RX_Buffer[2]+1){IN5=0;IN7=0;}//
if(a==16){IN5=1;IN7=1;} //
}
/* else if(RX_Buffer[3]==2&&RX_Buffer[4]==1)//左前轉
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
IN6=0;
IN8=0;
if(a==RX_Buffer[2]+1){IN5=0;IN7=0;}//
if(a==16){IN5=1;IN7=1;} //
}
else if(RX_Buffer[3]==2&&RX_Buffer[4]==3)//左后轉
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
IN5=0;
IN7=0;
if(a==RX_Buffer[2]+1){IN6=0;IN8=0;}//
if(a==16){IN6=1;IN8=1;} //
}*/
else if((RX_Buffer[3]==1&&RX_Buffer[4]==2)||(RX_Buffer[3]==3&&RX_Buffer[4]==2))//右前轉
{
IN2=0;
IN4=0;
IN5=0;
IN6=0;
IN7=0;
IN8=0;
if(a==RX_Buffer[1]+1){IN1=0;IN3=0;}//
if(a==16){IN1=1;IN3=1;} //
}
/* else if(RX_Buffer[3]==1&&RX_Buffer[4]==2)//右前轉
{
IN2=0;
IN4=0;
IN5=0;
IN6=0;
IN7=0;
IN8=0;
if(a==RX_Buffer[1]+1){IN1=0;IN3=0;}//
if(a==16){IN1=1;IN3=1;} //
}
else if(RX_Buffer[3]==3&&RX_Buffer[4]==2)//右后轉
{
IN1=0;
IN3=0;
IN5=0;
IN6=0;
IN7=0;
IN8=0;
if(a==RX_Buffer[1]+1){IN2=0;IN4=0;}//
if(a==16){IN2=1;IN4=1;} //
}*/
else if(RX_Buffer[3]==1&&RX_Buffer[4]==3)//原地順時針打轉
{
IN2=0;
IN4=0;
IN5=0;
IN7=0;
if(a==RX_Buffer[1]+1){IN6=0;IN8=0;}//
if(a==16){IN6=1;IN8=1;}
if(b==RX_Buffer[2]+1){IN1=0;IN3=0;}
if(b==16){IN1=1;IN3=1;}
}else
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
IN5=0;
IN6=0;
IN7=0;
IN8=0;
}
if(a==16)a=0;
if(b==16)b=0;
}
復制代碼
所有資料51hei提供下載:
2.4G發射接收小車程序電路圖.rar
(154.83 KB, 下載次數: 58)
2018-11-19 22:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
qq147735456
時間:
2019-8-8 16:39
根本不全的, 就是一廣告.
作者:
龍歪歪
時間:
2019-11-25 23:46
無線不都應該有發射和接受程序不同的代碼呀,怎么只有發射呢
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1