⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机与a7105组成无线收发程序2.4G多通道
💻 C
📖 第 1 页 / 共 2 页
字号:

            case SEND_KEY:		// 处理发送按键
				 Rf_Send_Buf[0] = RF_DOWN_CMD;
				 Rf_Send_Buf[1] = 0x08;
				 for(i=2; i<RF_DATA_PACKET_SIZE-1; i++)
				 {
					 Rf_Send_Buf[i] = rand();
				 }
				 Rf_Send_Buf[i] = 0xaa;
				 send_data_by_RF(RF_DATA_PACKET_SIZE);	// 发送测试数据
				 lcd_printf_string("Wait Ack", ROW(0x00)|LEN(0x08)|COL(0x00));
				 lcd_printf_string("        ", ROW(0x01)|LEN(0x08)|COL(0x00));

				 TF0 = 0;
				 TH0 = 0x94;
				 TL0 = 0x00;		// (65536 - 37888(0x9400))*12/33.177 = 10ms
				 Timer0_Cnt = 20;   // 定时200ms
				 TR0 = 1;			// enable timer0
				 Wait_Ack = 1;		// 设置等待应答标志
            break;

            default:
            break;
        }
    }
}


/**********************************************************
name:		dispose_rf_data
input:		none
output:		none
describe:	处理接收到的RF数据
notice:
creat date:	2008-7-24
creator:	dengyihong
**********************************************************/
void dispose_rf_data(void)
{
    bit return_ack = 1;
    U8 i = 0;

	if(Rf_Rec_Buf[0] == RF_DOWN_CMD)			// 是否为主机发送的数据
	{
		lcd_printf_string("Send Ack", ROW(0x00)|LEN(0x08)|COL(0x00));
		lcd_printf_string("        ", ROW(0x01)|LEN(0x08)|COL(0x00));
		Rf_Send_Buf[0] = RF_UP_CMD;
		Rf_Send_Buf[1] = 0x08;
		for(i=0; i<RF_DATA_PACKET_SIZE-3; i++)
		{
			Rf_Send_Buf[i+2] = Rf_Rec_Buf[i+2];	// 将接收到的数据返回作为应答
		}
		Rf_Send_Buf[i+2] = 0xaa;				// 最后一个为无效数据
		send_data_by_RF(RF_DATA_PACKET_SIZE);	// 发送应答

		
		Clr_Screen = 1;							// 设置更新屏幕标志位
		TF0 = 0;
		TH0 = 0x94;
		TL0 = 0x00;								// (65536 - 37888(0x9400))*12/33.177 = 10ms
		Timer0_Cnt = 20;						// 准备延时200ms后返回到主屏显示
		TR0 = 1;								// enable timer0
	}
	else if(Rf_Rec_Buf[0] == RF_UP_CMD)			// 是否为子机返回的数据
	{
		if(Wait_Ack)							// 是否在等待应答状态
		{
			for(i=2; i<RF_DATA_PACKET_SIZE-1; i++)
			{
				if(Rf_Rec_Buf[i] != Rf_Send_Buf[i])	// 判断接收到的应答是否有错
				{
					return_ack = 0;
					break;
				}
			}
			if(return_ack)							// 应答正确
			{
				lcd_printf_string("Succeed ", ROW(0x00)|LEN(0x08)|COL(0x00));	// 显示通信成功
				lcd_printf_string("        ", ROW(0x01)|LEN(0x08)|COL(0x00));
				Wait_Ack = 0;

				Clr_Screen = 1;		// 设置更新屏幕标志位
				TF0 = 0;
				TH0 = 0x94;
				TL0 = 0x00;			// (65536 - 37888(0x9400))*12/33.177 = 10ms
				Timer0_Cnt = 20;   	// 准备延时200ms后返回到主屏显示
				TR0 = 1;			// enable timer0			
			}
		}
   	}
}

