⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiemama.c

📁 基于386红外一体华的红外遥控解码程序
💻 C
字号:
//这个解码方式是针对目前最常用的宽度调剂方式编的.
//注意:1.遥控器中红外信号是反相输出的。
#include<STC89C51RC.H>

sbit T2   = P2^0;



 void dely(int time)  //定义延时函数
    {
	 while(time--)
	   {
	   }
    }		 


   unsigned char bianma(void)
     {
	  char wei,pm,ma;
	  int gdp;	
	  pm=0xff;
      for (wei=0;wei<8;wei++)
        {
     while(T2==0);//SBUF=5;	//低电平时停住
	 TH0=0;       //进入高电平后开始计时
	 TL0=0;
	 TR0=1;
	 while(T2==1);  // SBUF=6;
         TR0=0;     //进入低电平后计时结束
         gdp=TH0*256+TL0;   //高电平的时间长度
		  if ((gdp<2000)&&(gdp>100))   //属于编码长度范围
		   {         //SBUF=7;
             if (gdp>1000) ma=1;
		     else          ma=0;

		     pm<<=1;
             pm+=ma;
	       }
        }
      return pm;
     }	

  
  void fasong(void) interrupt 4  using 2
   { char j;
     if(RI)	  //RI接收中断标志位 当接收到了一信息帧后,RI自动置1,
       {  	  //指示CPU可以读取丰放在接收缓冲器SUBUF中的数据//
        RI=0;	  
	 	j=SBUF;
		dely(300);
		SBUF=j; 	 
       }

     if(TI)	  //发送中断标志 TI自动置1表明当前数据帧已发送毕
       {
	 TI=0;
       }
    }



  main()
  { 
   char thh,tll;
   unsigned char jiema1,jiema2,jiema3,jiema4;
   int low,high;
   TMOD=0X21;	 //	 12M晶体,不能用11.0592
   SCON=0X50;    //SM1=1,工作方式为1,REN=1,接收允许;其他为0
   PCON=0X80;	 //不加倍
   TH1=0XF3;	//定时器初值,用于设定波特率
   TL1=0XF3;	//同上	
   EA=1;	//中断总允许
   ES=1;	//串行口的中断允许位
   ET0=1;	//定时器T0中断允许位
   PS=1;	//串行中断优先值
   ET1=1;
   TR1=1;	//启动定时器1
     //unsigned char bianma(void);   //函数原型说明
      while(1)			  //解码程序
    {	 
     while(T2==1); //SBUF=0Xff; //最开始没信号时为高电平,停住不动
	 TH0=0;  TL0=0;  TR0=1;        //来信号,进入引导码低电平后开始计时
     while(T2==0); //SBUF=4;//停住,计时引导码的低电平
	 TR0=0;           //进入高电平后计时结束
     thh=TH0;
	 tll=TL0;  	   
     TH0=0;  TL0=0;  TR0=1;        //进入高电平后开始计时
	 low=thh*256+tll;
 	  //低电平的时间长度
     while(T2==1); // SBUF=8;//停住,计时引导码的高电平
     TR0=0; 			   //进入低电平后计时结束       
     high=TH0*256+TL0;      //高电平的时间长度	 			  
    if ((high>3000)&&(high<6000)&&(low>8000)&&(low<10000))
        { //引导码高低电平符合范围		 
		   jiema1=bianma();	     //用户码
		   jiema2=bianma();          //用户反码
		   jiema3=bianma();          //键码
		   jiema4=bianma();          //键反码
	      				
	//向串口输出数据
	 if((jiema1==~jiema2)&&(jiema3==~jiema4)) SBUF=jiema3;	 
	 //else	                                  SBUF=0x00;	 
	
	 dely(255);
	//j1为0x00,j2为0xff,这里我只输出了键码	  

	//本程序经调试可行!!!!!
	    }				 
    }				
   
  }						

    




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -