QN8025FM接收机

目录

PCB

关键代码

.c

IIC


这次介绍的是基于QN8025的FM接收机

下面是数据手册的基本介绍:

PCB

电路图还是很简单的

这个板子,用在了2018年的区赛,也可以用在2019年的国赛上,感觉挺好用,不过对于新手来说,手工焊接这个芯片还是有一定难度的。

经过测试,是能够正常使用的。

IIC使用说明

I 2 C 总线的一些特征

• 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL

• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地 址 主机可以作为主机发送器或主机接收器

• 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁 防止数据被破坏

• 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速 模式下可达 3.4Mbit/s

• 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整

• 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制

I 2 C 总线支持任何 IC 生产过程 NMOS CMOS 双极性 两线――串行数据 SDA 和串行时钟

SCL 线在连接到总线的器件间传递信息 每个器件都有一个唯一的地址识别 无论是微控制器 LCD

驱动器 存储器或键盘接口 而且都可以作为一个发送器或接收器 由器件的功能决定 很明显 LCD

驱动器只是一个接收器 而存储器则既可以接收又可以发送数据 除了发送器和接收器外 器件在执行数 据传输时也可以被看作是主机或从机 见表 1 主机是初始化总线的数据传输并产生允许传输的时钟信号 的器件 此时 任何被寻址的器件都被认为是从机。

I 2 C 总线是一个多主机的总线 这就是说可以连接多于一个能控制总线的器件到总线 由于主机通常是 微控制器 让我们考虑以下数据在两个连接到 I 2 C 总线的微控制器之间传输的情况 见图 2

这突出了 I 2 C 总线的主机 从机和接收器 发送器的关系 应当注意的是 这些关系不是持久的 只 由当时数据传输的方向决定 传输数据的过程如下 1 假设微控制器 A 要发送信息到微控制器 B

• 微控制器 A 主机 寻址微控制器 B 从机

• 微控制器 A 主机 发送器 发送数据到微控制器 B 从机 接收器

• 微控制器 A 终止传输 2 如果微控制器 A 想从微控制器 B 接收信息

• 微控制器 A 主机 寻址微控制器 B 从机

• 微控制器 A 主机 接收器 从微控制器 B 从机 发送器 接收数据

• 微控制器 A 终止传输

总体特征

SDA 和 SCL 都是双向线路 都通过一个电流源或上拉电阻连接到正的电源电压 见图 3 当总线空 闲时 这两条线路都是高电平 连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功 能 I 2 C 总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速模式下 可达 3.4Mbit/s 连接到总线的接口数量只由总线电容是 400pF 的限制决定。

快速模式

已经在标准模式 I 2 C 总线规范提出的协议 格式 逻辑电平和 SDA 以及 SCL 线的最大电容负载在快 速模式 I 2 C 总线规范都没有修改 带 I 2 C 总线接口的新器件必须至少符合快速模式或 Hs 模式规范的最小要 求 

快速模式器件可以在 400kbit/s 下接收和发送 最小要求是 它们可以和 400kbit/s 传输同步 可以延 长 SCL 信号的低电平周期来减慢传输 快速模式器件都向下兼容 可以和标准模式器件在 0~100kbit/s 的

I 2 C 总线系统通讯 但是 由于标准模式器件不向上兼容 所以不能在快速模式 I 2 C 总线系统中工作 因为 它们不能跟上这么快的传输速率因而会产生不可预料的状态

快速模式 I 2 C 总线规范与标准模式相比有以下额外的特征

• 最大位速率增加到 400kbit/s

• 调整了串行数据 SDA 和串行时钟 SCL 信号的时序 没有必要与其他总线系统例如 CBUS

兼容 它们不能在增加的位速率下工作

• 快速模式器件的输入有抑制毛刺的功能 SDA 和 SCL 输入有 Schmitt 触发器