/**********************************************************
name:		display_rf_channel
input:		none
output:		none
describe:	显示RF当前的channel
notice:
creat date:	2008-8-7
creator:	dengyihong
**********************************************************/
void display_rf_channel(void)
{
	switch(Rf_Channel_Cnt)
	{
		case 0:
			 lcd_printf_string(" 2.400G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break;
				 	 	 	 
		case 1:
			 lcd_printf_string(" 2.404G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 2:
			 lcd_printf_string(" 2.408G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 3:
			 lcd_printf_string(" 2.412G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 4:
			 lcd_printf_string(" 2.416G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 5:
			 lcd_printf_string(" 2.420G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break;
				 	 	 	 
		case 6:
			 lcd_printf_string(" 2.424G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 7:
			 lcd_printf_string(" 2.428G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 8:
			 lcd_printf_string(" 2.432G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 9:
			 lcd_printf_string(" 2.436G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break;
	
		case 10:
			 lcd_printf_string(" 2.440G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break;
				 	 	 	 
		case 11:
			 lcd_printf_string(" 2.444G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 12:
			 lcd_printf_string(" 2.448G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 13:
			 lcd_printf_string(" 2.452G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 14:
			 lcd_printf_string(" 2.456G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 15:
			 lcd_printf_string(" 2.460G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break;
				 	 	 	 
		case 16:
			 lcd_printf_string(" 2.464G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 17:
			 lcd_printf_string(" 2.468G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 18:
			 lcd_printf_string(" 2.472G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 	
		break;
				 	 	 	 
		case 19:
			 lcd_printf_string(" 2.476G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break;
		
		case 20:
			 lcd_printf_string(" 2.480G ", ROW(0x01)|LEN(0x08)|COL(0x00)); 				 	 	 	 
		break; 	 	
 	 
		default:
				 	 	 	 
		break;				
	}	
}

/**********************************************************
name:		display_rf_rate
input:		none
output:		none
describe:	显示RF当前的rate
notice:
creat date:	2008-8-7
creator:	dengyihong
**********************************************************/
void display_rf_rate(void)
{
	switch(Rf_Rate_Cnt)
	{
		case 0:
			 lcd_printf_string(" 25K    ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		case 1:
			 lcd_printf_string(" 50K    ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		case 2:
			 lcd_printf_string(" 62.5K  ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		case 3:
			 lcd_printf_string(" 100K   ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		case 4:
			 lcd_printf_string(" 125K   ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		case 5:
			 lcd_printf_string(" 250K   ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		case 6:
			 lcd_printf_string(" 500K   ", ROW(0x01)|LEN(0x08)|COL(0x00)); 
		break;

		default:

		break;	
	}
}

/**********************************************************
name:		dispose_timer0
input:		none
output:		none
describe:	处理定时器0
notice:	
creat date:	2008-7-24
creator:	dengyihong
**********************************************************/
void dispose_timer0(void)
{
    if(TF0)						
	{
		TF0 = 0;
    	TH0 = 0x94;
		TL0 = 0x00;				// 定时10ms

		if(Wait_Ack)			// 是否在等待应答				
		{
			Timer0_Cnt--;
			if(Timer0_Cnt)
			{

			}
			else				// 在设置的时间内如果没有收到应答就显示错误
			{
				Wait_Ack = 0;
				lcd_printf_string("Failure ", ROW(0x00)|LEN(0x08)|COL(0x00));
				lcd_printf_string("        ", ROW(0x01)|LEN(0x08)|COL(0x00));

				Clr_Screen = 1;		// 设置更新屏幕标志位	
				TF0 = 0;
				TH0 = 0x94;
				TL0 = 0x00;			// (65536 - 37888(0x9400))*12/33.177 = 10ms
				Timer0_Cnt = 20;   	// 延时200ms后返回到主屏显示
				TR0 = 1;			// enable timer0
			}
		}
		else if(Clr_Screen)			
		{
			Timer0_Cnt--;
			if(Timer0_Cnt)
			{

			}
			else					// 延时时间到,返回到主屏显示
			{
				TR0 = 0;			// disable timer0
				Clr_Screen = 0;
				lcd_printf_string("COOLWAVE", ROW(0x00)|LEN(0x08)|COL(0x00));
				lcd_printf_string(" A7105  ", ROW(0x01)|LEN(0x08)|COL(0x00));
			}		
		}
	}
}


/**********************************************************
name:		delay_2us
input:		delay_cnt
output:		none
describe:	delay x*2us
notice:
creat date:	2008-7-24
creator:	dengyihong
**********************************************************/
void delay_2us(U16 delay_cnt)
{
    while(delay_cnt--);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -