1、sbit LCD_RST =P14;sbit LCD_CE =P13;sbit LCD_DC =P12;sbit LCD_SCLK =P10;sbit LCD_Din =P11;/*按键*/sbit KEY1=P36;sbit KEY2=P37;/*发光二极管*/sbit led1=P16;sbit led2=P17;/*NRF24L01地址宏定义*/#define TX_ADR_WIDTH 5 )右移一位,准备传送下一个数据 SCK = 1; )设置SCK为高 uchar |= MISO; then set SCK low again)拉低SCK时钟产生下降沿,从MSOI送出数据,在下一次S
2、CK为高时读入MISO return(uchar); .)CSN拉低,启动SPI通信 NRF24L01_SPI_RW(reg); )设置读取的寄存器 reg_val = NRF24L01_SPI_RW(0); then read registervalue)读出寄存器中的数据 CSN = 1; and write value to it.)向选择的寄存器中写入数据 )右移一位,准备传送下一个数据 / (CSN high again)CSN拉高,终止SPI通信 return(status); / (return nRF24L01 status uchar)返回2401 reg寄存器的状态/*/*
3、函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数uint NRF24L01_SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) uint status,uchar_ctr; CSN = 0; / Set CSN low, init SPI tranaction status = NRF24L01_SPI_RW(reg); / Select register to write t
4、o and read status uchar for(uchar_ctr=0;uchar_ctruchars;uchar_ctr+) pBufuchar_ctr = NRF24L01_SPI_RW(0); / / return nRF24L01 status uchar/*uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars) 用于写数据,reg:为待写入数据地址,uchars:写入数据的个数/*/uint NRF24L01_SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars) /SP
5、I使能 uchar_ctr uchar_ctr+) / NRF24L01_SPI_RW(*pBuf+);/指向下一个数据 /关闭SPI /返回24L01的状态void SetRX_Mode(void)/*功能:数据接收配置 void NRF24L01_SetRX_Mode(void) CE=0; /片选使能 NRF24L01_SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ收发完成中断响应,16位CRC ,主接收 CE = 1; /片选失能 inerDelay_us(130);/*/unsigned char nRF24L01_RxPacket(unsig
6、ned char* rx_buf)数据读取后放如rx_buf接收缓冲区中unsigned char NRF24L01_RxPacket(unsigned char* rx_buf) unsigned char revale=0; NRF24L01_SetRX_Mode(); Delay(1000); sta=NRF24L01_SPI_Read(STATUS); / 读取状态寄存其来判断数据接收状? if(RX_DR) / 判断是否接收到数据 CE = 0; /SPI使能 NRF24L01_SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/ (re
7、ad receive payload from RX_FIFO buffer)从接收缓冲器中读出数据 revale =1; /读取数据完成标志 led2=0; /二极管显示接没接收到数据 NRF24L01_SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清除中断标志 CSN=0; NRF24L01_SPI_RW(FLUSH_RX); /用于清空FIFO !关键!防止接收先前的数据! CSN=1; Delay(100); led2=1; return revale;/*void nRF24L01_TxPa
8、cket(unsigned char * tx_buf)发送 tx_buf中数据/*/void NRF24L01_TxPacket(unsigned char * tx_buf) /(StandBy I模式)待机 I模式 NRF24L01_SPI_RW(FLUSH_TX);防止发送先前的数据! NRF24L01_SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 装载接收端地址0 NRF24L01_SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); / 装载数据
9、 NRF24L01_SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / IRQ收发完成中断响应,16位CRC,主发送 CE=1; /置高CE,激发数据发送 inerDelay_us(10);void main() unsigned char TxBufTX_PLOAD_WIDTH=0; /定义发送的数据数组 unsigned char RxBufRX_PLOAD_WIDTH=0; /定义接收数据的数组 unsigned char tf=0; /模式标志 LCD_init(); /5110的初始化 LCD_clear(); /5110的清屏函数 NRF24L01_in
10、it(); /NRF24L01的初始化 LCD_write_english_string(3*6,0,acceptor); /字符串显示 while(1) while(1) NRF24L01_RxPacket(RxBuf); Delay(1000); LCD_write_english_string(3*6,1,RxBuf); if(KEY2=0) /去抖延时 Delay(30); if(KEY2=0) TxBuf0=0; /抢答模式 led1=0; Delay(120); led1=1; NRF24L01_TxPacket(TxBuf); while(!KEY2); if(KEY4=0) /
11、去抖延时 if(KEY4=0) while(!KEY4);break; TxBuf0=0; TxBuf1=0; LCD_write_english_string(2*6,1,jury mode LCD_write_english_string(2*6,2,grade: LCD_write_english_char(8*6,2,0 if(KEY1=0) if(KEY1=0) TxBuf1=TxBuf1+1; if(TxBuf1=11) TxBuf1=0; LCD_write_english_char(8*6,2,TxBuf1+0x30); LCD_write_english_char(9*6,2, if(TxBuf1=10) LCD_write_english_char(8*6,2,1 LCD_write_english_char(9*6,2, KEY1); TxBuf0=1; /评委模式 if(KEY3=0) if(KEY3=0) if(TxBuf1=0) TxBuf1=10; else TxBuf1=TxBuf1-1;KEY3); if(KEY4=0) while(! /*修改日:2013/9/25称号:起点 学校:桂林电子科技大学QQ:978019740本人现在正在写上位机的串口通信软件有什么意见的可以一起交流*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1