• 快速模式器件的输出缓冲器对 SDA 和 SCL 信号的下降沿有斜率控制功能

• 如果快速模式器件的电源电压被关断 SDA 和 SCL 的 I/O 管脚必须悬空 不能阻塞总线

• 连接到总线的外部上拉器件必须调整以适应快速模式 I 2 C 总线更短的最大允许上升时间 对于负 载最大是 200pF 的总线 每条总线的上拉器件可以是一个电阻 对于负载在 200pF~400pF 之间 的总线 上拉器件可以是一个电流源 最大值 3mA 。

Hs 模式

高速模式 Hs 模式 器件对 I 2 C 总线的传输速度有具大的突破 Hs 模式器件可以在高达 3.4Mbit/s 的 位速率下传输信息 而且保持完全向下兼容快速模式或标准模式 F/S 模式 器件 也就是说它们可以在 一个速度混合的总线系统中双向通讯 Hs 模式传输除了不执行仲裁和时钟同步外 与 F/S 模式系统有相同 的串行总线协议和数据格式 虽然 Hs 模式器件是首选的器件 它们可以在大量的应用中使用 但是新器 件有没有快速或 Hs 模式 I 2 C 总线接口由应用决定。

关键代码

.c


#include "reg52.h"
#include <stdio.h>
#include "I2C.h"

#define uchar unsigned char 
#define uint unsigned int

sbit RSSI_ZS  = P3^7;

extern uchar Init_Riss;
extern uchar Init_Volue;
extern uchar defu_mute;
//¶¨Òå²Ù×÷QN_8025Êý¾ÝÇø
unsigned char idata QN8025_Send[5];
unsigned char idata QN8025_Read[5];
/*********************************************************
º¯Êý¹¦ÄÜ£º¶¨ÒåÈí¼þÑÓʱ
º¯ÊýÃû£ºQN8025_delay
Èë¿Ú²ÎÊý£ºcount
³ö¿Ú²ÎÊý£ºÎÞ
**********************************************************/
void QN8025_delay(unsigned int count)
{
	unsigned int i,j;
	for(i=count; i>0; i--)
		for(j=111; j>0; j--);
}
/*********************************************************
º¯Êý¹¦ÄÜ£º³õʼ»¯QN8025Ä£¿é
º¯ÊýÃû£ºQN8025_Init
Èë¿Ú²ÎÊý£ºÎÞ
³ö¿Ú²ÎÊý£ºÎÞ
**********************************************************/
void QN8025_Init(void)
{
    QN8025_Send[0x00] = 0x00;
    QN8025_Send[0x01] = 0x81;	
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x18;
    QN8025_Send[0x01] = 0x10;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x2F;
    QN8025_Send[0x01] = 0x90;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x40;
    QN8025_Send[0x01] = 0x01;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x46;		
    QN8025_Send[0x01] = 0x05;
    QN8025_Send[0x02] = 0xD0;
    QN8025_Send[0x03] = 0xA8;
    I2C_Data_Write(0x20, &QN8025_Send[0], 4);
    QN8025_Send[0x00] = 0x4A;
    QN8025_Send[0x01] = 0x18;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x14;
	QN8025_Send[0x01] = 0xC6;
    QN8025_Send[0x02] = 0x00;
    QN8025_Send[0x03] = 0x02;			
    QN8025_Send[0x04] = 0x20;
    I2C_Data_Write(0x20, &QN8025_Send[0], 5);
    QN8025_Send[0x00] = 0x00;			
    QN8025_Send[0x01] = 0x51;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
	  QN8025_delay(1000);
    QN8025_Send[0x00] = 0x00;		
    QN8025_Send[0x01] = 0x01;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x00;
    QN8025_Send[0x01] = 0x11;	 
    QN8025_Send[0x02] = 0x49;	 
    I2C_Data_Write(0x20, &QN8025_Send[0], 3);
		QN8025_delay(279);	
}

