/****************************************************************
*创绿开发工作室,欢迎光临http://chuanglu2008.taobao.com,
*承接电子产品开发,软件开发,单片机开发,程序移植,上位机开发
*欢迎光临http://chuanglu2008.taobao.com
* 版本 :
* 作者 :liaotingtai QQ:1390954239
*修改时间 :2010-12-20
*************************************************************/
#include "main.h"
#define Rxd_isHi() IR
#define Rx_En() EX1=1
#define Rx_Di() EX1=0
static unsigned char st_mach;
bit rfok=0;
unsigned char IR_data[4];
void Nec_Init(void)
{
IR=1;
st_mach=0xff;
}
unsigned char Nec_Read(void)
{
if(st_mach!=0xff) return 0;
st_mach=0;
Rx_En();//开启外部接收中断
rfok=0;
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Nec_Rx(void)
{
unsigned char j,k,N=0;
EX1 = 0;
delay_ms(2); //延时时间,
if (IR==1)
{
EX1 =1;
return;
}
while (!IR) //等IR变为高电平,跳过9ms的前导低电平信号。4.5ms
{
delay_us(10); //延时等待
}
while (IR) //等IR 变为低电平,跳过4.5ms的前导高电平信号。
{
delay_us(10); //延时等待
}
for (j=0;j<4;j++) //采集红外遥控器数据
{
for (k=0;k<8;k++) //分次采集8位数据
{
while (!IR) //等 IR 变为高电平
{
delay_us(10); //延时等待
}
while (IR) //计算IR高电平时长
{
delay_us(10); //延时
N++; //计数
if (N>=30)
{
EX1=1;
return;
}
}
IR_data[j]=IR_data[j] >> 1; //进行数据位移操作并自动补零
if (N>=8) // 判断数据长度高电平1
{
IR_data[j] = IR_data[j] | 0x80; //数据最高位补1
}
N=0; //清零
}
}
if (IR_data[2]==~IR_data[3])
{
LED=!LED;
st_mach=0xff;
Rx_Di();
rfok=1;
}
else//错误码
{
Rx_Di();
st_mach=0xff;
rfok=0;
}
}
/****************************************************************
*创绿开发工作室,欢迎光临http://chuanglu2008.taobao.com,
*承接电子产品开发,软件开发,单片机开发,程序移植,上位机开发
*欢迎光临http://chuanglu2008.taobao.com
* 版本 :
* 作者 :liaotingtai QQ:1390954239
*修改时间 :2010-12-20
*************************************************************/
51单片机VS1838红外遥控解码程序NEC
需积分: 50 174 浏览量
2018-07-13
23:35:38
上传
评论
收藏 4KB RAR 举报
quleaf
- 粉丝: 4
- 资源: 6