亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? nrf24l01 C51 中文注釋
?? C
字號:
/**************************************************
來源:網上
改寫:bluefeel
時間:10-03-13
單位:桂林理工大學
/**************************************************/

#include <reg51.h>
#include <api.h>

#define uchar unsigned char

/***************************************************/
#define TX_ADR_WIDTH   5  // 5字節寬度的發送/接收地址
#define TX_PLOAD_WIDTH 4  // 數據通道有效數據寬度
#define LED P2

uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};  // 定義一個靜態發送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
uchar flag;
uchar DATA = 0x01;
uchar bdata sta;
sbit  RX_DR	 = sta^6;
sbit  TX_DS	 = sta^5;
sbit  MAX_RT = sta^4;
/**************************************************/

/**************************************************
函數: init_io()

描述:
    初始化IO
/**************************************************/
void init_io(void)
{
	CE  = 0;        // 待機
	CSN = 1;        // SPI禁止
	SCK = 0;        // SPI時鐘置低
	IRQ = 1;        // 中斷復位
	LED = 0xff;		// 關閉指示燈
}
/**************************************************/

/**************************************************
函數:delay_ms()

描述:
    延遲x毫秒
/**************************************************/
void delay_ms(uchar x)
{
    uchar i, j;
    i = 0;
    for(i=0; i<x; i++)
    {
       j = 250;
       while(--j);
	   j = 250;
       while(--j);
    }
}
/**************************************************/

/**************************************************
函數:SPI_RW()

描述:
    根據SPI協議,寫一字節數據到nRF24L01,同時從nRF24L01
	讀出一字節
/**************************************************/
uchar SPI_RW(uchar byte)
{
	uchar i;
   	for(i=0; i<8; i++)          // 循環8次
   	{
   		MOSI = (byte & 0x80);   // byte最高位輸出到MOSI
   		byte <<= 1;             // 低一位移位到最高位
   		SCK = 1;                // 拉高SCK,nRF24L01從MOSI讀入1位數據,同時從MISO輸出1位數據
   		byte |= MISO;       	// 讀MISO到byte最低位
   		SCK = 0;            	// SCK置低
   	}
    return(byte);           	// 返回讀出的一字節
}
/**************************************************/

/**************************************************
函數:SPI_RW_Reg()

描述:
    寫數據value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
	uchar status;
  	CSN = 0;                   // CSN置低,開始傳輸數據
  	status = SPI_RW(reg);      // 選擇寄存器,同時返回狀態字
  	SPI_RW(value);             // 然后寫數據到該寄存器
  	CSN = 1;                   // CSN拉高,結束數據傳輸
  	return(status);            // 返回狀態寄存器
}
/**************************************************/

/**************************************************
函數:SPI_Read()

描述:
    從reg寄存器讀一字節
/**************************************************/
uchar SPI_Read(uchar reg)
{
	uchar reg_val;
  	CSN = 0;                    // CSN置低,開始傳輸數據
  	SPI_RW(reg);                // 選擇寄存器
  	reg_val = SPI_RW(0);        // 然后從該寄存器讀數據
  	CSN = 1;                    // CSN拉高,結束數據傳輸
  	return(reg_val);            // 返回寄存器數據
}
/**************************************************/

/**************************************************
函數:SPI_Read_Buf()

描述:
    從reg寄存器讀出bytes個字節,通常用來讀取接收通道
	數據或接收/發送地址
/**************************************************/
uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
	uchar status, i;
  	CSN = 0;                    // CSN置低,開始傳輸數據
  	status = SPI_RW(reg);       // 選擇寄存器,同時返回狀態字
  	for(i=0; i<bytes; i++)
    	pBuf[i] = SPI_RW(0);    // 逐個字節從nRF24L01讀出
  	CSN = 1;                    // CSN拉高,結束數據傳輸
  	return(status);             // 返回狀態寄存器
}
/**************************************************/