/*********************************************************
º¯Êý¹¦ÄÜ£º¶ÁÈ¡RssiÐźţ¬ÓÃÀ´¿ØÖƾ²Òô,·ÀÖ¹ÔëÒô,Ò²¿ÉʵÏÖµçÔ´¿ØÖÆ
º¯ÊýÃû£ºQN8025_Rssi_Read
Èë¿Ú²ÎÊý£ºÎÞ
³ö¿Ú²ÎÊý£ºQN8025_Read[0]
**********************************************************/
unsigned char QN8025_Rssi_Read()
{
	I2C_selset_Read(0x20, 0x03, &QN8025_Read[0], 1);	//£¬¶ÁÈ¡RssiÐźţ¬ÓÃÀ´¿ØÖƾ²Òô,·ÀÖ¹ÔëÒô
	//return QN8025_Read[0];
	if((QN8025_Read[0]-46) >= Init_Riss)							//ÀíÏëµÄÐźÅÇ¿¶È£¬¿ªÆôÉùÒô£¬£¨Æô¶¯µçÔ´£©
	{ 
	  if(defu_mute)//¾²ÒôʱÄÜ
	   {
		QN8025_Send[0x00] = 0x14;
		QN8025_Send[0x01] = 0x40|Init_Volue;
		I2C_Data_Write(0x20, &QN8025_Send[0], 2);
		RSSI_ZS=0;defu_mute=0;
	   }
	}
	else//--------------------------------------------//ÐźÅÇ¿¶È²»¹»£¬Ê¹Äܾ²Òô£¬¹Ø±ÕµçÔ´£¡
	{
	  if(!defu_mute) //ûÓо²Òô
	  {
		QN8025_Send[0x00] = 0x14;
		QN8025_Send[0x01] = 0xC6;
		I2C_Data_Write(0x20, &QN8025_Send[0], 2);
		RSSI_ZS=1;defu_mute=1;
	  }
	} 
}
/*********************************************************
º¯Êý¹¦ÄÜ£ºÏòQN8025Ä£¿éдÈëÒ»¸öƵÂÊ£¬ÊÖ¶¯ÉèÖÃƵÂÊ
º¯ÊýÃû£ºQN8025_Write_Freq
Èë¿Ú²ÎÊý£ºFrequnt ÐèҪдÈëµÄƵÂÊ
³ö¿Ú²ÎÊý£ºÎÞ
**********************************************************/
void QN8025_Write_Freq(unsigned int Frequnt)	
{

    QN8025_Send[0x00] = 0x07;
    QN8025_Send[0x01] = (Frequnt - 6175)/5;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);

    QN8025_Send[0x00] = 0x0A;
    QN8025_Send[0x01] = ((Frequnt - 6175)/5 >> 8) | 0x60;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
}
/*********************************************************
º¯Êý¹¦ÄÜ£ºÈí¼þÒôÁ¿µ÷½Ú
º¯ÊýÃû£ºQN8025_Write_Freq
Èë¿Ú²ÎÊý£ºucLevel ÐèҪдÈëµÄÉùÒô´óС
³ö¿Ú²ÎÊý£ºÎÞ
**********************************************************/
void QN8025_Vol_Set(unsigned char ucLevel)
{
	QN8025_Send[0x00]=0x14;
	QN8025_Send[0x01]=0x40|(ucLevel);
	I2C_Data_Write(0x20, &QN8025_Send[0], 2);	
}
/*********************************************************
º¯Êý¹¦ÄÜ£ºÊÖ¶¯¾²Òô¿ØÖÆ£¬Èç¹ûMute_flag=1¾²Òô£¬·ñÔò²»¾²Òô,
º¯ÊýÃû£ºQN8025_Mute_ctr
Èë¿Ú²ÎÊý£ºMute_flag 
³ö¿Ú²ÎÊý£ºÎÞ
**********************************************************/
void QN8025_Mute_ctr(bit Mute_flag)					
{																				
	if(Mute_flag)
	{
		QN8025_Send[0x00] = 0x14;
		QN8025_Send[0x01] = 0xC6;
		I2C_Data_Write(0x20, &QN8025_Send[0], 2);
	}
	else
	{
		QN8025_Send[0x00] = 0x14;
		QN8025_Send[0x01] = 0x40|Init_Volue;
		I2C_Data_Write(0x20, &QN8025_Send[0], 2);
	}
}
/*********************************************************
º¯Êý¹¦ÄÜ£ºQN8025Ä£¿éʵÏÖ×Ô¶¯ËÑË÷
º¯ÊýÃû£ºunsigned int QN8025_Auto_Seek(unsigned int Str_Freq)
Èë¿Ú²ÎÊý£ºStr_Freq
³ö¿Ú²ÎÊý£ºËÑË÷µ½µÄƵÂÊ
**********************************************************/
unsigned int QN8025_Auto_Seek(unsigned int Str_Freq)
{
		unsigned int scan_freq,Read_Freq,Send_freq;
		unsigned char Freq_H;
		scan_freq=Str_Freq;
 		rescan:
	  QN8025_Send[0x00] = 0x08;	
	  QN8025_Send[0x01] = (scan_freq - 6175)/5;
    QN8025_Send[0x02] = 0x9D;	
    QN8025_Send[0x03] = ((scan_freq - 6175)/5 >> 6) | 0x70;
    I2C_Data_Write(0x20, &QN8025_Send[0], 4);
   
    QN8025_Send[0x00] = 0x01;		
    QN8025_Send[0x01] = 0x7D; //75	
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x00;		
    QN8025_Send[0x01] = 0x10;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x00;		
    QN8025_Send[0x01] = 0x12;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    
		QN8025_delay(500);
		
		 I2C_selset_Read(0x20, 0x0a, &QN8025_Read[0], 1);
		 Freq_H=(QN8025_Read[0]&0x03);
		 I2C_selset_Read(0x20, 0x07, &QN8025_Read[0], 1);
		 Read_Freq=Freq_H*256+QN8025_Read[0];
		 
		 Send_freq=(Read_Freq)*5+6175;
		 
//	 if((QN8025_Read[0]-46) >= Init_Riss)	
//			 	 
//		 if((QN8025_Read[0]-46) >= 5)	
//			   
//		     {
//				 
//				 return (Send_freq);
//				 }
//				 
				 
				 
		 if(Send_freq==10800)
		   {
		   	scan_freq=8800;
		   	goto rescan;
		   }
//		   else if((QN8025_Read[0]-46) >= 5)	
//		   {
//		   	return (Send_freq);
//		   }
			 else {
			  return (Send_freq);
			 }
}
//***********************************************************************************
//------------------------------QN8025³ÌÐòÍê---------------------------------------
//***********************************************************************************


