• Yeeeee
    了解作者
  • C/C++
    开发工具
  • 11KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2017-09-01 00:39
    上传日期
C语言编写的51MCU红外遥控接收器驱动,实际测试OK,可以解码除不同的红外码型
infrared005.rar
  • infrared005
  • infrared4.M51
    9.3KB
  • infrared4.Uv2
    1.7KB
  • infrared4.c
    2.4KB
  • infrared4_Opt.Bak
    1009B
  • infrared4.OBJ
    5.9KB
  • infrared4.hex
    1002B
  • infrared4.Opt
    1003B
  • infrared4.LST
    6.7KB
  • infrared4.plg
    0B
  • infrared4
    5KB
  • infrared4.lnp
    50B
内容介绍
//==================================================== //infrared 红外 //==================================================== #include <reg52.h> #define uint unsigned int #define uchar unsigned char void delay10us(unsigned int t); void delay_ms(unsigned int t); sbit IR=P3^2; uchar sys_code,key_code,buf_code,bit_count,buf_T; uchar inf_state;//inf_state:0空闲状态,1引导码,2系统码sys,3过渡码,4功能码key bit inf_new_flg; //------------------------------------------------------ void main() { TMOD=0x21; TH1=0xfd; TL1=0xfd; TR1=1; PCON=PCON&0x7f; SCON=0x50; EX0=1; IT0=1; PX0=1; EA=1; while(1) { if(inf_new_flg==1) { inf_new_flg=0; SBUF=key_code; while(!TI); TI=0; delay10us(60); } } }//------------------------------------------------------ void int0() interrupt 0 using 0 { EX0=0; TR0=0; buf_T=TH0; switch(inf_state) { case 0: inf_state=1; break; case 1: if(buf_T>0x2B && buf_T<0x2F) inf_state=2; break; case 2: if(buf_T>0x01 && buf_T<0x05)//窄脉冲接收 { buf_code>>=1;//接收0 bit_count++; } else if(buf_T>0x05&&buf_T<0x09)//宽脉冲接收 { buf_code>>=1; buf_code|=0x80;//接收1 bit_count++;//数据脉冲数累加,一共有8 个 } if(bit_count>=8)//若收完8位数据脉冲,则进行以下的处理 { inf_state=3;//标志接收系统进入中间过渡态 bit_count=0; sys_code=buf_code; buf_code=0; } break; case 3: if(buf_T>0x0e&&buf_T<0x12) inf_state=4; break; case 4: if(buf_T>0x01&&buf_T<0x05)//窄脉冲接收 { buf_code>>=1;//接收0 bit_count++; } else if(buf_T>0x05&&buf_T<0x09)//宽脉冲接收 { buf_code>>=1; buf_code|=0x80;//接收1 bit_count++;//数据脉冲数累加,一共有8 个 } if(bit_count>=8)//若收完8位数据脉冲,则进行以下的处理 { inf_state=0;//标志进入空闲状态 bit_count=0; key_code=buf_code; buf_code=0; inf_new_flg=1; //delay_ms(10); } } TL0=0; TH0=0; TR0=1; EX0=1; }//------------------------------------------------------ void delay10us(unsigned int t) { while(t--); }//------------------------------------------------------ void delay_ms(uint t) { uint i; uchar j; for(i=0;i<t;i++) for(j=0;j<125;j++); }//------------------------------------------------------
评论
    相关推荐