亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
nRF2401無線數據傳輸試驗測試程序
[打印本頁]
作者:
dzdiy
時間:
2015-4-11 19:38
標題:
nRF2401無線數據傳輸試驗測試程序
nRF2401無線數據傳輸試驗測試程序,兩塊同樣nRF2401學習板子上演示數據同步,這是從網上轉載的。單片機使用的是STC89C52RC,8個LED接在P0口,低電平有效,測試直觀。
/***********************************************************/
/*nRF2401學習板V1.0 */
/*功能描述:nRF2401無線數據傳輸 */
/*芯片 :STC89C52RC 晶振 11.0592M */
/*版本 :V1.0 */
/***********************************************************/
//測試OK,功能描述:
//8個LED接在P0口,低電平有效
//按鍵1是LED加 按鍵2LED減 按鍵3 LED全亮 按鍵4 LED全滅
//兩塊同樣的板子能夠通過無線控制實現LED顯示同步,串口輸出數據
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//端口定義
sbit nRF2401_PWR_UP = P1^4;
sbit nRF2401_CE = P1^5;
sbit nRF2401_CS = P1^7;
//////////////////////
sbit DR1 = P1^1; //通道1
sbit CLK1 = P3^2;
sbit DATA = P1^0;
//////////////////////
sbit DR2 = P1^3; //通道2
sbit CLK2 = P1^6;
sbit DOUT2 = P1^2;
///////LED定義//////////
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
sbit LED5 = P0^4;
sbit LED6 = P0^5;
sbit LED7 = P0^6;
sbit LED8 = P0^7;
///////按鍵定義////////////
sbit K1 = P3^3;
sbit K2 = P3^4;
sbit K3 = P3^5;
sbit K4 = P3^6;
sbit speaker=P3^7;//蜂鳴器輸出引腳
//Configuration Word datasheet(page17 of 37)
//Reserved for testing
#define TEST_2 0x8E //MSB D143~D136
#define TEST_1 0x08 // D135~D128
#define TEST_0 0x1C // D127~D120
#define DATA2_W 2*8 //通道2 payload數據長度設置(bit)
#define DATA1_W 28*8 //通道1 payload數據長度設置(bit)
//NOTE: DATAx_W(bits)<=256 - ADDR_W - CRC datasheet(page17 of 37)
#define ADDR2_4 0x00//通道2接收地址
#define ADDR2_3 0x00
#define ADDR2_2 0x00
#define ADDR2_1 0x00
#define ADDR2_0 0x01
#define ADDR1_4 0x00//通道1接收地址
#define ADDR1_3 0x00
#define ADDR1_2 0x00
#define ADDR1_1 0x34
#define ADDR1_0 0x12
#define ADDR_W 2*8 //發送/接收地址寬度(單位:Bit)
#define CRC_L 0x1 //CRC 模式 0:8 位 1:16 位
#define CRC_EN 0x1 //CRC 校驗 0:禁用 1:啟用
#define RX2_EN 0x0 //雙通道功能0:禁用 1:啟用
#define CM 0x1 //0:Direct mode 1:ShockBurst mode
#define RFDR_SB 0x0 //傳輸速率0:250kbps 1:1Mbps(requires 16MHZ crystal)
#define XO_F 0x3 //晶振頻率 D12-D10(000:4MHZ 001:8MHZ 010:12MHZ 011:16MHZ 100:20MHZ)
#define RF_PWR 0x3 //發射模式的輸出功率D9-D8(00:-20dBm 01:-10dBm 10:-5dBm 11:0dBm)
#define RF_CH 0x2 //Channel 發射頻率設置Channel=2400MHz+RF_CH * 1.0MHz datasheet(page22 of 37)
#define RXEN 0x0 //0:transmit mode 1:receive mode
uchar code nRF2401_Config_Word[18] =
{
TEST_2, TEST_1, TEST_0, DATA2_W, DATA1_W, ADDR2_4, ADDR2_3, ADDR2_2,
ADDR2_1,ADDR2_0,ADDR1_4,ADDR1_3, ADDR1_2, ADDR1_1, ADDR1_0,(ADDR_W<<2 | CRC_L<<1 | CRC_EN),
(RX2_EN<<7 | CM<<6 | RFDR_SB<<5 | XO_F <<2 | RF_PWR),(RF_CH<<1 | RXEN)
};
uchar code Channel_Addr[]={0x34,0x12,0x00,0x00,0x00};//設置通道1地址,發射和接收必須匹配
uchar nRF2401_Data[32]; //定義nRF2401數據發送接收臨時存儲地址
uchar nRF2401_flag;//定義標志位,bit7-bit2 暫時保留 | bit0:是否有接收數據標志位 1:有 0:無
//| bit1:是否有按鍵數據標志位 1:有 0:無
/*****************************************/
void delayms(uint count); //延時程序
void speakertest(void); //蜂鳴器程序
uchar nRF2401_Read_Byte(void); //讀字節
void nRF2401_Write_Byte(uchar Send_Byte);//寫字節
void nRF2401_config(void); //參數配置
void nRF2401_Transmit_Mode(void); //設置為發射模式
void nRF2401_Receive_Mode(void); //設置為接收模式
void nRF2401_Transmit_Data(uchar TxBuf[]); //nRF2401發送數據子程序
void nRF2401_Receive_Data(uchar *data_temp);//nRF2401接收數據子程序
void init_rs232(void); //串口初始化
void keytest(void); //按鍵測試程序
/*****************************************/
/*************延時子程序start*****************/
void delayms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
/**************延時子程序end****************/
/* 串口通信初始化設置 */
void init_rs232(void)
{
SCON=0x50;
PCON=0x00;
TH1=0xFD; //波特率 9600 11.0592MHZ 時候
TL1=0XFD;
TMOD=0X20;
TR1=1;
}
void speakertest(void)//蜂鳴器程序
{
unsigned char i;
for(i=0;i<100;i++)
{
speaker=0;
delayms(1);
speaker=1;
delayms(1);
}
}
/*****************************************/
void keytest(void) //按鍵測試程序
{
////////按鍵K1判斷程序////////
while(K1==0)
{
delayms(100);//按鍵去抖
if(K1==1)
{
nRF2401_flag|=0x02; //按鍵標志位nRF2401_flag_bit1=1
speakertest();
nRF2401_Data[0]++;
}
else
{;}
}
/////////////////////////////
////////按鍵K2判斷程序////////
while(K2==0)
{
delayms(100);//按鍵去抖
if(K2==1)
{
nRF2401_flag|=0x02; //按鍵標志位nRF2401_flag_bit1=1
speakertest();
nRF2401_Data[0]--;
}
else
{nRF2401_flag&=0xfd; } //清除按鍵標志位nRF2401_flag_bit1=0
}
/////////////////////////////
////////按鍵K3判斷程序////////
while(K3==0)
{
delayms(100);//按鍵去抖
if(K3==1)
{
nRF2401_flag|=0x02; //按鍵標志位nRF2401_flag_bit1=1
speakertest();
nRF2401_Data[0]=0x00;
}
else
{nRF2401_flag&=0xfd; } //清除按鍵標志位nRF2401_flag_bit1=0
}
/////////////////////////////
////////按鍵K4判斷程序////////
while(K4==0)
{
delayms(100);//按鍵去抖
if(K4==1)
{
nRF2401_flag|=0x02; //按鍵標志位nRF2401_flag_bit1=1
speakertest();
nRF2401_Data[0]=0xff;
}
else
{nRF2401_flag&=0xfd; } //清除按鍵標志位nRF2401_flag_bit1=0
}
if((nRF2401_flag&0x02)==0x02)//判斷是否有按鍵按下
{
P0=~nRF2401_Data[0];
nRF2401_Transmit_Mode(); //設置為發送模式
nRF2401_Transmit_Data(nRF2401_Data); //發送數據
nRF2401_Receive_Mode(); //設置為接收模式
nRF2401_flag&=0xfd; //清除按鍵標志位nRF2401_flag_bit1=0
}
else
{;}
}
/************讀數據子程序***********/
uchar nRF2401_Read_Byte(void)
{
uchar i,j,temp;
temp=0x00;
for (i=0;i<8;i++)
{
CLK1=1;
_nop_();
if (DATA==1) j=1;
else j=0;
temp=(temp<<1)|j;
CLK1=0;
}
return temp;
}
/************寫數據子程序***********/
void nRF2401_Write_Byte(uchar Send_Byte)
{
uchar i;
for (i=0;i<8;i++)
{
Send_Byte=Send_Byte<<1;
DATA=CY; //讀進位數據
CLK1=1;
_nop_();
CLK1=0;
}
}
/*********配置參數子程序***********/
void nRF2401_config(void)
{
uchar i;
//////stand by/////////////
nRF2401_PWR_UP=1;
nRF2401_CE=0;
nRF2401_CS=0;
///////////////////////////// datasheet(page24 of 37)
delayms(3);// PWR_DWN -> ST_BY_mode | MAX 3ms | name: Tpd2sby |
nRF2401_CS=1; //進入配置模式Configuration
////18個字節的配置字////////////// datasheet(page17 of 37)
for (i=0;i<18;i++)
{
nRF2401_Write_Byte(nRF2401_Config_Word);
}
delayms(1);
nRF2401_CS=0; //nRF2401_CS 置低使配置有效 datasheet(page26 of 37);
}
/*********設置發射模式子程序*********/
void nRF2401_Transmit_Mode(void)
{
nRF2401_PWR_UP=1; //進入配置模式
nRF2401_CE=0;
nRF2401_CS=1;
delayms(1);
//RXEN(bit0)=0 transmit mode ; datasheet(page22 of 37);
DATA =0;
CLK1=1;
_nop_();
CLK1=0;
//設置為Active(Tx)模式
nRF2401_CE=1;
nRF2401_CS=0;
delayms(1);
}
/*********設置接收模式子程序*********/
void nRF2401_Receive_Mode(void)
{
nRF2401_PWR_UP = 1; //進入配置模式
nRF2401_CE=0;
nRF2401_CS=1;
delayms(1);
//RXEN(bit0)=1 receive mode ; datasheet(page22 of 37);
DATA =1;
CLK1=1;
_nop_();
CLK1=0;
//設置為Active(Rx)模式
nRF2401_CE=1;
nRF2401_CS=0;
delayms(1);
}
//接收方通道硬件地址
/********發送數據子程序*********/
void nRF2401_Transmit_Data(uchar TxBuf[]) //datasheet(page22 of 37);
{
uchar i;
nRF2401_CE=1;
delayms(1);
for (i=0;i< (ADDR_W/8);i++)//寫入接收地址(按字節對齊)
{
nRF2401_Write_Byte(Channel_Addr);
}
for (i=0;i<(DATA1_W/8);i++)//寫入需要發送的數據(按字節對齊)
{
nRF2401_Write_Byte(TxBuf);
}
nRF2401_CE=0; //nRF2401_CE 置低使發送有效
delayms(1);
}
/********接收數據子程序*********/
void nRF2401_Receive_Data(uchar *data_temp)
{
uchar i;
if (DR1==1) //接收完畢后,DR1自動為0 datasheet(page28 of 37);
{
for (i=0; i<DATA1_W/8; i++)
{
*data_temp=nRF2401_Read_Byte();
data_temp++;
}
nRF2401_flag|=0x01; //接收標志位nRF2401_flag_bit0=1
}
else
{nRF2401_flag&=0xfe;}//接收標志位nRF2401_flag_bit0=0
}
void main(void)
{
delayms(1000);//開機延時
nRF2401_Data[0] = 0;
init_rs232(); //串口初始化
TI=1; //串口發射有效
nRF2401_config(); //nRF2401初始化配置
delayms(100);
speakertest(); //蜂鳴器叫一聲
nRF2401_Transmit_Mode(); //設置為發送模式
nRF2401_Transmit_Data(nRF2401_Data);//發送測試數據
nRF2401_Receive_Mode(); //設置為接收模式
SBUF=0x55; //串口輸出0x55 測試是否有正確的串口數據
delayms(100);
while (1)
{
nRF2401_Receive_Data(nRF2401_Data);//接收數據,并存放到nRF2401_Data[32]數組中
if (nRF2401_flag&0x01==0x01) //判斷是否有數據收到
{
P0=~nRF2401_Data[0];
SBUF=nRF2401_Data[0];
}
else
{;}
keytest(); //調用按鍵子程序,無線發送數據
}
}
復制代碼
作者:
ysyouxian
時間:
2015-4-13 14:40
我想問一下 圖上那個8P座子 我寫的那個位置是1管腳嗎 求解
360截圖20150413143918360.jpg
(7.29 KB, 下載次數: 270)
下載附件
2015-4-13 14:40 上傳
作者:
薛家駿
時間:
2015-9-27 08:47
就是六啊
作者:
hhdsdy
時間:
2015-11-19 19:21
學習一下,頂一頂!
作者:
岳陽樓
時間:
2016-1-26 22:32
怎么有3處警告了?
作者:
Goldenjin
時間:
2016-2-6 09:56
學習了謝謝!
作者:
906451553
時間:
2016-3-30 18:51
這個是怎么連接的
作者:
ludaijin
時間:
2016-7-27 08:04
收長一下,有空看看
作者:
蛻變
時間:
2017-7-13 13:04
很厲害 慢慢學習 謝謝
作者:
p_p_sunday
時間:
2018-3-9 17:06
非常感謝!。咱們互相幫助吧。
非常好的資料。 下載學習下
作者:
菜用雞
時間:
2019-3-12 22:10
插個真眼,以后學習
作者:
兵山讀者
時間:
2023-11-24 13:15
一直在找有關24l01的51單片機程序,謝謝你提供的資料。
作者:
wawj1234567890
時間:
2023-11-29 20:07
nrf2401容易壞嗎?
作者:
powerdruy
時間:
2023-11-30 09:16
按鍵消抖用100ms死等,這個程序的效率可能會非常低
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1