/*********************************************************
º¯Êý¹¦ÄÜ£ºQN8025Ä£¿éʵÏÖ×Ô¶¯ËÑË÷,·´ÏòÊÕËõ
º¯ÊýÃû£ºunsigned int QN8025_Auto_Seek(unsigned int Str_Freq)
Èë¿Ú²ÎÊý£ºStr_Freq
³ö¿Ú²ÎÊý£ºËÑË÷µ½µÄƵÂÊ
**********************************************************/
unsigned int QN8025_Auto_Seek_ll(unsigned int Str_Freq)
{
		unsigned int scan_freq,Read_Freq,Send_freq;
		unsigned char Freq_H;
		scan_freq=Str_Freq;
 	rescan_ll:
	QN8025_Send[0x00] = 0x08;	
	QN8025_Send[0x01] = (scan_freq - 6175)/5; 
    QN8025_Send[0x02] = 0x0D;	//9d
    QN8025_Send[0x03] = ((scan_freq - 6175)/5 >> 6) | 0x60;	
    I2C_Data_Write(0x20, &QN8025_Send[0], 4);
   
    QN8025_Send[0x00] = 0x01;		
    QN8025_Send[0x01] = 0x59; 
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x00;		
    QN8025_Send[0x01] = 0x10;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    QN8025_Send[0x00] = 0x00;		
    QN8025_Send[0x01] = 0x12;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
    
		QN8025_delay(500);
		
		 I2C_selset_Read(0x20, 0x0a, &QN8025_Read[0], 1);
		 Freq_H=(QN8025_Read[0]&0x03);
		 I2C_selset_Read(0x20, 0x07, &QN8025_Read[0], 1);
		 Read_Freq=Freq_H*256+QN8025_Read[0];
		 
		 Send_freq=(Read_Freq)*5+6175;
		 if(Send_freq<=8800)
		   {
		   	scan_freq=10850;
		   	goto rescan_ll;
		   }
		   else
		   {
		   	return (Send_freq);
		   }
}


