首页 > 装修问答 > 其它 > 51单片机红外解码C程序?

51单片机红外解码C程序?

浏览次数:339|时间:2024-05-13

热门回答

2024-05-02吃兔吃土
/.;
if(Im[2]==~Im[3]) /..
void intersvr1(void) interrupt 2 using 1 /,放在数组Im[4]的4字节中
}
if(Tc>/8]=Im[m/
f=0;/.45-3,回到原来的地方继续执行下去;/,接低电平进入
/,共32个位.5低)
{
m=0; /Inum1) /Imin)&&(Tc< /,共32个位;在函数中;取一位码;/外部中断
{
Tc=TH0*256+TL0;/
TL0=0;1.7-1; m++;
}
else IrOK=0;8]>>//,下一次进入外部中断时通过定时器数值判断
/.685)毫秒的0
{
Im[m/。
}
if(f==1)
{
if(Tc>.;8-14毫秒对应引导码13;外部中断为边沿触发;//,从而区分引导码或0码1码;
return;/.565.125(0,如果碰到return 语句,也就是说跳出函数的执行.45毫秒对应NEC码的1;NEC的码为1时;0;
f=1;1|0x80.565)毫秒的1
{
Im[m/Inum2&&Tc<取一位码;Inum3) /1.0毫秒对应NEC码的1,Im[3]为8位数据码的反码
{
IrOK=1; m++;1838将外部的高电平转为低电平
/>Imax)) /,初次进入外部中断.;8]>8]=Im[m/1.565.125(0;定时中断重新置零
if((Tc>Inum1&&Tc<:
/上一脉冲的周期,那么程序就会返回调用该函数的下一条语句执行;
/..5毫秒(9高4; / /
TH0=0;/,启动定时器关键程序如下;//0;Im[2]为8位数据码,放在数组Im[4]的4字节中
}
if(m==32)
{
m=0

195

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

2024-05-11燃情咖啡
遥控器和你那个一样哈哈,程序改写简单,电源键可接继电器控制总开关,按下0键关闭所有IO口,家里的遥控器均可利用,这个我最近刚写出来,1~8键控制8个IO口,多种工作方式,加qq

58