當前位置:首頁 » 幣種行情 » trx4和km2和cc01哪個好

trx4和km2和cc01哪個好

發布時間: 2024-05-08 04:49:47

『壹』 兩片單片機的無線傳輸用NRF905 接收端 發送端 程序分別怎麼寫 好睏惑

NRF905的程序中只有nRF905Init();Config905();RX();前兩個初始化,後個傳輸函數,執行後在TRXBUF數組中會有相應的值。以下是接收的主函數,這是控制電機左右轉動的程序。(小車部分)

voidmain(void)

{

nRF905Init();

Config905();

while(1)

{

RX();

if(TxRxBuf[0]==0x11){in1=1;in2=0;in5=1;in6=0;}//從左往右

if(TxRxBuf[1]==0x11){in3=1;in4=0;in7=1;in8=0;}//從右往左

if(TxRxBuf[0]==0x22){in1=1;in2=1;in5=1;in6=1;}//從左往右

if(TxRxBuf[1]==0x22){in3=1;in4=1;in7=1;in8=1;}//從右往左

in1=1;in2=0;

}

}

遙控部分:就倆按鍵一個做轉一個右轉這是無線遙控小車的遙控部分。

voidmain(void)

{

nRF905Init();

Config905();

while(1)

{

if(KEY0==0){TxRxBuf[0]=0x11;}

if(KEY0==1){TxRxBuf[0]=0x22;}

if(KEY1==0){TxRxBuf[1]=0x11;}

if(KEY1==1){TxRxBuf[1]=0x22;}

SetTxMode();//SetnRF905inTxmode

TxPacket(TxRxBuf);//SenddatabynRF905

}

}

那麼在設置上:就按以下設置:

#include<reg52.h>

#include<ABSACC.h>

#include<intrins.h>

#include<stdio.h>

//----------------------------------------------------------------------------------------------------------------

#defineuintunsignedint

#defineucharunsignedchar

//----------------------------------------------------------------------------------------------------------------

#defineBYTE_BIT0 0x01

#defineBYTE_BIT1 0x02

#defineBYTE_BIT2 0x04

#defineBYTE_BIT3 0x08

#defineBYTE_BIT4 0x10

#defineBYTE_BIT5 0x20

#defineBYTE_BIT6 0x40

#defineBYTE_BIT7 0x80

//----------------------------------------------------------------------------------------------------------------

bdataunsignedcharDATA_BUF;

#defineDATA7 ((DATA_BUF&BYTE_BIT7)!=0)

#defineDATA0((DATA_BUF&BYTE_BIT0)!=0)

sbit flag =DATA_BUF^7;

sbit flag1 =DATA_BUF^0;

//---------------------------------------------------發送數據緩沖區-------------------------------------------------

#defineTxRxBuf_Len4

unsignedcharTxRxBuf[TxRxBuf_Len]=

{

0x29,0x30,0x31,0x32,

};

//----------------------------------------------NRF905控制IO------------------------------------------------------

sbit TXEN=P1^0;

sbit TRX_CE=P3^2;

sbit PWR=P1^1;

//----------------------------------------------NRF905SPI介面---------------------------------------------------

sbit MISO=P1^6;

sbit MOSI=P1^5;

sbit SCK=P1^7;

sbit CSN=P1^3;

//----------------------------------------nrf905狀態標志---------------------------------------------------------

sbit AM=P1^4;

sbit DR=P3^3;

sbit CD=P1^2;

//---------------------------------------------------------------------------------------------------------------

sbit led3=P2^0;

sbit led2=P2^1;

sbit led1=P2^2;

sbit led0=P2^3;

//--------------------------------------------------------------------------------------------------------------

sbit KEY0=P3^6;

sbit KEY1=P3^7;

//--------------------------------------------------------------------------------

sbit BELL=P3^4;

//-----------------------------------------------------------------------------------------------------------------

ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段碼

//-------------------------------------------------------nrf905控制指令-------------------------------------------

#defineWC 0x00

#defineRC 0x10

#defineWTP 0x20

#defineRTP 0x21

#defineWTA 0x22

#defineRTA 0x23

#defineRRP 0x24

//------------------------------------------------NRF905寄存器配置------------------------------------------------

unsignedcharidataRFConf[11]=

{

0x00,//配置命令//

0x4c,//CH_NO,配置頻段在430MHZ

0x0c,//輸出功率為10db,不重發,節電為正常模式

0x44,//地址寬度設置,為4位元組

0x04,0x04,//接收發送有效數據長度為32位元組

0xCC,0xCC,0xCC,0xCC,//接收地址

0x58,//CRC充許,8位CRC校驗,外部時鍾信號不使能,16M晶振

};

codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};

chartf;

//------------------------------------------------延時------------------------------------------------------------

staticvoidDelay(ucharn)

{

uinti;

while(n--)

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

}

//---------------------------------------------------SPI讀函數-----------------------------------------------------

unsignedcharSpiRead(void)

