久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1259|回復: 0
收起左側

24L01發送原程序

[復制鏈接]
ID:595056 發表于 2019-8-9 08:35 | 顯示全部樓層 |閱讀模式
#include ".\\nRF24L01\\nRF24L01.h"
#include "def.h"
#define uint unsigned int
#define TX_PLOAD_WIDTH 20 // 20字節TX有效載荷
#define RX_PLOAD_WIDTH 20 // 20字節TX有效載荷
sbit n=P2^1;                 //定義光電對管的輸出端口         
sbit RS = P1^0;   
sbit RW = P1^1;
sbit EN = P2^5;
sbit DU = P2^6;
uint g,s,b,q,w;


uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};    //本地地址
uint const RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};     //接收地址


uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;
sbit        MAX_RT        =sta^4;       

void delay(uint k)       
{                                               
uint a,j;                               
for(a=0;a<k;a++)                       
for(j=0;j<121;j++);                                                                       
}
void inerDelay_us(unsigned char n)
{
        for(;n>0;n--)
                _nop_();
}

void init_NRF24L01(void)
{
    inerDelay_us(100);
        CE=0;   
        CSN=1;  
        SCK=0;   
        SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 寫本地地址       
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 寫接收端地址
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);   // 頻道0自動ACK應答允許       
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //允許接收地址只有頻道0
        SPI_RW_Reg(WRITE_REG + RF_CH, 0); //設置信道工作為2.4GHZ,收發一致
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);
//設置接收數據長度,本次設置為4字節
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
//設置發射速率為1Mkbps,發射功率為最大值0dB
}

uchar SPI_RW(uint uchar)
{
        uint bit_ctr;
           for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
           {
                MOSI = (uchar & 0x80);         //輸出 'uchar'到 MOSI
                uchar = (uchar << 1);
                SCK = 1;
                uchar |= MISO;
                SCK = 0;
           }
    return(uchar);                             //返回uchar
}

uchar SPI_Read(uchar reg)
{
        uchar reg_val;
        CSN = 0;                // 置低CSN, 激活 SPI通信
        SPI_RW(reg);            // 選擇寄存器
        reg_val = SPI_RW(0);    // 讀取寄存器數值
        CSN = 1;                //置高CSN,終止SPI通信
       
        return(reg_val);        // 返回值
}

uchar SPI_RW_Reg(uchar reg, uchar value)
{
        uint status;
       
        CSN = 0;                   // CSN 拉低,激活SPI
        status = SPI_RW(reg);        // 選擇寄存器
        SPI_RW(value);             //寫入數值..
        CSN = 1;                   // 置高CSN
       
        return(status);               // 返回模塊狀態
}

uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
{
        uint status,uchar_ctr;
       
        CSN = 0;                                   
        status = SPI_RW(reg);                      
        for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
                pBuf[uchar_ctr] = SPI_RW(0);   
        CSN = 1;                           
        return(status);                  
}

uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
{
        uint status,uchar_ctr;
       
        CSN = 0;            //SPI使能      
        status = SPI_RW(reg);   
        for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++)
                SPI_RW(*pBuf++);
        CSN = 1;           //關閉SPI
        return(status);   
}

void SetRX_Mode(void)
{
        CE=0;
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);  // IRQ收發完成中斷響應
        CE = 1;
        inerDelay_us(130);
}

unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
{
    unsigned char revale=0;
        sta=SPI_Read(STATUS);        // 讀取狀態寄存其來判斷數據接收狀況
        if(RX_DR)                                // 判斷是否接收到數據
        {
            CE = 0;                         //SPI使能
                SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);
                revale =1;                        //讀取數據完成標志
        }
        SPI_RW_Reg(WRITE_REG+STATUS,sta);   
//接收到數據后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志
        return revale;
}

