下面把接收部分的代碼發(fā)上來(lái): #include <reg52.h> #include <ABSACC.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int sbit Led1=P2^0; sbit Led2=P2^1; sbit Key=P3^7; uchar count; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0~~F段碼 //-------------------------------------------------------------------------------------------------------------- #define BYTE_BIT0 0x01 #define BYTE_BIT1 0x02 #define BYTE_BIT2 0x04 #define BYTE_BIT3 0x08 #define BYTE_BIT4 0x10 #define BYTE_BIT5 0x20 #define BYTE_BIT6 0x40 #define BYTE_BIT7 0x80 bdata unsigned char DATA_BUF; #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0) #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0) sbit flag =DATA_BUF^7; sbit flag1 =DATA_BUF^0; //-------------------------------------------------------------------------------------------------------------- #define TxRxBuf_Len 4 unsigned char TxRxBuffer[TxRxBuf_Len]; //-----------------------------------------------------NRF905端口配置------------------------------------------- sbit TXEN=P1^0; sbit TRX_CE=P3^2; sbit PWR=P1^1; sbit MISO=P1^6; sbit MOSI=P1^5; sbit SCK=P1^7; sbit CSN=P1^3; sbit AM=P1^4; sbit DR=P3^3; sbit CD=P1^2; //----------------------------------------------------數(shù)碼管位選IO--------------------------------------------- sbit led1=P2^1; sbit led0=P2^0; sbit led2=P2^2; sbit led3=P2^3; //-------------------------------------------------------------------------------------------------------------- //uchar seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0~~9段碼 //--------------------------------------------------------------------------------------------------------------- #define WC 0x00 #define RC 0x10 #define WTP 0x20 #define RTP 0x21 #define WTA 0x22 #define RTA 0x23 #define RRP 0x24 //--------------------------------------------NRF905寄存器配置-------------------------------------------------- unsigned char idata RFConf[11]= { 0x00, //配置命令// 0x4c, 0x0c, 0x44,0x04,0x04, 0xcc,0xcc,0xcc,0xcc, 0x58, //CRC充許,8位CRC校驗(yàn),外部時(shí)鐘信號(hào)不使能,16M晶振 }; //----------------------------------------------延時(shí)--------------------------------------------------------------- void Delay(uchar n) { uint k; while(n--) for(k=0;k<8;k++); } //----------------------------------------------------------------------------------------------------------------- void delay1(uint i) { for(;i>0;i--); } //---------------------------------------------------SPI讀函數(shù)----------------------------------------------------- unsigned char SpiRead(void) { unsigned char j; for (j=0;j<8;j++) { DATA_BUF=DATA_BUF<<1; SCK=1; if (MISO) //讀取最高位,保存至最末尾,通過(guò)左移位完成整個(gè)字節(jié) { DATA_BUF|=BYTE_BIT0; } else { DATA_BUF&=~BYTE_BIT0; } SCK=0; } return DATA_BUF; } //---------------------------------------------------SPI寫函數(shù)---------------------------------------------------- void SpiWrite(unsigned char send) { unsigned char i; DATA_BUF=send; for (i=0;i<8;i++) { if (DATA7) //總是發(fā)送最高位 { MOSI=1; } else { MOSI=0; } SCK=1; DATA_BUF=DATA_BUF<<1; SCK=0; } } //-----------------------------------------------初始化nRF905----------------------------------------------------- void nRF905Init(void) { CSN=1; // Spi disable SCK=0; // Spi clock line init low DR=0; // Init DR for input AM=0; // Init AM for input CD=0; // Init CD for input PWR=1; // nRF905 power on TRX_CE=0; // Set nRF905 in standby mode TXEN=0; // set radio in Rx mode } //-----------------------------------------------NRF905初始化寄存器----------------------------------------------------- void Config905(void) { uchar i; CSN=0; // Spi enable for write a spi command //SpiWrite(WC); // Write config command寫放配置命令 for (i=0;i<11;i++) // Write configration words 寫放配置字 { SpiWrite(RFConf[i]); } CSN=1; // Disable Spi } //-----------------------------------------------設(shè)置發(fā)送狀態(tài)--------------------------------------------------- void SetRxMode(void) { TXEN=0; TRX_CE=1; Delay(1); // delay for mode change(>=650us) } //-------------------------------------------------判斷數(shù)據(jù)接收狀態(tài)----------------------------------------------------- unsigned char CheckDR(void) //檢查是否有新數(shù)據(jù)傳入 Data Ready { if (DR=1&&TRX_CE==1 && TXEN==0) { // Delay(50) ; return 1; } else { return 0; } } //----------------------------------------------------讀NRF905接收數(shù)據(jù)------------------------------------------------------------ void RxPacket(void) { uchar i; Delay(1); // TRX_CE=0; // Set nRF905 in standby mode Delay(100); TRX_CE=0; CSN=0; // Spi enable for write a spi command Delay(1); SpiWrite(RRP); for (i = 0 ;i < 4 ;i++) { TxRxBuffer[i]=SpiRead(); // Read data and save to buffer } CSN=1; Delay(10); TRX_CE=1; } //--------------------------------------------------------數(shù)據(jù)接收------------------------------------------------ void RX(void) { SetRxMode(); // Set nRF905 in Rx mode while (CheckDR()==0); Delay(10); RxPacket(); Delay(10); } //----------------------------------------------------------------------------------------------------------------- void delay50ms() { uchar i,j; for(i=5;i>0;i--) for(j=200;j>0;j--); } //--------------------------------顯示子函數(shù)-------------------------------------------------------------------------- void display() { uchar highcount,lowcount; highcount=count/10; lowcount=count%10; P0=table[highcount]; Led1=1; Led2=0; delay50ms(); P0=table[lowcount]; Led1=0; Led2=1; delay50ms(); } //----------------------------------------------------------------------------------------------------------------- void main(void) { uchar k; count=0; nRF905Init(); Config905(); while(1) { for(k=30;k>0;k--) { display(); } RX(); Delay(10); CSN=0; if(TxRxBuffer[0]) { count=TxRxBuffer[0]; display(); } } } |
|