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

📄 ird.lst

📁 TLC0831实例
💻 LST
字号:
C51 COMPILER V7.02a   IRD                                                                  04/11/2007 22:22:48 PAGE 1   


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

stmt level    source

   1          /*
   2                  单片机红外遥控试验
   3                  
   4                  赵亮
   5                  zhaoliang_0801@dl.cn
   6          说明: 由于这个试验不是我的原创,所以没有过多的发言权,
   7                  我只是在网上找到了程序,修改之后,用到了我的板子上
   8                  试验结果,使用SAA3010 遥控器,板子上焊接红外接收头
   9                  注意一定要在接收头的电源也地端一定要接上滤波电容
  10                  我接的是一个10uf和一个104,效果还可以。
  11                  
  12                  数据线接到单片机的 外部中断0(P32)
  13                  
  14                  试验现象:按下遥控器上的0~9按键,对应的P2口
  15                  会有二进制的指示。
  16                   
  17          
  18          */ 
  19          
  20          #include "reg51.h"
  21          #include " intrins.h "
  22          
  23          unsigned char leddata[]= {              //共阴数码管 0-9 表
  24                          0x03,  //"0"
  25                          0x9F,  //"1"
  26                          0x25,  //"2"
  27                          0x0D,  //"3"
  28                          0x99,  //"4"
  29                          0x49,  //"5"
  30                          0x41,  //"6"
  31                          0x1F,  //"7"
  32                          0x01,  //"8"
  33                          0x09,  //"9"
  34                          0x11,  //"A"
  35                          0xC1,  //"B"
  36                          0x63,  //"C"
  37                          0x85,  //"D"
  38                          0x61,  //"E"
  39                          0x71,  //"F"
  40                          0x91,  //"H"
  41                          0xE3,  //"L"
  42                          0x13,  //"n"
  43                          0x83,  //"u"
  44                          0x31,  //"P"
  45                          0xC5,  //"o"
  46                          0xFD,  //"-"
  47                          0xFF,  //熄灭
  48                          0xDF  //自定义
  49                                   };
  50          
  51          
  52          
  53          sbit SM_1 = P1^6; 
  54          sbit SM_2 = P1^7;
  55          