void main()
{
unsigned int b,c;
  QN8025_Init();
	

	QN8025_Mute_ctr(0);
	QN8025_Vol_Set(0x40);
	
	   QN8025_Send[0x00] = 0x0A;		
    QN8025_Send[0x01] = 0x40;
    I2C_Data_Write(0x20, &QN8025_Send[0], 2);
	
	b=8700;
	c=1;
	while(c)
	{
		b=b+100;
	b=QN8025_Auto_Seek(b);
  
	QN8025_delay(10);

		
		if((QN8025_Read[0]-46) >= 0)	
       {
			 c=0;
			 }
	

	}
	
	while(1)
	{
	QN8025_Write_Freq(b);
	}


}
//***********************************************************************************
//------------------------------QN8025³ÌÐòÍê---------------------------------------
//***********************************************************************************

IIC


#include <reg52.h>
#include <intrins.h>
#include "I2C.h"
/*********************************************************************/
/* ----------------------------51µ¥Æ¬»úÄ£ÄâIIC³ÌÐò-------------------*/
/*********************************************************************/
/*********************************************************************/
//Òý½Å¶¨Òå
sbit I2C_SCL=P2^2; 
sbit I2C_SDA=P2^1; 

/*********************************************************************/
//¶¨Òå¿ÕÖ¸Áî
#define NOP()  _nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_() 

/*********************************************************************/
//Æô¶¯I2C×ÜÏß
void I2C_Start(void)
{
	I2C_SDA=1;  
	NOP();
	I2C_SCL=1;
	NOP();NOP();NOP();NOP();NOP(); 
	I2C_SDA=0;  
	NOP();NOP();NOP();NOP();NOP();      
	I2C_SCL=0; 
}

/*********************************************************************/
//Í£Ö¹I2C×ÜÏß
void I2C_Stop(void)
{
	I2C_SCL=0;
	I2C_SDA=0;
	NOP(); 
	I2C_SCL=1; 
	NOP();NOP();NOP();NOP();NOP();
	I2C_SDA=1;
	NOP();NOP();NOP();NOP();NOP();
	NOP();NOP();NOP();NOP();NOP();
	I2C_SCL=0;
	I2C_SDA=0;
}

/*********************************************************************/
//µ¥Æ¬»ú½ÓÊÕÓ¦´ðλ(·µ»Ø0±íʾӦ´ð)
bit I2C_ReadAck(void)
{
	unsigned char ccsj = 220;
	
	I2C_SCL=0;
	I2C_SDA=1;
	NOP();
	I2C_SCL=1;
	while(I2C_SDA)
	{
		ccsj--;
		if (ccsj == 0)
		{
			I2C_Stop();
			return 0;
		}
	}
	I2C_SCL=0;
	return 1;  
}

