- 2024-05-09魔王夫人
dula=0; /
/
if(f==1)
{
取键码的低四位
/ k--),0x4f;Im[m// /8]=Im[m/
j> ,0x7d; IrOK=1; ,
TL0=0; dula=0;
#define Imin 8000 while(1)
unsigned int / {
#define uchar unsigned char
准备读下一码
wela=0; / for(k=125; ,Tc;Imin)&&(Tc< }
,在数码管前两位上就会显示对应按键的编码
#include < dula=0; {
delay(5);
} /
IT1=1;{
m=0; m=0;用遥控器对准红外接收头;
f=1; / 0;
取码
单片机采用外部中断P3; ,0x6f;
void delay(uchar i)
{
f=0;
,按下遥控器按键; wela=1; 0; 。并将8位操作码提取出来在数码管上显示; }
return;
.0592时的取值; m++; dula=1; P0=0xfe; /
/.3管脚和红外接收头的信号线相连。并用定时器0计算中断的间隔时间;
/ / for(j=i; / 找到启始码
/,0x00};
8]=Im[m/ f=0。 0x07; wela=0,0x00; /
,0x39; {
unsigned long m;
display(); ,来区分前导码; 1;
,0x00; if(m==32) Tc=TH0*256+TL0; P0=table[show[1]];>
uchar show[2]={0; 。
#define Inum2 700 Inum1&&Tc< /EX1=1; ,k;8]> {
/
{
提取中断时间间隔时长
1|0x80;
sbit dula=P2^6; k> if(IrOK==1)
sbit wela=P2^7; a;}
if(Im[2]==~Im[3]) Imax))
此处为晶振为11;
/ 8]>
、二进制的“1”;>
,0x77; Inum2&&Tc< {
,
,0x06;定时中断重新置零
/
unsigned char IrOK; 取码完成后判断读码是否正确
#define Inum3 3000
unsigned char Im[4]={0x00; P0=0xfd;
uchar f;0; 外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
如用其它频率的晶振时;
void main(void)
{
、“0”码,0x66; ,
#define Inum1 1450 reg52;Inum1) /
}
void display()
{
} m=0;
/ show[1]=Im[2] & 0x0F;a--)
Im[m/,0x79; TH0=0;
,0}; }
}
TR0=1; for(a=100;}
}
}
/ wela=1;/
show[0]=Im[2] >IrOK=0; 解码值在Im[2]中;Inum3) > P0=table[show[0]];
要改变相应的取值; 。
/ wela=0; m++;
,当IrOK=1时解码有效; ET0=1; * 51单片机红外遥控解码程序 */
,0x7c; 4; /
uchar code table[]={0x3f;
,0x71};
#define Imax 14000 TH0=0;{
a> delay(5).h>
if((Tc> else IrOK=0; ,0x5b;/ if(Tc> ,0x6d;TL0=0;TMOD=0x11; EA=1; dula=1; *演示主程序*/
uchar j; ,0x5e;/
if(Tc>,0x7f;
/
j--)
/,中断方式为边沿触发方式;
赞76