找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7474|回復(fù): 5
收起左側(cè)

LT8910驅(qū)動(dòng)程序(無(wú)線發(fā)送和接受源碼)

[復(fù)制鏈接]
ID:93248 發(fā)表于 2018-5-16 15:50 | 顯示全部樓層 |閱讀模式
官方提供的LT8910驅(qū)動(dòng)程序,需要的朋友拿去參考參考
0.jpg

LT8920 是一款低成本,高集成度的 2.4GHZ 的無(wú)線收發(fā)芯片。是之前LT8910的升級(jí)版!
外圍射頻電路簡(jiǎn)單,直接接天線

包括射頻前端和數(shù)字基帶的單芯片解決方案:
※ 支持跳頻
※ 支持 SPI 和 I2C 接口
※ 內(nèi)置 auto_ack 功能
※ 數(shù)據(jù)率 1Mbps, 250Kbps, 125Kbps, 62.5Kbps
※ 極低功耗(1uA)
※ 支持信號(hào)能量檢測(cè)
※ 單芯片傳輸距離 200 米
※ TSSOP16 的封裝

單片機(jī)源程序如下:
  1. #include "intrins.h"
  2. #include "IIC_Drive.h"
  3. #include "LCD_Drive.h"
  4. #include "Interrupt.h"
  5. #include "SPI.h"

  6. #define SPI_TEST

  7. #define RX_MODE     0x80
  8. #define SLEEP_MODE  0x40
  9. #define AFTER_SLEEP 0x20


  10. unsigned char *p_rx_sum;
  11. unsigned char working_state = RX_MODE;              // working state

  12. unsigned char rssivalue = 0;

  13. unsigned char channel_index[79] = {0x00, 0x01, 0x02,
  14.                                                                    0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,                           //2402, 2412, 2422, 2432
  15.                                                                    0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
  16.                                                                    0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
  17.                                                                    0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
  18.                                                                    0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34,
  19.                                                                    0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e,
  20.                                                                    0x3f, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
  21.                                                                    0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f};

  22. void main(void)
  23. {
  24.         unsigned char rx_sum = 0;                                                           //接收次數(shù)累加器
  25.         unsigned char highReg = 0;
  26.         unsigned char lowReg  = 0;

  27.         unsigned char channelvalue = 0;
  28.        

  29.         p_rx_sum = &rx_sum;                     //指向累加器的指針

  30.         LCD_Initialize();
  31.         LCD_WriteCommand(0x80);
  32.         LCD_WriteDat(0xf6);                                  //''
  33.         LCD_WriteCommand(0x8c);
  34.         LCD_WriteDat(0x43);                                                //'C'
  35.         LCD_WriteDat(0x48);                                                //'H'
  36.         LCD_WriteDat(bcd_table[(channelvalue+2)/10]);
  37.         LCD_WriteDat(bcd_table[(channelvalue+2)%10]);

  38.         LCD_WriteCommand(0xc0);
  39.         LCD_WriteDat(0x72);                                          //'r'
  40.         LCD_WriteDat(0x73);                                           //'s'
  41.         LCD_WriteDat(0x73);                                           //'s'
  42.         LCD_WriteDat(0x69);                                          //'i'           means rssi
  43.         LCD_WriteDat(bcd_table[rssivalue/10]);
  44.         LCD_WriteDat(bcd_table[rssivalue%10]);

  45.         Timer0_Init();
  46.         //EX0_Init();
  47.         EA = 1;

  48. #ifdef SPI_TEST
  49.         RST  = 0;
  50.         Delay_ms(2);
  51.         RST  = 1;
  52.         Delay_ms(5);
  53.         PKT = 1;
  54.         LT8900_Init();
  55.         SPI_ReadReg(4);
  56.         if (RegH==0x9c && RegL==0xc9)
  57.         {
  58.                 LED_SPI = 0;
  59.         }

  60.         while (1)
  61.         {
  62.                 switch(working_state)
  63.                 {
  64.                 case RX_MODE:
  65.                                         //rssivalue = 0;
  66.                                         SPI_WriteReg( 7, 0x00, 0x00);
  67.                                         SPI_WriteReg(52, 0x80, 0x80);
  68.                                         EX0 = 0;
  69.                                         SPI_WriteReg( 7, 0x00, 0x80+channelvalue);                          //TX Enable & channel set to 2480M
  70.                                         EX0 = 1;
  71.                                 //        while(PKT);
  72.                                         do
  73.                                         {
  74.                                                 SPI_ReadReg(48);
  75.                                         }
  76.                                         while(RegL & 0x40);

  77.                                         SPI_WriteReg( 7, 0x00, 0x00);                          //goto idle mode
  78.                                         SPI_ReadReg(48);
  79.                                         if(!(RegH & 0x80))
  80.                                         {
  81.                                                 LED_RF = ~LED_RF;
  82.                                                 SPI_ReadReg(50);
  83.                                                 if (RegH==0x03 && RegL==0xce)
  84.                                                         rx_sum++;                                                          //RX 累加器加一
  85.                                                 if (RegH==0x01)
  86.                                                 {
  87.                                                                
  88.                                                         channelvalue = RegL;                  //switch to channel RegL
  89.                                                        
  90.                                                         LCD_WriteCommand(0x8e);
  91.                                                         LCD_WriteDat(bcd_table[(channelvalue+2)/10]);
  92.                                                         LCD_WriteDat(bcd_table[(channelvalue+2)%10]);
  93.                                                 }

  94.                                                 SPI_ReadReg(6);                                                                //get rssi_value
  95.                                                 RegH &= 0xfc;
  96.                                                 rssivalue = RegH>>2;
  97.                                                 LCD_WriteCommand(0xc4);
  98.                                                 LCD_WriteDat(bcd_table[rssivalue/10]);
  99.                                                 LCD_WriteDat(bcd_table[rssivalue%10]);
  100.                                                 rssivalue = 0;       
  101.                                         }
  102.                                         break;
  103.                                        

  104.                 case SLEEP_MODE:
  105.                                                 SPI_WriteReg(35, 0x43, 0x00);
  106.                                                 SPI_SS = 1;
  107.                                                 LCD_WriteCommand(0xc0);
  108.                                                 LCD_WriteDat(0x7a);
  109.                                                 working_state = AFTER_SLEEP;
  110.                                                 break;
  111.                 case AFTER_SLEEP:
  112.                                                 _nop_();
  113.                                                 break;
  114.                 default : break;
  115.                                                
  116.                 }       
  117.         }

  118. #else
  119.         MOSI = 0;               // A4 =0
  120.         RST  = 0;
  121.         Delay_ms(2);
  122.         RST  = 1;
  123.         Delay_ms(5);
  124.         PKT = 1;
  125.         RF_Init();
  126.         IIC_ReadReg( 4, &highReg, &lowReg);
  127.         if (highReg==0x9c && lowReg==0xc9)
  128.         {
  129.                 LED_IIC = 0;
  130.         }

  131.         while (1)
  132.         {
  133.                 IIC_WriteReg(52, 0x80, 0x80);
  134.                 IIC_WriteReg( 7, 0x00, 0xb0);                          //TX Enable & channel set to 2450M
  135.                 /*while(PKT);*/
  136.                 do
  137.                 {
  138.                         SPI_ReadReg(48);
  139.                 }
  140.                 while(RegL & 0x40);

  141.                 IIC_WriteReg( 7, 0x00, 0x00);                          //goto idle mode
  142.                 IIC_ReadReg(48, &highReg, &lowReg);
  143.                 if(!(highReg & 0x80))
  144.                 {
  145.                         rx_sum++;                                                          //RX 累加器加一
  146.                         LED_RF = ~LED_RF;
  147.                 }
  148.          }
  149.          
  150. #endif


  151.        
  152.         /*
  153.         LCD_WriteCommand(0x80);
  154.         LCD_WriteDat(0x32);                                  //'2'
  155.         LCD_WriteDat(0x34);                                  //'4'
  156.         LCD_WriteDat(0x35);                                  //'5'
  157.         LCD_WriteDat(0x30);                                  //'0'
  158.         LCD_WriteDat(0xa5);                                  //'.'
  159.         */

  160.        

  161.        

  162.                 /*
  163.                 if(rx_lcd_flag == 50)
  164.                 {
  165.                         LCD_WriteCommand(0x04);                                        // turn left
  166.                          LCD_WriteCommand(0x8f);
  167.                          LCD_WriteDat(0x7f);                                   //'<'
  168.                 }
  169.                 if(rx_lcd_flag == 100)
  170.                 {
  171.                          LCD_WriteDat(0x7f);
  172.                 }
  173.                 if(rx_lcd_flag == 150)
  174.                 {
  175.                          LCD_WriteDat(0x7f);
  176.                 }
  177.                 if(rx_lcd_flag == 200)
  178.                 {
  179.                          LCD_WriteDat(0x7f);
  180.                 }
  181.                 if(rx_lcd_flag >= 250)
  182.                 {
  183.                          rx_lcd_flag = 0;
  184.                         LCD_WriteCommand(0x06);                                                        //寫入新數(shù)據(jù)后 光標(biāo)右移一位
  185.                         LCD_WriteDat(0xa0);
  186.                         LCD_WriteDat(0xa0);
  187.                         LCD_WriteDat(0xa0);
  188.                         LCD_WriteDat(0xa0);
  189.                         //LCD_WriteCommand(0x06);
  190.                 }
  191.                 */
  192.        
  193. }
  194. ……………………

  195. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
LT8910驅(qū)動(dòng)程序.rar (142.91 KB, 下載次數(shù): 143)




回復(fù)

使用道具 舉報(bào)

ID:498382 發(fā)表于 2019-3-26 01:42 | 顯示全部樓層
學(xué)習(xí)了!謝謝分享。!
回復(fù)

使用道具 舉報(bào)

ID:544323 發(fā)表于 2019-5-22 01:01 | 顯示全部樓層
學(xué)習(xí)了!謝謝分享。。
回復(fù)

使用道具 舉報(bào)

ID:111843 發(fā)表于 2019-12-21 23:41 | 顯示全部樓層
不錯(cuò),感謝分享!
回復(fù)

使用道具 舉報(bào)

ID:524433 發(fā)表于 2020-5-14 09:42 | 顯示全部樓層
下載學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:791040 發(fā)表于 2020-6-27 16:08 | 顯示全部樓層
感謝分享!下載學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表