/******************************** **************************************
* : 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