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

📄 ifr_ir.lst

📁 里面包含了LCD显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   IFR_IR                                                                09/17/2007 09:47:22 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE IFR_IR
OBJECT MODULE PLACED IN ifr_ir.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ifr_ir.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #define ifr_ir_c
   3          #include"io.h"
   4          #include"ifr_ir.h"
   5          #include"key.h"
   6          #include"main.h"
   7          #include "LME2200.h"
   8          #include "stc_eeprom.h"
   9          #include "lcd.h"
  10          
  11          void ifr_key_deal(uchar dat1);
  12          void data_com(uchar K_ifr_Dat);
  13          
  14          uchar code ADDR_ID0[3] = {0x01,0x01,0x10};
  15          
  16          //****************************************************
  17          //function:ir init    
  18          //input   :无            
  19          //output  :i,延时i x 100us
  20          //modify  :2007-06-21
  21          //*****************************************************
  22          void ifr_init()
  23          {
  24   1          b_ifr  = 0;
  25   1              b_irf  = 0;
  26   1              b_send = 0;
  27   1              b_zero = 1;
  28   1              b_keytwo   = 0;
  29   1              b_keythree = 0;
  30   1              b_checkok  = 0;
  31   1              number_d   = 0; 
  32   1              number_ent = 0;
  33   1      }
  34          
  35          //****************************************************
  36          //function:红外的接收函数        
  37          //input   :无  
  38          //output  :无   
  39          //modify  :2007-6-19     
  40          //*****************************************************
  41          void ifr_irn()                                                                                             
  42          {
  43   1        uchar cont;  
  44   1        cont=mj=0;
  45   1              
  46   1        while(!ifr_ir)mj++;
  47   1        if((mj<1000)||(mj>2000))return ;      
  48   1        mj =0;  
  49   1        while(ifr_ir)mj++;
  50   1        if((mj<500)||(mj>1000))return ;       
  51   1        mj =0; 
  52   1        delay(2);
  53   1        if(ifr_ir)return;
  54   1         for(i=0;i<4;i++) //4个字节     
  55   1          for(j=0;j<8;j++){    //每个字节8位  
C51 COMPILER V7.50   IFR_IR                                                                09/17/2007 09:47:22 PAGE 2   

  56   2                      cont ++;
  57   2             while (!ifr_ir); //等待Infr为1; //560us完成
  58   2                 ifr_buf[i] >>= 1;
  59   2                 delay(35);
  60   2             if(ifr_ir)               // 小于560us为位0
  61   2                 delay(18);
  62   2                 if(ifr_ir)
  63   2                ifr_buf[i] |= 0x80;// 大于900us为位1 
  64   2             while(ifr_ir);        
  65   2              }
  66   1        if(cont == 32)
  67   1          {
  68   2            cont = 0; 
  69   2      
  70   2                if((ifr_buf[0]+ifr_buf[1]==0xff)&&(ifr_buf[2]+ifr_buf[3]==0xff))
  71   2                   {
  72   3                          b_ifr=1;
  73   3                      //if((ifr_buf[0]==0x7f)&&(ifr_buf[1]==0x80)) 
  74   3                      //led_ray1(2);
  75   3                          //ifr_key_deal(ifr_buf[2]);          
  76   3                       }
  77   2        }     
  78   1       }      
  79          
  80          
  81          /*************************************************************
  82          //function:无线的接收函数
  83          //input   :无
  84          //output  :ifr_buf[0],ifr_buf[1],ifr_buf[2],ifr_buf[3],b_ifr
  85          //modify  :2007-8-27 by tony
  86          **************************************************************/
  87          void Time0Star()
  88          {
  89   1              TR0=0;
  90   1              TH0=0;
  91   1              TL0=0;//修正值
  92   1              TF0=0;
  93   1              TR0=1;
  94   1      }
  95          
  96          void RF_bitRx(bit _bitRF)//RF 接收位
  97          {
  98   1              uchar delayi,count;
  99   1              count=0;
 100   1              while((count<4) && (!TF0))
 101   1              {
 102   2                      while(rfintpin==_bitRF);// ifr_buf[0]=0;        
 103   2                      delayi=4;
 104   2                      while(delayi>1) delayi--;
 105   2                      if ((rfintpin!=_bitRF))
 106   2                              {
 107   3                              count++;
 108   3                              delayi=3;
 109   3                              while(delayi>1) delayi--;
 110   3                        }
 111   2              }
 112   1              TR0=0;
 113   1      }
 114          
 115          
 116          //****************************************************
 117          //function:红外的接收函数   
