帮我写个单片机(89C52RC)红外解码程序,只要把接受到得红外信号放在一个数组就可以。

不用数码管或显示屏什么的,就把数据放在一个数组里!!!... 不用数码管或显示屏什么的,就把数据放在一个数组里!!! 展开
 我来答
荻菊天山岁月留
2013-05-10 · TA获得超过537个赞
知道小有建树答主
回答量:738
采纳率:72%
帮助的人:136万
展开全部
#include<reg52.h>
unsigned char distemp;
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
static unsigned char i;
sbit zhongduan=P3^3;
unsigned char IRcord[4];
unsigned char irdata[33];

void main(void)
{
IT1 = 1; // 配置为下降沿中断1 / INT0(p3 3)
EX1 = 1; // 使EX0中断
EA = 1;
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=(65536-65536)/256;//重载值
TL0=(65536-65536)%256;//初始值
ET0=1;//开中断
TR0=1;
zhongduan=1;
while(1) //主循环
{
if(irok)
{
unsigned char i, j, k=1; //红外码值处理函数,K=1,33位中第一位为头码,所以为1是跳过读取头码
unsigned char cord,value;
for(i=0;i<4;i++) //处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
value=value>>1;
if(cord>7) value=value|0x80; //大于某值为1
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
irok=0;
}

}
}
void ex0_isr (void) interrupt 2 //外部中断0服务函数
{
if(zhongduan==0)
{
if(irtime<55&&irtime>=35)//引导码 TC9012的头码
{i=0;}
irdata[i]=irtime;
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{
irtime=0;
zhongduan=1; //P33口保持高电平
}
}
void tim0_isr (void) interrupt 1 //定时器0中断服务函数
{
irtime++;
}
内部人员6
2012-09-09 · TA获得超过389个赞
知道答主
回答量:688
采纳率:50%
帮助的人:222万
展开全部
才100分?
追问
你看错了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式