教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 行业资料 >

红外遥控器参考代码

来源:网络收集 时间:2026-09-15
导读: //////////////////////////////////////////////// //作者:Wangyanhui //版本:V1.0 //////////////////////////////////////////////// #includereg52.h /******************************************************************/ /* 变量声明 */ /**********


////////////////////////////////////////////////
//作者:Wangyanhui
//版本:V1.0
////////////////////////////////////////////////

#include<reg52.h>

/******************************************************************/
/* 变量声明 */
/******************************************************************/
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];


/******************************************************************/
/* 定时器0中断服务函数 */
/******************************************************************/
void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
{
irtime++; //用于计数2个下降沿之间的时间
}


/******************************************************************/
/* 外部中断0函数 */
/******************************************************************/
void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i; //接收红外信号处理
static bit startflag; //是否开始处理标志位

if(startflag)
{
if(irtime<50&&irtime>=47)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{irtime=0;startflag=1;}
IE0 = 0;
}


/******************************************************************/
/* 红外键值处理 */
/******************************************************************/
void Ir_work(void)//红外键值散转程序
{
if(irpro_ok)
{
switch(IRcord[2])//判断第三个数码值
{
case 0x1D:P1=0xFE;break;//1 显示相应的按键值
case 0x1F:P1=0xFC;break;//2
case 0x0D:P1=0xF8;break;//3
case 0x1B:P1=0xF0;break;//4
case 0x11:P1=0xE0;break;//5
case 0x15:P1=0xC0;break;//6
case 0x12:P1=0x80;break;//7
case 0x59:P1=0x00;break;//8
default: P1=0xFF;
}
}
irpro_ok=0;//处理完成标志
}


/******************************************************************/
/* 红外解码函数处理 */
/******************************************************************/
void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
if(irdata[0]>=47&&irdata[0]
<=50)
{
k=1;
for(i=0;i<4;i++) //处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
if(cord>7)//大于某值为1,这个和晶振有绝对关系,这

里使用12M计算,此值可以有一定误差
{
value=value|0x80;
}
else
{
value=value;
}
if(j<8)
{
value=value>>1;
}
k++;
}
IRcord[i]=value;
value=0;
} irpro_ok=1;//处理完毕标志位置1
}
}


//主程序

void main(void)
{
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1; //使能外部中断
EA = 1; //开总中断

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00; //重载值
TL0=0x00; //初始化值
ET0=1; //开中断
TR0=1;

while(1)//主循环
{
if(irok)
//如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}

if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
}
}

…… 此处隐藏:531字,全部文档内容请下载后查看。喜欢就下载吧 ……
红外遥控器参考代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/2271999.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)