C51 COMPILER V7.50   IFR_IR                                                                09/17/2007 09:47:22 PAGE 3   

 118          //input   :无  
 119          //output  :无     
 120          //modify  :2007-6-19   
 121          //*****************************************************
 122          void ifr_rf()
 123           {
 124   1              #define Louttime 2//允许最大码宽555us
 125   1          #define t11ms 1000
 126   1          #define t1100us 100//100us的宽度
 127   1              uint rxdataRF[2];
 128   1              uint  zerotime,onetime,saveLtime;//存放高低电平时间长短
 129   1              Time0Star();
 130   1              rxdataRF[0]=0;
 131   1              rxdataRF[1]=0;
 132   1      
 133   1      //*********************防止误入,通调试此方法又能防误入,又不会误退出**************************/
 134   1              if(!rfintpin)
 135   1                      {
 136   2                         for(zerotime=5;zerotime>1;zerotime--);
 137   2                         if(!rfintpin) return;
 138   2                      }
 139   1      
 140   1      
 141   1      //*********************防止误入,通调试此方法又能防误入,又不会误退出**************************/
 142   1                      zerotime=0;
 143   1              while((zerotime<5) && (!TF0))
 144   1              {
 145   2                      while(rfintpin)// ifr_buf[0]=0;
 146   2                              {
 147   3                               if((TH0>=2)) return;//555us则退出
 148   3                              }
 149   2                      for(onetime=4;onetime>1;onetime--) ;
 150   2                      if (!rfintpin)
 151   2                              {
 152   3                              zerotime++;
 153   3                              for(onetime=2;onetime>1;onetime--) ;
 154   3                              }
 155   2              }
 156   1      //
 157   1      TR0=0;  
 158   1      if((TH0>2)) return;//69us--555us认为允许
 159   1      if(TH0<1)
 160   1         if(TL0<60)return;
 161   1      
 162   1      saveLtime=(((uint)TH0)<<8) | ((uint)TL0);//作参考对象
 163   1      Time0Star();
 164   1      if(saveLtime<t1100us) saveLtime=t1100us;//最小为100us
 165   1      if(saveLtime<(t1100us*2)) saveLtime+=150;//150us
 166   1      else if(saveLtime<(t1100us*4)) saveLtime+=80;//80us
 167   1      else saveLtime+=50;//50us
 168   1      //修正参考时间(码宽)
 169   1      RF_bitRx(0);//无线位接收
 170   1      if(TF0) return;//如果是时间益出那是错误
 171   1      
 172   1      onetime=(((uint)TH0)<<8) | ((uint)TL0);
 173   1      if(onetime<(t11ms*3)) return;
 174   1      if(onetime>(t11ms*17)) return;
 175   1      /**********************************RF数据接收开始**************************************/
 176   1                
 177   1      
 178   1      
 179   1      Time0Star();
C51 COMPILER V7.50   IFR_IR                                                                09/17/2007 09:47:22 PAGE 4   

 180   1      ifr_buf[1]=0;//用于记字数
 181   1      ifr_buf[2]=0;//用于记位个数
 182   1      while(ifr_buf[1]<2)
 183   1       {
 184   2      ///////////////////////////////////////////////////////
 185   2              RF_bitRx(1);
 186   2              if(TF0) break;//error或结束
 187   2              zerotime=(((uint)TH0)<<8) | ((uint)TL0);
 188   2      /////////////////////////////////////////////////////////接收高电平
 189   2      ////////////////////////////////////////////////////////
 190   2              Time0Star();
 191   2              RF_bitRx(0);
 192   2              if(TF0) break;//error或结束
 193   2              onetime=(((uint)TH0)<<8) | ((uint)TL0);
 194   2      /////////////////////////////////////////////////////////接收低电平
 195   2              Time0Star();
 196   2      //以下部分为处理数据
 197   2              if(zerotime>(t11ms*2)) break;
 198   2              if(onetime>(t11ms*2)) break;//码宽超过2m则做错误处理
 199   2              if(zerotime>(onetime+(onetime/2))) //1
 200   2              {
 201   3                      rxdataRF[ifr_buf[1]] |=0x01;
 202   3                      ifr_buf[2]++;
 203   3                      if(ifr_buf[2]>=16)
 204   3                              {
 205   4                              ifr_buf[2]=0;
 206   4                              ifr_buf[1]++;
 207   4                              }
 208   3                      else
 209   3                              rxdataRF[ifr_buf[1]]<<=1;
 210   3              }
 211   2              else if(onetime>(zerotime+(zerotime/2))) //0
 212   2              {
 213   3                      rxdataRF[ifr_buf[1]] &=0xFFFE;//此行不用也可以
 214   3                      ifr_buf[2]++;
 215   3                      if(ifr_buf[2]>=16)
 216   3                              {
 217   4                              ifr_buf[2]=0;
 218   4                              ifr_buf[1]++;
 219   4                              }
 220   3                      else
 221   3                              rxdataRF[ifr_buf[1]]<<=1;
 222   3              }
 223   2              else //如果没有比例关系,那么按时间与码宽关系定值;
 224   2              {
 225   3              if(zerotime<saveLtime)
 226   3                      {
 227   4                      rxdataRF[ifr_buf[1]] &=0xFFFE;//认为为0
 228   4                      ifr_buf[2]++;
 229   4                      if(ifr_buf[2]>=16)
 230   4                              {
 231   5                              ifr_buf[2]=0;
 232   5                              ifr_buf[1]++;
 233   5                              }
 234   4                      else
 235   4                              rxdataRF[ifr_buf[1]]<<=1;
 236   4                      }
 237   3              else
 238   3                      {
 239   4                      rxdataRF[ifr_buf[1]] |=0x01;//作1处理
 240   4                      ifr_buf[2]++;
 241   4                      if(ifr_buf[2]>=16)
C51 COMPILER V7.50   IFR_IR                                                                09/17/2007 09:47:22 PAGE 5   

 242   4                              {
 243   5                              ifr_buf[2]=0;
 244   5                              ifr_buf[1]++;
 245   5                              }
 246   4                      else
 247   4                              rxdataRF[ifr_buf[1]]<<=1;
 248   4                      }
 249   3              }
 250   2      
 251   2      
 252   2       }//loop接收4个数据收完的话等待处理
 253   1      
 254   1              if(ifr_buf[1]==0) return;//一收就错误,则退出
 255   1              if(ifr_buf[2]!=0) //收完四个字节
 256   1              {
 257   2                      for(;ifr_buf[2]<15;ifr_buf[2]++)
 258   2                      {
 259   3                              rxdataRF[ifr_buf[1]] &=0xFFFE;
 260   3                              rxdataRF[ifr_buf[1]]<<=1;
 261   3                      }
 262   2                              rxdataRF[ifr_buf[1]] &=0xFFFE;
 263   2                              ifr_buf[1]++;
 264   2              }
 265   1      //数据处理后转换到数据存放区:ifr_buf[0]--ifr_buf[3]
 266   1              ifr_buf[0]=(uchar)rxdataRF[0];//低地址
 267   1              ifr_buf[1]=(uchar)(rxdataRF[0]>>8);//高地址
 268   1              ifr_buf[2]=(uchar)rxdataRF[1];//低数据
 269   1              ifr_buf[3]=(uchar)(rxdataRF[1]>>8);//高数据
 270   1              b_ifr=1;
 271   1              if((ifr_buf[0]==0x55)&&(ifr_buf[1]==0x55)&&(ifr_buf[3]==0x03))
 272   1                led_ray1(3);
 273   1       }
 274          
 275          //*********************************************************************################################
 276          //*******************************************************##############################################
 277          //****************************************************
 278          //function:  
 279          //input   :无  
 280          //output  :无   
 281          //modify  :2007-9-10     
 282          //*****************************************************
 283          void checkok(uchar dat_dat)
 284          {
 285   1         bit b_check=0,b_check1=0;
 286   1         bit b_keychoose1=0;
 287   1      
 288   1         if(b_send)
 289   1          {
 290   2                b_send=0;
 291   2                if(!b_study)led_ray1(1);else led_ray11(1);

⌨️ 快捷键说明

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