欢迎光临~啄木鸟电子科技

软件设计

Wi433 无线 遥控 接收 核心 函数


/******************************** **************************************
* : wi_remote_decode(void)
* : 无线解码
* :
* :

300-400   	us(窄) 		-> 4T
900-1200 	us(宽) 		-> 4T
8-12		ms(同步码) 	-> 4T
***********************************************************************/
void wi_remote_decode(void)
{
	u8 width; //
	u8 i, j;  // 3  8

	if (decode_data == 0) //    //10 - 20ms
	{
		width = 0;
		while (decode_data == 0) // 拉低 开始计时
		{
			delay_100us();
			width++;
		}

		// 抬高后 计算
		// 同步码检测
		if (width < 90) // 9ms = 90 00us
		{
			return; //
		}
		// if (width > 200) //20 000us
		if (width > 130) // 13 000us
		{
			return; //
		}

		// 数据位读取
		for (i = 0; i < 3; i++) //  3  8
		{
			for (j = 0; j < 8; j++)
			{
				// 计算 高电平 时间
				width = 0;
				while (decode_data == 1) // 拉低
				{
					delay_100us();
					width++;
				}
				if (width > 20) //  > 2000 us; (   450us    1200us;
				{
					return; // //1.2  2MS
				}

				// 计算 低电平 时间
				width = 0;
				while (decode_data == 0) //
				{
					delay_100us();
					width++;
				}
				if (width > 20) //  > 20 00 us; (   450us    1200us;
				{
					return; //  // 1.2  2MS
				}

				receive_data[i] <<= 1;

				// 这个 width 是低电平 时长,根据低电平时长,判断是 1, 还是 0,
				if (width < 8) //     800 us < 800us  0
				{
					receive_data[i]++; // 200us800us, 置1
				}
				else
				{
					receive_data[i] &= 0xfe; // & 1111 1110;  置 0
				}
			}
		}
		
		// led_flash(1);
		LED = ~LED;

		// // 标志位 表示解码完成,标志位置 1
		flag_step++;
		if (flag_step >= 3)
		{
			flag_step = 1;
		}

	}
}

// 433 遥控
void wi_433(void)
{
	// 无线 解码
	wi_remote_decode();

	wi_2(); // 2次对码 比对成功 才有 输出,防止信号感染

	if (key_2 == key_1)
	{
		// 数据有效,可以输出 标志
		
		valid_date = 1;

		// 防止 标志 位 锁死
		key_1 = 0x93;
		key_2 = 0x45;
		
	}
	else
	{
		// 如配对不成功,则 数据 清 0
		address_10 = 0;
		address_11 = 0; 

		address_20 = 0;
		address_21 = 0; 

		valid_date = 0;
	}
}

// ============================================================
// 接收 口
// ============================================================
void init_wi(void)
{
	PC_DDR_DDR7 = 0;
	PC_CR1_C17 = 1;
	PC_CR2_C27 = 0;
}


// ============================================================
// 发射口
// ============================================================
void init_pd2_wisend(void)
{
    // 配置PD2为推挽输出, 高速, 默认高电平
    PD_DDR |= (1 << 2); // DDR: 设置为输出 (1=输出)
    PD_CR1 |= (1 << 2); // CR1: 推挽输出 (1=推挽)
    PD_CR2 |= (1 << 2); // CR2: 高速输出 (1=10MHz)

    TX_HIGH(); // 空闲状态拉高
}

/**********************************************************************
* 函数: Wi_Key_Stateup(void)
* 功能: 上电对码,将无线 地址码 存在 指定 地址里;
* 输入: 无
* 输出: 无

 // 2次对码 比对成功 才有 输出,防止信号感染
***********************************************************************/
void wi_2(void)
{
	switch (flag_step)
	{
		case 1:
			// 第 1 次 解码
			// 数据 转存
			address_10 = receive_data[0];
			address_11 = receive_data[1];
			key_1 = receive_data[2];
			break;

		case 2:
			// 第 2 次 解码
			// 数据 转存
			address_20 = receive_data[0];
			address_21 = receive_data[1];
			key_2 = receive_data[2];
			// 如 两次对码 成功
			break;

		default:
			valid_date = 0;
			break;
	}
}

联系我们

联系人:客服在线

手机:全R:13903011251

电话:李R:13530006400

邮箱:729986191@qq.com

地址: GUANGDONG PROVINCE