/**************************************************
函數:SPI_Write_Buf()

描述:
    把pBuf緩存中的數據寫入到nRF24L01,通常用來寫入發
	射通道數據或接收/發送地址
/**************************************************/
uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
	uchar status, i;
  	CSN = 0;                    // CSN置低,開始傳輸數據
  	status = SPI_RW(reg);       // 選擇寄存器,同時返回狀態字
  	for(i=0; i<bytes; i++)
    	SPI_RW(pBuf[i]);        // 逐個字節寫入nRF24L01
  	CSN = 1;                    // CSN拉高,結束數據傳輸
  	return(status);             // 返回狀態寄存器
}
/**************************************************/

/**************************************************
函數:RX_Mode()

描述:
    這個函數設置nRF24L01為接收模式,等待接收發送設備的數據包
/**************************************************/
void RX_Mode(void)
{
	CE = 0;
  	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 接收設備接收通道0使用和發送設備相同的發送地址
  	SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);               // 使能接收通道0自動應答
  	SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);           // 使能接收通道0
  	SPI_RW_Reg(WRITE_REG + RF_CH, 40);                 // 選擇射頻通道0x40
  	SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);  // 接收通道0選擇和發送通道相同有效數據寬度
  	SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);            // 數據傳輸率1Mbps,發射功率0dBm,低噪聲放大器增益
  	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);              // CRC使能,16位CRC校驗,上電,接收模式
  	CE = 1;                                            // 拉高CE啟動接收設備
}
/**************************************************/

/**************************************************
函數:TX_Mode()

描述:
    這個函數設置nRF24L01為發送模式,(CE=1持續至少10us),
	130us后啟動發射,數據發送結束后,發送模塊自動轉入接收
	模式等待應答信號。
/**************************************************/
void TX_Mode(uchar * BUF)
{
	CE = 0;
  	SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);     // 寫入發送地址
  	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 為了應答接收設備,接收通道0地址和發送地址相同
  	SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH);                  // 寫數據包到TX FIFO
  	SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);       // 使能接收通道0自動應答
  	SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);   // 使能接收通道0
  	SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x0a);  // 自動重發延時等待250us+86us,自動重發10次
  	SPI_RW_Reg(WRITE_REG + RF_CH, 40);         // 選擇射頻通道0x40
  	SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);    // 數據傳輸率1Mbps,發射功率0dBm,低噪聲放大器增益
  	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);      // CRC使能,16位CRC校驗,上電
	CE = 1;
}
/**************************************************/

/**************************************************
函數:Check_ACK()

描述:
    檢查接收設備有無接收到數據包,設定沒有收到應答信
	號是否重發
/**************************************************/
uchar Check_ACK(bit clear)
{
	while(IRQ);
	sta = SPI_RW(NOP);                    // 返回狀態寄存器
	if(MAX_RT)
		if(clear)                         // 是否清除TX FIFO,沒有清除在復位MAX_RT中斷標志后重發
			SPI_RW(FLUSH_TX);
	SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除TX_DS或MAX_RT中斷標志
	IRQ = 1;
	if(TX_DS)
		return(0x00);
	else
		return(0xff);
}
/**************************************************/

/**************************************************
函數:CheckButtons()

描述:
    檢查按鍵是否按下,按下則發送一字節數據
/**************************************************/
void CheckButtons()
{
	P3 |= 0x00;
	if(!(P3 & 0x01))		            // 讀取P3^0狀態
	{
		delay_ms(20);
		if(!(P3 & 0x01))			    // 讀取P3^0狀態
		{
			TX_BUF[0] = ~DATA;          // 數據送到緩存
			TX_Mode(TX_BUF);			// 把nRF24L01設置為發送模式并發送數據
			LED = ~DATA;		        // 數據送到LED顯示
			Check_ACK(1);               // 等待發送完畢,清除TX FIFO
			delay_ms(250);
			delay_ms(250);
			LED = 0xff;			        // 關閉LED
			RX_Mode();			        // 設置為接收模式
			while(!(P3 & 0x01));
			DATA <<= 1;
			if(!DATA)
				DATA = 0x01;
		}
	}
}
/**************************************************/

/**************************************************
函數:main()

描述:
    主函數
/**************************************************/
void main(void)
{
	init_io();		              // 初始化IO
	RX_Mode();		              // 設置為接收模式
	while(1)
	{
		CheckButtons();           // 按鍵掃描
		sta = SPI_Read(STATUS);	  // 讀狀態寄存器
	    if(RX_DR)				  // 判斷是否接受到數據
		{
			SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  // 從RX FIFO讀出數據
			flag = 1;
		}
		SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除RX_DS中斷標志
		if(flag)		           // 接受完成
		{
			flag = 0;		       // 清標志
			LED = RX_BUF[0];	   // 數據送到LED顯示
			delay_ms(250);
			delay_ms(250);
  			LED = 0xff;		       // 關閉LED
		}
	}
}
/**************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品麻豆日日躁夜夜躁| 国产午夜精品一区二区三区嫩草| 天天色天天操综合| 久久亚区不卡日本| 欧美一区二区三区四区视频| 欧美日韩一卡二卡| 91蜜桃在线免费视频| 成人综合日日夜夜| 国产成人综合在线| 国产成人亚洲精品青草天美 | 色欧美日韩亚洲| 99国产精品视频免费观看| 成人午夜视频网站| 日韩一级高清毛片| 久久精品一区四区| 另类欧美日韩国产在线| 美女www一区二区| 国产自产2019最新不卡| 国产成人综合在线播放| 日韩视频中午一区| 免费在线观看视频一区| 精品亚洲成av人在线观看| 国产成人亚洲精品青草天美| 精品久久久久久久久久久久久久久久久 | 亚洲男同性恋视频| 亚洲男人都懂的| 成人精品视频一区| 日本一区二区免费在线观看视频| 亚洲欧洲精品成人久久奇米网| 亚洲欧美日韩国产另类专区| 成人综合激情网| 欧美国产欧美综合| 亚洲成av人片一区二区梦乃| 狠狠色丁香久久婷婷综| 日韩欧美一二区| 亚洲美女电影在线| 色偷偷88欧美精品久久久| 亚洲欧美在线视频观看| 色综合久久久久综合99| 有码一区二区三区| 国产精品一区二区三区99| 欧美日韩一级视频| 免费日韩伦理电影| 日韩午夜av一区| 国产一区在线观看麻豆| 欧美三级日韩三级国产三级| 亚洲午夜免费视频| 成人国产精品免费观看| 欧美一区二区免费视频| 老司机精品视频在线| 久久丝袜美腿综合| 99久久综合狠狠综合久久| 欧美精品一区二区三区蜜桃视频 | 精品国产乱码久久久久久夜甘婷婷| 蜜臀精品久久久久久蜜臀| 久久九九全国免费| 91久久精品网| 国产精品国产三级国产| 国产一区二区不卡在线| 国产精品久久久久久久久果冻传媒 | 国产精品污www在线观看| 麻豆国产精品官网| 久久视频一区二区| 97精品电影院| 久久99精品国产麻豆婷婷| 日本一区二区免费在线| 欧美视频自拍偷拍| 亚洲女同ⅹxx女同tv| 91精品国产91综合久久蜜臀| 国产精品中文有码| 亚洲图片欧美视频| 国产欧美一区二区精品性色 | 亚洲麻豆国产自偷在线| 日韩精品资源二区在线| 91小视频在线免费看| 久久99久久久久久久久久久| 亚洲色图制服丝袜| 91首页免费视频| 开心九九激情九九欧美日韩精美视频电影 | 欧美日韩久久久| 亚洲综合丁香婷婷六月香| 一本色道亚洲精品aⅴ| 麻豆成人91精品二区三区| 亚洲视频在线观看三级| 精品国产伦一区二区三区观看体验| 91久久精品午夜一区二区| 国产在线观看一区二区| 亚洲va国产va欧美va观看| 亚洲视频一二三| 国产欧美日韩在线观看| 日韩一区二区三| 欧美伊人久久久久久久久影院 | 欧美视频自拍偷拍| 97久久精品人人做人人爽| 国内精品写真在线观看| 蜜桃视频在线观看一区| 亚洲综合小说图片| 一区二区三区在线看| 欧美精品aⅴ在线视频| 久久99国内精品| 香蕉成人伊视频在线观看| 一区二区三区免费在线观看| 中文字幕在线一区免费| 久久美女艺术照精彩视频福利播放| 成人免费毛片片v| 精品亚洲成a人| 狠狠网亚洲精品| 久久精品av麻豆的观看方式| 午夜激情综合网| 天天综合网 天天综合色| 一级女性全黄久久生活片免费| 国产精品福利一区| 亚洲情趣在线观看| 专区另类欧美日韩| 国产精品美日韩| 国产精品久久看| 亚洲图片激情小说| 一区二区三区 在线观看视频| 亚洲欧美一区二区不卡| 亚洲精品国产第一综合99久久| 亚洲视频网在线直播| 亚洲精品ww久久久久久p站| 亚洲精品老司机| 亚洲第一成年网| 久久精品国产精品青草| 国产成a人亚洲精品| 日本一道高清亚洲日美韩| 国产精品久久久久影院老司 | 福利电影一区二区| av中文字幕亚洲| 一本到一区二区三区| 欧美军同video69gay| 91精品在线麻豆| 久久色.com| 亚洲三级小视频| 亚洲福利视频一区| 精品在线播放午夜| 成人av资源站| 在线播放欧美女士性生活| 久久综合999| 亚洲婷婷在线视频| 青青草伊人久久| 成人精品在线视频观看| 色狠狠色狠狠综合| 日韩欧美国产一区在线观看| 中文字幕不卡三区| 日韩影视精彩在线| 亚洲高清三级视频| 国产一二三精品| 色一情一乱一乱一91av| 日韩区在线观看| 亚洲日本va在线观看| 日本aⅴ亚洲精品中文乱码| 国产黄色精品视频| 69堂成人精品免费视频| 国产精品久久久久影院| 日韩国产欧美一区二区三区| 成人免费视频免费观看| 欧美一区二区视频网站| 亚洲私人黄色宅男| 国产一区二区在线视频| 欧美日韩三级一区二区| 国产亚洲精品资源在线26u| 亚洲午夜精品在线| www.av精品| 精品国产一区二区三区忘忧草| 亚洲欧美激情在线| 国产精品系列在线观看| 日韩一区二区三区三四区视频在线观看| 中文字幕不卡的av| 久久99精品网久久| 欧美日韩国产一区二区三区地区| 久久婷婷久久一区二区三区| 亚洲电影你懂得| 91美女在线视频| 久久精品亚洲麻豆av一区二区| 天天操天天干天天综合网| 色综合久久中文综合久久牛| 国产午夜精品在线观看| 韩日欧美一区二区三区| 日韩亚洲欧美高清| 香蕉成人啪国产精品视频综合网| 99这里都是精品| 日本一区二区三区免费乱视频| 久久精品国产99久久6| 日韩视频不卡中文| 日本中文在线一区| 69av一区二区三区| 丝袜美腿一区二区三区| 欧美日韩免费高清一区色橹橹| 亚洲精品水蜜桃| 色综合久久久久综合体桃花网| 国产精品久久久久影视| 高清不卡一二三区| 国产精品网友自拍| eeuss鲁片一区二区三区在线观看| 久久精品人人爽人人爽| 成人黄色在线视频| 中文字幕亚洲欧美在线不卡| k8久久久一区二区三区|