/*********************************************************************/
//µ¥Æ¬»ú·¢ËÍÓ¦´ðÐźÅ
void I2C_SendAck(void)
{
	I2C_SCL=0;
	I2C_SDA=0;
	NOP();NOP();NOP();NOP();NOP();
	I2C_SCL=1;
	NOP();NOP();NOP();NOP();NOP();
	I2C_SCL=0;
}

/*********************************************************************/
//µ¥Æ¬»ú·¢ËÍ·ÇÓ¦´ðÐźÅ
void I2C_SendNoack(void)
{
	I2C_SCL=0;
	I2C_SDA=1;
	NOP();NOP();
	I2C_SCL=1;
	NOP();NOP();
	I2C_SCL=0;
}

/*********************************************************************/
//µ¥Æ¬»ú·¢ËÍÒ»¸ö×Ö½Ú
void I2C_Send_Byte(unsigned char sendbyte)
{
	unsigned char count = 8;
	while( count-- )
	{
		I2C_SCL = 0;
		NOP(); 
		if ( sendbyte &0x80 ) 
			I2C_SDA =1;
		else 
			I2C_SDA =0;
		NOP();
		I2C_SCL = 1;
		NOP();
		sendbyte <<= 1;
	}
	I2C_ReadAck();
}
/*********************************************************************/
//µ¥Æ¬»ú½ÓÊÕÒ»¸ö×Ö½Ú
unsigned char I2C_Receive_Byte(void)
{
	unsigned char count = 8, data_buffer;
	I2C_SDA = 1;
	while ( count--)
	{
		I2C_SCL =0;
		NOP();NOP();
		I2C_SCL =1;
		NOP();NOP();
		data_buffer <<= 1;
		if ( I2C_SDA ) 
		data_buffer++; 
	}
	return (data_buffer);
}
/*********************************************************************/
//µ¥Æ¬»ú·¢ËÍÊý¾Ý
//ÏòÖ¸¶¨µÄÓ²¼þµØַдcount¸öÊý¾Ý
void I2C_Data_Write(unsigned char Mac_ID, unsigned char *ptr,unsigned char num)
{
	I2C_Start();
	I2C_Send_Byte( Mac_ID );
	while(num--)
	{
		I2C_Send_Byte( *(unsigned char*)ptr );
		((unsigned char*)ptr)++;
	}
	I2C_Stop();
}
/*********************************************************************/
//µ¥Æ¬»ú¶ÁÈ¡Êý¾Ý
//ÏòÖ¸¶¨µÄÓ²¼þµØÖ·¶ÁÈ¡count¸öÊý¾Ý
void I2C_Data_Read(unsigned char Mac_ID, unsigned char *ptr,unsigned char num)
{
	I2C_Start();
	I2C_Send_Byte( Mac_ID | 0x01);
	while(num--)
	{
		*ptr = I2C_Receive_Byte();
		if(num != 0)
			I2C_SendAck();
		ptr++;
	}
	
	I2C_SendNoack();
	I2C_Stop();
}
/*********************************************************************/
//µ¥Æ¬»ú¶ÁÈ¡Êý¾Ý
//ÏòÖ¸¶¨µÄÓ²¼þµØÖ·£¬Ö¸¶¨µÄµØÖ·£¬¶ÁÈ¡count¸öÊý¾Ý
void I2C_selset_Read(unsigned char Mac_ID, unsigned char Addr, unsigned char *ptr, unsigned char num)
{
	I2C_Start();
	I2C_Send_Byte( Mac_ID);
	I2C_Send_Byte( Addr );
	I2C_Start();
	I2C_Send_Byte( Mac_ID | 0x01 );
	while(num--)
	{
		*ptr = I2C_Receive_Byte();
		if(num != 0)
		I2C_SendAck();
		ptr++;
	}
	I2C_SendNoack();
	I2C_Stop();
}
/*******************************************over***************************************************************/
/*******************************************over***************************************************************/
/*******************************************over***************************************************************/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY_Share

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值