C51 COMPILER V7.02a   IRD                                                                  04/11/2007 22:22:48 PAGE 2   

  56          #define uchar unsigned char
  57          
  58          uchar ykcode;                         //遥控码(14位的最后8位)
  59          bit ykok;                             //遥控数据有效标志
  60          
  61          uchar ykbnum;                         //遥控已接收位数
  62          uchar ykbtc;                          //遥控中断时 ykbtc=TH1
  63          uchar ykdelay;                        //遥控延时接收
  64          bdata uchar ykcodetemp;               //遥控临时码
  65          sbit ykcodetemp0=ykcodetemp^0;
  66          
  67          unsigned char temp;
  68          
  69          void YkInit(void);                   //遥控接收初始化
  70          unsigned char YkGetcode(void);       //返回遥控码
  71          bit YkTest(void);                    //检查有无遥控信号
  72          
  73          
  74          
  75          void main(void)
  76          {
  77   1              YkInit();
  78   1              SM_1 = 1;    
  79   1                      SM_2 = 0;                               //点亮第1个数码管
  80   1              SBUF = 0xff;
  81   1              while(1)                                
  82   1              {       
  83   2              unsigned char i;
  84   2              if (ykok)
  85   2                      {
  86   3                              temp=ykcode; 
  87   3                               
  88   3                              //P2=ykcode;
  89   3                      SBUF = leddata[temp];
  90   3                      for(i=0;i<100;i++);
  91   3      
  92   3                                      
  93   3                      }       
  94   2              
  95   2              }
  96   1      }
  97          
  98          void YkInit(void)                       //遥控接收初始化
  99          {
 100   1              EA=1;                      //开总中断
 101   1              
 102   1              TMOD=0x11;                //TMOD T0,T1均选用方式1(16位定时)
 103   1              SCON=0x00;
 104   1              TH1=0;
 105   1              TL1=0;
 106   1              IE|=0x89;             
 107   1              IP|=0x01;            
 108   1              TCON |= 0x41;         
 109   1              ykbnum=0;
 110   1              ykcodetemp=0;
 111   1              ykdelay=0;
 112   1      }
 113          
 114          
 115          bit YkTest(void)        //检查有无遥控信号
 116          {
 117   1              return(ykok);
C51 COMPILER V7.02a   IRD                                                                  04/11/2007 22:22:48 PAGE 3   

 118   1      }
 119          
 120          void intx0() interrupt 0 using 2        //遥控使用外部中断0,接P3.2口
 121          {
 122   1              ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
 123   1              switch(ykbnum)
 124   1              {
 125   2                      case(0):
 126   2                              ykbnum=1;
 127   2                              break;
 128   2                      case(1):
 129   2                              if(ykbtc==6)
 130   2                                      ykbnum=2;
 131   2                              else 
 132   2                                      ykbnum=0;
 133   2                              break;
 134   2                      case(2):
 135   2                              if(ykbtc==6||ykbtc==9)
 136   2                                      ykbnum=3;
 137   2                              else 
 138   2                                      ykbnum=0; 
 139   2                              break;
 140   2                      case(3):
 141   2                              if(ykbtc==9||ykbtc==6)
 142   2                                      ykbnum=4;
 143   2                              else 
 144   2                                      ykbnum=0;
 145   2                              break;
 146   2                              
 147   2                      default:
 148   2                              if(ykbnum<7)
 149   2                              {
 150   3                                      if(ykbtc==6)
 151   3                                              ykbnum++;
 152   3                                      else 
 153   3                                              ykbnum=0;
 154   3                              }
 155   2                              else 
 156   2                              {
 157   3                                      if(ykbtc==6)
 158   3                                      {
 159   4                                              if(ykcodetemp0)
 160   4                                                      ykcodetemp=ykcodetemp*2+1;
 161   4                                              else 
 162   4                                                      ykcodetemp=ykcodetemp*2;
 163   4                                              ykbnum++;
 164   4                                      }
 165   3                                      else if(ykbtc==9)
 166   3                                      {        
 167   4                                              if(ykcodetemp0)
 168   4                                              {
 169   5                                                      ykbnum++;
 170   5                                                      ykcodetemp=ykcodetemp*2;
 171   5                                              }  
 172   4                                              else 
 173   4                                              {
 174   5                                                      ykbnum+=2;
 175   5                                                      ykcodetemp=ykcodetemp*2;
 176   5                                                      ykcodetemp=ykcodetemp*2+1;
 177   5                                              }
 178   4                                      }
 179   3                                      else if(ykbtc>11&&ykbtc<15)
C51 COMPILER V7.02a   IRD                                                                  04/11/2007 22:22:48 PAGE 4   

 180   3                                      {
 181   4                                              ykbnum+=2;
 182   4                                              ykcodetemp=ykcodetemp*2;
 183   4                                              ykcodetemp=ykcodetemp*2+1;
 184   4                                      }
 185   3                                      else if(ykbtc>30)
 186   3                                              EX0=1;
 187   3                                      else 
 188   3                                              ykbnum=0;                
 189   3                              }
 190   2              }
 191   1      }  
 192          
 193          void intt1() interrupt 3 using 3        //遥控使用定时计数器1
 194          {
 195   1              if(ykdelay)
 196   1              {
 197   2                      ykdelay--;
 198   2                      EX0=0;
 199   2              }        //ykdelay不为0暂停接收
 200   1              else
 201   1              {
 202   2                  if(ykbnum==13)    //遥控码最后一位为0,补0
 203   2                  {
 204   3                          ykcode=ykcodetemp*=2;
 205   3                          ykdelay=3;
 206   3                          EX0=0;        //暂停接收
 207   3                          ykok=1;       //遥控数据有效
 208   3                  }
 209   2                  else if(ykbnum==14)       //遥控码最后一位为1,不用补
 210   2                      {
 211   3                          ykcode=ykcodetemp;
 212   3                          ykdelay=3;
 213   3                          EX0=0;                //暂停接收
 214   3                          ykok=1;               //遥控数据有效
 215   3                      }
 216   2                      else 
 217   2                              EX0=1;                //ykbnum不为13,14接收无效,继续接收
 218   2                  ykbnum=0;
 219   2                  ykcodetemp=0;
 220   2              }
 221   1      }
 222          
 223          
 224          
 225          
 226          
 227          
 228          
 229          
 230          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    330    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     31       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.

C51 COMPILER V7.02a   IRD                                                                  04/11/2007 22:22:48 PAGE 5   


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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