官方提供的LT8910驅動程序,需要的朋友拿去參考參考
LT8920 是一款低成本,高集成度的 2.4GHZ 的無線收發芯片。是之前LT8910的升級版!
外圍射頻電路簡單,直接接天線
包括射頻前端和數字基帶的單芯片解決方案:
※ 支持跳頻
※ 支持 SPI 和 I2C 接口
※ 內置 auto_ack 功能
※ 數據率 1Mbps, 250Kbps, 125Kbps, 62.5Kbps
※ 極低功耗(1uA)
※ 支持信號能量檢測
※ 單芯片傳輸距離 200 米
※ TSSOP16 的封裝
單片機源程序如下:
- #include "intrins.h"
- #include "IIC_Drive.h"
- #include "LCD_Drive.h"
- #include "Interrupt.h"
- #include "SPI.h"
- #define SPI_TEST
- #define RX_MODE 0x80
- #define SLEEP_MODE 0x40
- #define AFTER_SLEEP 0x20
- unsigned char *p_rx_sum;
- unsigned char working_state = RX_MODE; // working state
- unsigned char rssivalue = 0;
- unsigned char channel_index[79] = {0x00, 0x01, 0x02,
- 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, //2402, 2412, 2422, 2432
- 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
- 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
- 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
- 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34,
- 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e,
- 0x3f, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
- 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f};
- void main(void)
- {
- unsigned char rx_sum = 0; //接收次數累加器
- unsigned char highReg = 0;
- unsigned char lowReg = 0;
- unsigned char channelvalue = 0;
-
- p_rx_sum = &rx_sum; //指向累加器的指針
- LCD_Initialize();
- LCD_WriteCommand(0x80);
- LCD_WriteDat(0xf6); //''
- LCD_WriteCommand(0x8c);
- LCD_WriteDat(0x43); //'C'
- LCD_WriteDat(0x48); //'H'
- LCD_WriteDat(bcd_table[(channelvalue+2)/10]);
- LCD_WriteDat(bcd_table[(channelvalue+2)%10]);
- LCD_WriteCommand(0xc0);
- LCD_WriteDat(0x72); //'r'
- LCD_WriteDat(0x73); //'s'
- LCD_WriteDat(0x73); //'s'
- LCD_WriteDat(0x69); //'i' means rssi
- LCD_WriteDat(bcd_table[rssivalue/10]);
- LCD_WriteDat(bcd_table[rssivalue%10]);
- Timer0_Init();
- //EX0_Init();
- EA = 1;
- #ifdef SPI_TEST
- RST = 0;
- Delay_ms(2);
- RST = 1;
- Delay_ms(5);
- PKT = 1;
- LT8900_Init();
- SPI_ReadReg(4);
- if (RegH==0x9c && RegL==0xc9)
- {
- LED_SPI = 0;
- }
- while (1)
- {
- switch(working_state)
- {
- case RX_MODE:
- //rssivalue = 0;
- SPI_WriteReg( 7, 0x00, 0x00);
- SPI_WriteReg(52, 0x80, 0x80);
- EX0 = 0;
- SPI_WriteReg( 7, 0x00, 0x80+channelvalue); //TX Enable & channel set to 2480M
- EX0 = 1;
- // while(PKT);
- do
- {
- SPI_ReadReg(48);
- }
- while(RegL & 0x40);
- SPI_WriteReg( 7, 0x00, 0x00); //goto idle mode
- SPI_ReadReg(48);
- if(!(RegH & 0x80))
- {
- LED_RF = ~LED_RF;
- SPI_ReadReg(50);
- if (RegH==0x03 && RegL==0xce)
- rx_sum++; //RX 累加器加一
- if (RegH==0x01)
- {
-
- channelvalue = RegL; //switch to channel RegL
-
- LCD_WriteCommand(0x8e);
- LCD_WriteDat(bcd_table[(channelvalue+2)/10]);
- LCD_WriteDat(bcd_table[(channelvalue+2)%10]);
- }
- SPI_ReadReg(6); //get rssi_value
- RegH &= 0xfc;
- rssivalue = RegH>>2;
- LCD_WriteCommand(0xc4);
- LCD_WriteDat(bcd_table[rssivalue/10]);
- LCD_WriteDat(bcd_table[rssivalue%10]);
- rssivalue = 0;
- }
- break;
-
- case SLEEP_MODE:
- SPI_WriteReg(35, 0x43, 0x00);
- SPI_SS = 1;
- LCD_WriteCommand(0xc0);
- LCD_WriteDat(0x7a);
- working_state = AFTER_SLEEP;
- break;
- case AFTER_SLEEP:
- _nop_();
- break;
- default : break;
-
- }
- }
- #else
- MOSI = 0; // A4 =0
- RST = 0;
- Delay_ms(2);
- RST = 1;
- Delay_ms(5);
- PKT = 1;
- RF_Init();
- IIC_ReadReg( 4, &highReg, &lowReg);
- if (highReg==0x9c && lowReg==0xc9)
- {
- LED_IIC = 0;
- }
- while (1)
- {
- IIC_WriteReg(52, 0x80, 0x80);
- IIC_WriteReg( 7, 0x00, 0xb0); //TX Enable & channel set to 2450M
- /*while(PKT);*/
- do
- {
- SPI_ReadReg(48);
- }
- while(RegL & 0x40);
- IIC_WriteReg( 7, 0x00, 0x00); //goto idle mode
- IIC_ReadReg(48, &highReg, &lowReg);
- if(!(highReg & 0x80))
- {
- rx_sum++; //RX 累加器加一
- LED_RF = ~LED_RF;
- }
- }
-
- #endif
-
- /*
- LCD_WriteCommand(0x80);
- LCD_WriteDat(0x32); //'2'
- LCD_WriteDat(0x34); //'4'
- LCD_WriteDat(0x35); //'5'
- LCD_WriteDat(0x30); //'0'
- LCD_WriteDat(0xa5); //'.'
- */
-
-
- /*
- if(rx_lcd_flag == 50)
- {
- LCD_WriteCommand(0x04); // turn left
- LCD_WriteCommand(0x8f);
- LCD_WriteDat(0x7f); //'<'
- }
- if(rx_lcd_flag == 100)
- {
- LCD_WriteDat(0x7f);
- }
- if(rx_lcd_flag == 150)
- {
- LCD_WriteDat(0x7f);
- }
- if(rx_lcd_flag == 200)
- {
- LCD_WriteDat(0x7f);
- }
- if(rx_lcd_flag >= 250)
- {
- rx_lcd_flag = 0;
- LCD_WriteCommand(0x06); //寫入新數據后 光標右移一位
- LCD_WriteDat(0xa0);
- LCD_WriteDat(0xa0);
- LCD_WriteDat(0xa0);
- LCD_WriteDat(0xa0);
- //LCD_WriteCommand(0x06);
- }
- */
-
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
LT8910驅動程序.rar
(142.91 KB, 下載次數: 143)
2018-5-16 15:50 上傳
點擊文件名下載附件
LT8910驅動程序
|