找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用LT8920做2.4G无线通信原理图与51单片机程序

  [复制链接]
跳转到指定楼层
楼主
用LT8920-做2.4G的电路原理图如下:



单片机源程序如下:
  1. /**********************************
  2. *LT89XX测试DEMO
  3. *硬件平台:YBDZ_ERF_DEMO测试实验板
  4. *测试描述:两块测试实验板分别搭载一个LT89XX无线模块
  5. 当按其中任意一个测试板的按键例如KEY1,那么该测试板会通过无线模块将键值发送出去,另一测试板收到键值数据后,
  6. 点亮对应的LED(KEY1对应LED1KEY2对应LED2)并且返回应答信号,
  7. 发送板在收到接收板返回的应答信号后会点亮该板上和按键对应的LED,这样表示通信成功。
  8. 备注:点亮的LED延时3秒后熄灭,测试需要两块测试板烧写同样的程序,不管按下那块板上的按键,效果都是一样的,不区分发射板和接收板,测试程序中包含发射,接收,按键扫描,和LED驱动。
  9. *MCU:STC15W408AS
  10. *时钟:6MHZ
  11. *出处:一步电子工作室
  12. ***********************************/
  13. #include <intrins.h>
  14. #include "LT89XX_DRV.h"
  15. #include "Key_Drive.h"
  16. #include "STC_NEW_8051.H"

  17. #define TX_DAT1 0x01         //发送数据1                        
  18. #define TX_DAT2 0x02     //发送数据2
  19. #define INT_RX  0x03     //初始化接收模式
  20. #define RX_MOD  0x00     //常规接收模式


  21. sbit LED1= P5^4;            
  22. sbit LED2= P5^5;

  23.                           
  24. #define LED1_ON()  LED1=0
  25. #define LED2_ON()  LED2=0
  26. #define LED1_OFF() LED1=1
  27. #define LED2_OFF() LED2=1

  28. unsigned char RBUF[32];

  29. extern unsigned char time_5ms_flag;

  30. void main(void)
  31. {
  32.         //uchar tx_lcd_flag = 0;
  33.         unsigned char index = 0;           //channel indicator

  34.         unsigned char highReg = 0;
  35.         unsigned char lowReg  = 0;

  36.         unsigned char keyvalue = 0;                                          //key return value

  37.         unsigned char index_state = INT_RX;           //working manner index is initiated.

  38.     unsigned char i,j;

  39.         unsigned short count;

  40.    // Init_Timer(); //初始化定时器和延时器
  41.     Delay_ms(10);
  42.         LT8900_Init();
  43.         #ifdef LT8910
  44.         //8910设置成62.5kbps Reg44 地址上配置 1000H, Reg45 配置 0552H, 是 62.5Kbps
  45.         SPI_WriteReg(44, 0x10, 0x00);
  46.         SPI_WriteReg(45, 0x05, 0x52);        
  47.         #endif
  48.         //-----------------
  49.         //读出寄存器的值检查硬件读写时序是否正确
  50.         SPI_ReadReg(40);
  51.         if (RegH==0x44 && RegL==0x02)
  52.         {
  53.                 LED1_ON();
  54.                 LED2_ON();
  55.                 Delay_ms(200);
  56.                 LED1_OFF();
  57.                 LED2_OFF();
  58.         }
  59.     //-----------------
  60.     count=0;
  61.     //-----------------
  62.         while (1)
  63.         {
  64.             if(time_5ms_flag)
  65.                     {
  66.                     Get_KeyValue(&keyvalue);         //cost 50us
  67.                     time_5ms_flag=FALSE;
  68.                         
  69.                         if(count<600)
  70.                count++;
  71.                         if(count==600)
  72.                                 {
  73.                                 LED2_OFF();
  74.                                 LED1_OFF();                                
  75.                                 }
  76.                     }
  77.                 switch(keyvalue)
  78.                 {
  79.                     case (KEY1|KEY_PRESS):
  80.             index_state=TX_DAT1;
  81.                         break;

  82.                         case (KEY2|KEY_PRESS):
  83.             index_state=TX_DAT2;
  84.                         break;

  85.                         default :  break;
  86.                 }


  87.                 switch(index_state)
  88.                 {
  89.                     case INT_RX:
  90.             //设置成数据接收模式
  91.                   SPI_WriteReg(52, 0x80, 0x80);
  92.                 SPI_WriteReg(7, 0x00, 0x80 + 0x20);        
  93.                         index_state=RX_MOD;
  94.                         break;
  95.                         
  96.             case RX_MOD:
  97.                         //检查是否接收到数据
  98.                     if(PKT == 1)
  99.                         {
  100.                     i=0;
  101.                     SPI_ReadReg(50);
  102.                 j=RegH;//读取包长度
  103.                     while(i<j)
  104.                          {
  105.                          //读取数据
  106.                          SPI_ReadReg(50);
  107.                          RBUF[i++]=RegH;
  108.                          RBUF[i++]=RegL;
  109.                          if(i==32)
  110.                                  break;
  111.                          }   
  112.                     //一旦发生错误,寄存器 Reg48 bit15 位 CRC_ERROR 将被自动置 1,在下次开始 RX 或 TX 时它将被清除。
  113.             //Test CRC
  114.                     SPI_ReadReg(48);
  115.                     if((RegH&0x80)==0)
  116.                          {
  117.                          //判断数据点亮灯
  118.                          if(RBUF[0]==1)
  119.                                  {
  120.                                  LED1_ON();
  121.                                 count=0;
  122.                                  }
  123.                          else if(RBUF[0]==2)
  124.                                  {
  125.                                  LED2_ON();
  126.                                 count=0;
  127.                                  }
  128.                          }
  129.                         //再次初始化为接收模式
  130.                         index_state=INT_RX;
  131.                         //LED1_OFF();
  132.                     }
  133.                         break;

  134.                         case TX_DAT1:
  135.                     //将数据发送出去
  136.                    SPI_WriteReg(52, 0x80, 0x80);
  137.                    //i=0;
  138.                    //写入长度 长度包含长度字节本身
  139.                    SPI_WriteReg(50, 2,0);
  140.            //写入数据
  141.                    SPI_WriteReg(50, 1,0);
  142.            //开始发送
  143.                    SPI_WriteReg(7, 0x01, 0x20);
  144.                    while (PKT== 0); //等待发送完成
  145.            //判断是否收到对方自动应答信号,REG52<13:8>应为0
  146.            SPI_ReadReg(52);
  147.                    if((RegH& 0x3F)==0)//如果收到应答信号点亮本地对应的LED
  148.                            {
  149.                               LED1_ON();
  150.                            count=0;
  151.                            }
  152.                    //发送完成初始化为接收模式
  153.                    index_state=INT_RX;
  154.                         break;

  155.                         case TX_DAT2:
  156.                     //将数据发送出去
  157.                    SPI_WriteReg(52, 0x80, 0x80);
  158.                    i=0;
  159.                    //写入长度 长度包含长度字节本身
  160. ……………………

  161. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei提供下载:
XY-WAB基于51单片机的程序与原理图.rar (71.77 KB, 下载次数: 409)


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

使用道具 举报

沙发
ID:229552 发表于 2018-1-25 17:55 | 只看该作者
这款芯片怎么操作寄存器?数据手册上说的好模糊
回复

使用道具 举报

板凳
ID:389990 发表于 2018-8-25 17:11 | 只看该作者
刚注册,我要下载啊
回复

使用道具 举报

地板
ID:293106 发表于 2018-9-4 09:00 | 只看该作者
谢谢分享,看看是怎么驱动的
回复

使用道具 举报

5#
ID:285897 发表于 2018-9-7 20:57 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
ID:218002 发表于 2018-9-17 13:44 | 只看该作者
我一直读寄存器不成功
回复

使用道具 举报

7#
ID:42131 发表于 2018-11-2 14:39 | 只看该作者
看看啊  什么好东西                 
回复

使用道具 举报

8#
ID:301968 发表于 2018-12-7 17:04 | 只看该作者
楼主的原理图怎么看?
回复

使用道具 举报

9#
ID:106167 发表于 2018-12-11 22:09 | 只看该作者
好东西
回复

使用道具 举报

10#
ID:476527 发表于 2019-2-15 08:39 | 只看该作者
楼主好样的,资源收下了
回复

使用道具 举报

11#
ID:487132 发表于 2019-3-8 21:35 | 只看该作者
原理图怎么看呀?
回复

使用道具 举报

12#
ID:498382 发表于 2019-3-26 02:04 | 只看该作者
学习了!谢谢分享!!!
回复

使用道具 举报

13#
ID:544323 发表于 2019-5-22 00:38 | 只看该作者
学习了!谢谢分享!!!
回复

使用道具 举报

14#
ID:496733 发表于 2019-7-10 20:29 | 只看该作者
周亚青 发表于 2019-3-8 21:35
原理图怎么看呀?

怕是假的原理图哦
回复

使用道具 举报

15#
ID:585201 发表于 2019-10-9 15:37 | 只看该作者
自己调了几个小时接收一直接收不了数据,参考一下楼主的
回复

使用道具 举报

16#
ID:633767 发表于 2019-11-1 21:28 | 只看该作者
调接收调了好久都没成功,参考下,希望能解决掉
回复

使用道具 举报

17#
ID:669348 发表于 2019-12-21 10:35 | 只看该作者
初始化后读取验证一直不成功
回复

使用道具 举报

18#
ID:241550 发表于 2020-2-28 21:27 | 只看该作者
亲,我修改程序后用STC89C52RC测试,为什么不能运行呢
回复

使用道具 举报

19#
ID:706969 发表于 2020-3-12 13:48 | 只看该作者
苯宝宝 发表于 2020-2-28 21:27
亲,我修改程序后用STC89C52RC测试,为什么不能运行呢

是不是IO口配置有问题
回复

使用道具 举报

20#
ID:241550 发表于 2020-3-12 23:23 | 只看该作者
hufanli 发表于 2020-3-12 13:48
是不是IO口配置有问题

io根据自己的情况调整过了,元件和程序中相同,晶振参数也调了,焊接也是用防静电烙铁焊的
回复

使用道具 举报

21#
ID:75987 发表于 2020-3-31 11:33 | 只看该作者
地址怎么配置啊
回复

使用道具 举报

22#
ID:815841 发表于 2021-6-20 13:09 | 只看该作者
可以用吗?
回复

使用道具 举报

23#
ID:301968 发表于 2021-7-22 15:20 | 只看该作者
楼主,你这个是不是有问题?
回复

使用道具 举报

24#
ID:1092502 发表于 2023-9-2 22:32 | 只看该作者
找一晚,找不到资料
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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