新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用nRF905和DS18B20制作的51單片機溫度數(shù)據(jù)無線傳輸系統(tǒng)

        用nRF905和DS18B20制作的51單片機溫度數(shù)據(jù)無線傳輸系統(tǒng)

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
        void main()
        {
        unsigned int cyc=0;
        unsigned int distan=0;
        //================NRF905初始化
        CSN=1;// Spidisable
        SCK=0;// Spi clock line init high
        DR=1;// Init DR for input
        AM=1;// Init AM for input
        PWR_UP=1;// nRF905 power on
        TRX_CE=0;// Set nRF905 in standby mode
        TX_EN=0;// set radio in Rx mode
        //================
        Config905();// Config nRF905 module
        TxBuf[0] = 1;
        TxBuf[1] = 1;
        SetTxMode();// Set Tx Mode
        TxPacket();// Transmit Tx buffer data
        LED1 = 0;
        LED2 = 0;
        Delay(500);// delay for led light
        LED1 = 1;
        LED2 = 1;
        TxBuf[0] = 0xff;
        TxBuf[1] = 0xff;
        // led close
        SetRxMode();// Set nRF905 in Rx mode
        while(1)
        {
        //=====================從鍵盤獲得數(shù)據(jù)
        if(KEY1 ==0 ) { LED1 = 0; TxBuf[0] = 1 ;tf = 1 ; }
        if(KEY2 ==0 ) { LED2 = 0; TxBuf[1] = 1 ;tf = 1 ; }
        if (tf==1)
        {
        //===============NRF905發(fā)送相應(yīng)的按鍵
        SetTxMode();// Set Tx Mode
        TxPacket();// Transmit Tx buffer data
        TxBuf[0] = 0xff;
        TxBuf[1] = 0xff;
        SetRxMode();// Set nRF905 in Rx mode
        tf=0;
        Delay(500);
        LED1 = 1;
        LED2 = 1;
        }
        //=====================等待NRF905接收
        if (DR)// If recive data ready...
        RxPacket();// ... recive data
        }
        }
        //function Config905();
        void Config905(void)
        {
        uchar i;
        CSN=0;// Spi enable for write a spi command
        SpiWrite(WC);// Write config command寫放配置命令
        for (i=0;i寫放配置字
        {
        SpiWrite(RxTxConf.buf[i]);
        }
        CSN=1;// Disable Spi
        }
        //function SpiWrite();
        void SpiWrite(ucharbyte)
        {
        uchar i;
        DATA_BUF=byte;// Put functions parameter into a bdata variable
        for (i=0;i<8;i++)// Setup byte circulation bits
        {
        if (flag)// Put DATA_BUF.7 on data line
        MOSI=1;
        else
        MOSI=0;
        SCK=1;// Set clock line high
        DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
        SCK=0;// Set clock line low
        }
        }
        //function SpiRead();
        uchar SpiRead(void)
        {
        uchar i;
        for (i=0;i<8;i++)// Setup byte circulation bits
        {
        DATA_BUF=DATA_BUF<<1; // Right shift DATA_BUF
        SCK=1;// Set clock line high
        if (MISO)
        flag1=1;// Read data
        else
        flag1=0;
        SCK=0;// Set clock line low
        }
        return DATA_BUF;// Return function parameter
        }
        //function TxPacket();
        void TxPacket(void)
        {
        uchar i;
        //Config905();
        CSN=0;// Spi enable for write a spi command
        SpiWrite(WTP);// Write payload command
        for (i=0;i<32;i++)
        {
        SpiWrite(TxBuf[i]);// Write 32 bytes Tx data
        }
        CSN=1;// Spi disable
        Delay(1);
        CSN=0;// Spi enable for write a spi command
        SpiWrite(WTA);// Write address command
        for (i=0;i<4;i++)// Write 4 bytes address
        {
        SpiWrite(RxTxConf.buf[i+5]);
        }
        CSN=1;// Spi disable
        TRX_CE=1;// Set TRX_CE high,start Tx data transmission
        Delay(1);// while (DR!=1);
        TRX_CE=0;// Set TRX_CE low
        }
        //function RxPacket();
        void RxPacket(void)
        {
        uchar i;
        TRX_CE=0;// Set nRF905 in standby mode
        CSN=0;// Spi enable for write a spi command
        SpiWrite(RRP);// Read payload command
        for (i=0;i<32;i++)
        {
        RxBuf[i]=SpiRead();// Read data and save to buffer
        }
        CSN=1;// Disable spi
        while(DR||AM);
        // P0= RxBuf[0];// Buffer[0] output from P0 port...
        TRX_CE=1;
        //xx=(RxBuf[0]>>4)&0x0f;
        //TxData(xx);
        //=====================
        if(RxBuf[0] == 1) LED1 = 0 ;
        if(RxBuf[1] == 1) LED2 = 0 ;
        Delay(500);// ...light led
        // P0=0xff;// Close led
        LED1 = 1 ;
        LED2 = 1 ;
        }
        //function SetTxMode();
        void SetTxMode(void)
        {
        TX_EN=1;
        TRX_CE=0;
        Delay(1);// delay for mode change(>=650us)
        }
        //function SetRxMode();
        void SetRxMode(void)
        {
        TX_EN=0;
        TRX_CE=1;
        Delay(1);// delay for mode change(>=650us)
        }****************************************

        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 定结县| 怀来县| 葵青区| 勐海县| 曲阜市| 肥乡县| 河池市| 民丰县| 灌云县| 蒙自县| 凤翔县| 腾冲县| 延长县| 阿克苏市| 肇源县| 阿尔山市| 内丘县| 宝鸡市| 开阳县| 山东省| 万荣县| 陇西县| 长岛县| 民勤县| 罗定市| 密云县| 莱西市| 新河县| 遂川县| 庄浪县| 阿鲁科尔沁旗| 旺苍县| 天台县| 溆浦县| 景泰县| 灵石县| 栖霞市| 章丘市| 聊城市| 嘉兴市| 德化县|