2.根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。
下面是我写的程序,程序分成两个部分,分开写的,一个部分是主程序数码管显示main(),一个部分是遥控器解码程序IRInit(),
第一部分;
/*注意这里在数码管上显示的是十进制数字,把其转换为十六进制就是遥控器的各个按键的编码*/
#include<reg52.h>
sbit key=P1^3;
unsigned int number=0;
unsigned char j,n,i=0;
unsigned int ledout[10];
unsigned char code led_num[]={0xfc,0x60,0xda,0xf2,0x66,
0xb6,0xbe,0xe0,0xfe,0xf6 }; //共阳数码管的0-9编码
unsigned char code led_duan[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdF,0xbF,0x7F}; //段选信号编码,我这里是直接用一个i/o口接的八个数码管的共阴极
extern void IRInit();//外部函数申明
void main()
{
while(1)
{ ledout[7]=led_num[number%10];
ledout[6]=led_num[number/10%10];
ledout[5]=led_num[number/100%10];
ledout[4]=led_num[number/1000%10];
ledout[3]=led_num[number%10];
ledout[2]=led_num[number/10%10];
ledout[1]=led_num[number/100%10];
ledout[0]=led_num[number/1000%10];
for(j=0;j<9;j++) //数码管动态显示,number的值;
{
P0=led_duan[j];
P2=ledout[j];
for(n=0;n<200;n++);
}
IRInit(); //调用解码程序,把遥控编码负值给number;
}
}
下面是第二部分;
#include <reg51.h>
sbit IRIN = P3^2; //红外接收器数据线
void IRdelay(char x); //x*0.14MS
unsigned char IRCOM[7];
extern unsigned int number; //外部变量声明
void IRInit()
{
IE |= 0x81; //允许总中断中断,使能 INT0 外部中断
TCON |= 0x01; //触发方式为脉冲负边沿触发
IRIN=1; //I/O口初始化
}
void IR_IN() interrupt 0
{
unsigned char j,k,N=0;
EX0 = 0;
IRdelay(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{IRdelay(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{IRdelay(1);}
while (!IRIN) //等 IR 变为高电平
{IRdelay(1);}
while (IRIN) //计算IR高电平时长
{
IRdelay(1);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}
}
if (IRCOM[2]!=~IRCOM[3]) //判断接收的第三组数据和四组数据是否相反
{ EX0=1;
return; }
EX0 = 1;
}
/**********************************************************/
void IRdelay(unsigned char x) //x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
一下是实物效果图;因为一个手要拿手机,所以效果不好!
因为本人刚刚学习单片机不久,所以编程能力可能不怎么的,希望大家看看给点意见,谢谢,在这里还要谢谢工人大哥!!
单片机红外遥控器设计.doc
(308 KB, 下载次数: 13)
这里面是图片资料 |