{

unsignedcharj;

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

{

DATA_BUF=DATA_BUF<<1;

SCK=1;

if(MISO) //讀取最高位,保存至最末尾,通過左移位完成整個位元組

{

DATA_BUF|=BYTE_BIT0;

}

else

{

DATA_BUF&=~BYTE_BIT0;

}

SCK=0;

}

returnDATA_BUF;

}

//-------------------------------------------------SPI寫函數----------------------------------------------------------

voidSpiWrite(unsignedcharsend)

{

unsignedchari;

DATA_BUF=send;

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

{

if(DATA7) //總是發送最高位

{

MOSI=1;

}

else

{

MOSI=0;

}

SCK=1;

DATA_BUF=DATA_BUF<<1;

SCK=0;

}

}

//------------------------------------------------------初始化nRF905---------------------------------------------

voidnRF905Init(void)

{

CSN=1; //Spi disable

SCK=0; //Spiclocklineinitlow

DR=0; //InitDRforinput

AM=0; //InitAMforinput

CD=0; //InitCDforinput

PWR=1; //nRF905poweron

TRX_CE=0; //SetnRF905instandbymode

TXEN=0; //setradioinRxmode

}

//-----------------------------------------------------初始化寄存器-----------------------------------------------

voidConfig905(void)

{

uchari;

CSN=0; //Spienableforwriteaspicommand

//SpiWrite(WC); //Writeconfigcommand寫放配置命令

for(i=0;i<11;i++) //Writeconfigrationwords寫放配置字

{

SpiWrite(RFConf[i]);

}

CSN=1; //DisableSpi

}

//-----------------------------------------------------發送數據打包---------------------------------------------------

voidTxPacket(uchar*TxRxBuf)

{

uchari;

//Config905();

CSN=0;

SpiWrite(WTP); //Writepayloadcommand

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

{

SpiWrite(TxRxBuf[i]); //Write32bytesTxdata

}//Spienableforwriteaspicommand

CSN=1;

Delay(1); //Spidisable

CSN=0; //Spienableforwriteaspicommand

SpiWrite(WTA); //Writeaddresscommand

for(i=0;i<4;i++) //Write4bytesaddress

{

SpiWrite(TxAddress[i]);

}

CSN=1; //Spidisable

TRX_CE=1; //SetTRX_CEhigh,startTxdatatransmission

Delay(1); //while(DR!=1);

TRX_CE=0; //SetTRX_CElow

}

//----------------------------------------------------------設置發送狀態---------------------------------------------

voidSetTxMode(void)

{

TRX_CE=0;

TXEN=1;

Delay(1); //delayformodechange(>=650us)

}

//-----------------------------------------------設置發送狀態---------------------------------------------------

voidSetRxMode(void)

{

TXEN=0;

TRX_CE=1;

Delay(1); //delayformodechange(>=650us)

}

//-------------------------------------------------判斷數據接收狀態-----------------------------------------------------

unsignedcharCheckDR(void) //檢查是否有新數據傳入DataReady

{

if(DR=1&&TRX_CE==1&&TXEN==0)

{

//Delay(50);

return1;

}

else

{

return0;

}

}

//----------------------------------------------------讀NRF905接收數據------------------------------------------------------------

voidRxPacket(void)

{

uchari;

Delay(1);

// TRX_CE=0; //SetnRF905instandbymode

Delay(100);

TRX_CE=0;

CSN=0; //Spienableforwriteaspicommand

Delay(1);

SpiWrite(RRP);

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

{

TxRxBuf[i]=SpiRead(); //Readdataandsavetobuffer

}

CSN=1;

Delay(10);

TRX_CE=1;

}

//--------------------------------------------------------數據接收------------------------------------------------

voidRX(void)

{

SetRxMode(); //SetnRF905inRxmode

while(CheckDR()==0);

Delay(10);

RxPacket();

}

這些是子函數。只要把一些關於電機的sbit定義去掉,剩下的就是真正的子函數了。

那麼,需注意的就只有nRF905Init();Config905();RX();SetTxMode();和一個TXbuf數組,把這幾個用好了,程序就跳出來了。nRF905Init();Config905();收發都需要,SetTxMode();發送要,RX();接收要。就是這樣了,最起碼我看是這樣。

熱點內容
eth多少錢一輛 發布:2024-05-18 09:09:31 瀏覽:787
eth礦機系統設置 發布:2024-05-18 08:33:00 瀏覽:401
區塊鏈CMCC 發布:2024-05-18 07:38:08 瀏覽:156
中國區塊鏈項目報告 發布:2024-05-18 07:13:51 瀏覽:383
a10pro礦機噪音分貝 發布:2024-05-18 07:10:24 瀏覽:578
區塊鏈資產提現是什麼 發布:2024-05-18 07:01:29 瀏覽:415
去財政服務中心開發票 發布:2024-05-18 06:31:36 瀏覽:899
doge要上coinbase嗎 發布:2024-05-18 06:31:28 瀏覽:411
最新比特幣挖礦教程 發布:2024-05-18 06:14:02 瀏覽:628
我的世界手機版一鍵挖礦mod下載 發布:2024-05-18 06:13:06 瀏覽:184