找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1779|回复: 0
打印 上一主题 下一主题
收起左侧

单片机设计,基于单片机的NRF24L01 2.4G无线通信系统,附有源码程序

[复制链接]
跳转到指定楼层
楼主
1、完成硬件电路的设计,其中包括单片机和NRF24L01芯片模块的设计;
2、完成无线通信模块的程序设计与实现进行分析和总结;

电路原理图如下:


单片机源程序如下:
  1. /**************************************************************************************
  2. *                              LCD1602液晶显示实验                                                                                                  *
  3. 实现现象:        具体接线操作请参考视频教程
  4.                         下载程序后插上LCD1602液晶在开发板上,即可显示
  5. 注意事项:                                                                                                                                                                  
  6. ***************************************************************************************/

  7. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  8. #include "lcd.h"


  9. typedef unsigned int u16;          //对数据类型进行声明定义
  10. typedef unsigned char u8;


  11. sbit        KEY1=P2^3;
  12. sbit        KEY2=P2^2;


  13. void Delay(unsigned int s);
  14. void inerDelay_us(unsigned char n);
  15. void init_NRF24L01(void);
  16. u16 SPI_RW(u16 u8);
  17. u8 SPI_Read(u8 reg);
  18. void SetRX_Mode(void);
  19. void SetTX_Mode(void);
  20. u16 SPI_RW_Reg(u8 reg, u8 value);
  21. u16 SPI_Read_Buf(u8 reg, u8 *pBuf, u8 uchars);
  22. u16 SPI_Write_Buf(u8 reg, u8 *pBuf, u8 uchars);
  23. unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);
  24. void nRF24L01_TxPacket(unsigned char * tx_buf);

  25.        
  26.         u8 TxBuf[20]={0};         
  27.        
  28.         u8 flag;
  29.         u8 data_count;
  30.         u8 word_length;
  31.        
  32. void UsartInit()
  33. {
  34.         SCON=0X50;                        //设置为工作方式1
  35.         TMOD=0X20;                        //设置计数器工作方式2
  36.         PCON=0X80;                        //波特率加倍
  37.         TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
  38.         TL1=0XF3;
  39.         ES=1;                                                //打开接收中断
  40.         EA=1;                                                //打开总中断
  41.         TR1=1;                                        //打开计数器
  42. }

  43. /*******************************************************************************
  44. * 函 数 名         : main
  45. * 函数功能                   : 主函数
  46. * 输    入         : 无
  47. * 输    出         : 无
  48. *******************************************************************************/
  49. void main(void)
  50. {
  51.         u8 i;
  52.   u8 RxBuf[20]={0};

  53.   init_NRF24L01() ;
  54.         Init_LCD1602();
  55.         UsartInit();       
  56.        
  57.         while(1)
  58.         {
  59.            if(KEY1 == 0 )
  60.                   {               
  61.                         SetTX_Mode();       
  62.                         for(i=word_length;i<20;i++)
  63.                                 {
  64.                                          TxBuf[i]=0x20;
  65.                                 }
  66.                         LCD1602_Dis_Str(0, 0, &TxBuf[0]);        //显示字符串
  67.                        
  68.                         nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
  69.                         }
  70. //***********************************************************************************************
  71.                                 SetRX_Mode();
  72.                                 nRF24L01_RxPacket(RxBuf);
  73.                                 LCD1602_Dis_Str(0, 1, &RxBuf[0]);        //显示字符串
  74.                                 Delay(1000);
  75.        
  76.                         if(KEY2 == 0)
  77.                         {
  78.                                         LCD1602_Write_Cmd(0x01); //清除显示
  79.                         }
  80.         }
  81. }               

  82. void UART_Receive() interrupt 4{
  83. u8 temp,j;
  84.                 if(RI ==1 )

  85. {                RI=0;
  86.        
  87. //                LCD1602_Write_Cmd(0x01); //清除显示
  88.        
  89.                 temp=SBUF;
  90.                 if(temp!='.')
  91.                 {
  92.                         TxBuf[data_count]=temp;//
  93.                         data_count++;
  94.                 }
  95.                 else{
  96.                         word_length=data_count;
  97.                         data_count=0;
  98.                 }
  99.                
  100.         }       
  101. }
复制代码

所有程序51hei提供下载:
程序.zip (57.68 KB, 下载次数: 42)




评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表