void nRF24L01_TxPacket(unsigned char * tx_buf)
{
        CE=0;                        //StandBy I模式       
        SPI_Write_Buf(WRITE_REG+RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
// 裝載接收端地址
        SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                        
// 裝載數據       
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   
// IRQ收發完成中斷響應,16位CRC,主發送
        CE=1;                 //置高CE,激發數據發送
        inerDelay_us(10);
}


bit LCD_Check_Busy(void)
{
P0= 0xFF;
RS=0;
RW=1;
delay(5);
EN=0;
delay(5);
EN=1;
return (bit)(P0 & 0x80);
}

void LCD_Write_Com(uchar com)
{  
while(LCD_Check_Busy());
P0= com;
RS=0;
RW=0;
delay(5);
EN=1;
delay(5);
EN=0;
}

void LCD_Write_Data(uchar Data)
{
while(LCD_Check_Busy());
P0= Data;
RS=1;
RW=0;
delay(5);
EN=1;  
delay(5);
EN=0;
}

void LCD_Init(void)
{
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);   
   LCD_Write_Com(0x01);     
   LCD_Write_Com(0x06);      
   LCD_Write_Com(0x0C);   
   }

void display(unsigned long int n,uchar address)
{
    g=n%10;
    s=n%100%10;
    b=n/100%10;
    q=n/1000%10;
    w=n/10000%10;
        //sw=n/100000%10;

    LCD_Write_Com(0x80 + address);
    LCD_Write_Data('T');
        LCD_Write_Data('/');
        LCD_Write_Data(w+48);
        //LCD_Write_Data(q+48);
        LCD_Write_Data(46);
        LCD_Write_Data(q+48);           
        LCD_Write_Data(b+48);
    LCD_Write_Data(s+48);
        LCD_Write_Data(g+48);      
}


unsigned long int i;//z;  
uint m=0;//,t;
void main()
{           
unsigned char TxBuf[20]={0};         
unsigned char RxBuf[20]={0};

        DU=1;  
                P0=0X00;
                DU=0;

    TMOD=0x01;         
    TH0=(65536-100)/256;               
    TL0=(65536-100)%256;                  
    ET0=1;               
    EA=1;

LCD_Init();
init_NRF24L01();
while(1)
{       
   if(n==0)
          {       
          delay(5);  
         while(!n);      //記得分號
         {
                TR0=1;         
                   m++;
          if(m>11)
          {       
            TR0=0;
                delay(100);       
            TxBuf[0]=g;
            TxBuf[1]=s;
                TxBuf[2]=b;
                TxBuf[3]=q;
                TxBuf[4]=w;
            //TxBuf[5]=sw;       
                delay(100);
        nRF24L01_TxPacket(TxBuf);            // Transmit Tx buffer data        
        SPI_RW_Reg(WRITE_REG+STATUS,0XFF);                     
          
            delay(1000);
                  TxBuf[0]=0;
            TxBuf[1]=0;
                TxBuf[2]=0;
                TxBuf[3]=0;
                TxBuf[4]=0;
                //TxBuf[5]=0;
                //i=0;
                while(1)
                {EA=0; }
      }
             display(i+15872,0x00);                                                                                       
          
           }
           }
          }
         
}
          
void t1_i() interrupt 1
{
  TH0=(65536-100)/256;               
  TL0=(65536-100)%256;                       
  i++;  
}          

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线一区 | 尤物在线精品视频 | 一区二区三区视频在线观看 | 久草网在线视频 | av电影一区二区 | 亚洲一区中文 | 久久精品91久久久久久再现 | 日韩视频精品 | 美日韩精品 | 天堂久 | 亚洲国产精品久久久 | 久久精品国产亚洲夜色av网站 | 成年人黄色小视频 | 日本在线一区二区三区 | 天天爱天天操 | 亚洲国产欧美在线人成 | 日韩中文字幕免费在线 | 亚洲国产中文字幕 | 午夜在线视频 | 日本精品一区二区三区在线观看视频 | 天天拍天天操 | 成人性视频免费网站 | 九九热在线视频免费观看 | 夜夜爽99久久国产综合精品女不卡 | 性色av一区 | 超碰成人免费 | 天天操操操操操 | 91av精品| 五月天天色 | 国产一区欧美 | 欧美日日 | 亚洲精品视频二区 | 久久精品国产亚洲 | 四虎最新 | 欧美性区 | 精品久久香蕉国产线看观看亚洲 | 国产成视频在线观看 | 在线观看中文字幕视频 | 国产激情片在线观看 | 中文精品视频 | 在线播放中文字幕 |