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

📄 ir_shu_ma_guan.lst

📁 51单片机的实验八 红外编码
💻 LST
字号:
C51 COMPILER V7.06   IR_SHU_MA_GUAN                                                        04/11/2007 16:33:23 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE IR_SHU_MA_GUAN
OBJECT MODULE PLACED IN IR_shu_ma_guan.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE IR_shu_ma_guan.c BROWSE DEBUG OBJECTEXTEND TABS(2)

stmt level    source

   1          /****************************************
   2          程序功能:红外一体化接收遥控器的编码并解码,
   3             LED数码管显示遥控器按下的数字,并且如果
   4             红外解码成功的话, 蜂鸣器发出"滴滴"的声音
   5             表示解码成功
   6          ****************************************/
   7          
   8          #include <reg52.h>
   9          #include <stdio.h>
  10          
  11          sbit sound=P3^3;         //蜂鸣器
  12          sbit IR=P3^2;            //P3.2为红外一体化接收
  13          
  14          unsigned char dm,i,j,k;
  15          unsigned char  aa[2]; //定义2个数组,用来存储代码,8位的数据码和8位的数据反码
  16          unsigned long  bb;    //定义bb用来存放用户识别码,这里采用的是26位的用户识别
  17          
  18          
  19          //0.9ms
  20          void delay0_9ms(void)
  21          {
  22   1         unsigned char j,k;
  23   1         for(j=18;j>0;j--)
  24   1         for(k=20;k>0;k--) ;
  25   1      }
  26          
  27          //1ms
  28          void delay1ms(void)
  29          {
  30   1        unsigned char i,j;
  31   1        for(i=2;i>0;i--)
  32   1        for(j=230;j>0;j--) ;
  33   1      }
  34          
  35          //4.5ms
  36          void delay4_5ms(void)
  37          {
  38   1         unsigned char i,j;
  39   1         for(i=10;i>0;i--)
  40   1         for(j=225;j>0;j--) ;
  41   1      }
  42          
  43          //100ms
  44          void delay100ms(void)
  45          {
  46   1        unsigned char i,j,k;
  47   1        for(i=200;i>0;i--)  
  48   1        for(j=20;j>0;j--)
  49   1        for(k=10;k>0;k--) ;
  50   1      }
  51          
  52          
  53          
  54          LED_display(unsigned char date)
  55          {
C51 COMPILER V7.06   IR_SHU_MA_GUAN                                                        04/11/2007 16:33:23 PAGE 2   

  56   1        switch(date)
  57   1        {
  58   2         case 0x11:   {P1=0x00;P2=0xf9;break;}          //显示1
  59   2         case 0x12:   {P1=0x00;P2=0xa4;break;}          //显示2
  60   2         case 0x13:   {P1=0x00;P2=0xb0;break;}          //显示3
  61   2         case 0x14:   {P1=0x00;P2=0x99;break;}          //显示4
  62   2         case 0x15:   {P1=0x00;P2=0x92;break;}          //显示5
  63   2         case 0x16:   {P1=0x00;P2=0x82;break;}          //显示6
  64   2         case 0x17:   {P1=0x00;P2=0xf8;break;}          //显示7
  65   2         case 0x18:   {P1=0x00;P2=0x80;break;}          //显示8
  66   2         case 0x19:   {P1=0x00;P2=0x90;break;}          //显示9
  67   2         case 0x10:   {P1=0x00;P2=0xc0;break;}          //显示0
  68   2         default:     {P1=0x00;P2=0xb6;}                //显示错误
  69   2         }
  70   1      }
  71          
  72          
  73          
  74          void main()
  75          {
  76   1       IT0=1;           //外部中断0触发方式控制位,下降沿触发
  77   1       EX0=1;           //外部中断0(INT0)中断允许位
  78   1       EA=1;            //总中断
  79   1       dm=0;
  80   1       P2=0xc0;
  81   1       P1=0x00;
  82   1      while(1);
  83   1      }
  84          
  85          
  86          
  87          void t0(void) interrupt 0 using 2//外部中断0的函数
  88          {
  89   1          EA=0;                        //暂时关闭CPU的所有中断请求
  90   1      
  91   1          for(k=0;k<10;k++)            //重复10次,目的是检测在9毫秒内如果出现高电平就退出解码程序
  92   1        {                              //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  93   2          
  94   2        delay0_9ms();                   //延时0.9毫秒
  95   2          if (IR==1) {k=10;break;}    //延时0.9毫秒后判断P3.2脚是否出现高电平如果有就退出解码程序
  96   2          else if(k==9)                //重复10次?
  97   2                 {                     //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  98   3                  while(IR==0);       //等待高电平避开9毫秒低电平引导脉冲
  99   3                  delay4_5ms();           //延时4.5毫秒避开4.5毫秒的结果码
 100   3      
 101   3            
 102   3      /********************************************
 103   3      //26位的用户码,前13位数据码,后13位数据反码
 104   3      *********************************************/
 105   3                    for(j=1;j<=26;j++)//每组数据为26位
 106   3                      {                 
 107   4                       while(IR==0);  //
 108   4                       delay0_9ms();
 109   4                        if(IR==1)
 110   4                         {
 111   5                   delay1ms();
 112   5                           dm=dm|0x2000000;              //因为是26位,一个"1",后面25个"0",转化二进制即为"1000000
             -"    
 113   5                           if(j<26) dm=dm>>1;            //数据"1",右移一个"1",一共25次
 114   5                         }                
 115   4                       else  if(j<26) dm=dm>>1;            //数据"0",一共25次
 116   4                      }                    
C51 COMPILER V7.06   IR_SHU_MA_GUAN                                                        04/11/2007 16:33:23 PAGE 3   

 117   3                   bb=dm;
 118   3                   dm=0;
 119   3      
 120   3      
 121   3      
 122   3      /***************************************************
 123   3      //16位的用户码,前8位数据码,后8位数据反码
 124   3      ****************************************************/
 125   3      
 126   3              for(i=0;i<2;i++)     
 127   3                     {                
 128   4                       for(j=1;j<=8;j++)//每组数据为8位
 129   4                      {                
 130   5                       while(IR==0);  //
 131   5                       delay0_9ms();
 132   5                        if(IR==1)
 133   5                         {
 134   6                   delay1ms();
 135   6                           dm=dm|0x80;
 136   6                           if(j<8) dm=dm>>1;           //数据"1",右移一个"1",一共7次
 137   6                         }                
 138   5                        else  if(j<8) dm=dm>>1;          //数据"0",一共7次
 139   5                      }                    
 140   4                   aa[i]=dm;
 141   4                   dm=0;
 142   4                     }              
 143   3      
 144   3      /***************************************************
 145   3      //显示部分
 146   3      ****************************************************/            
 147   3                     if(aa[0]==~aa[1])         //验证成功
 148   3                   {
 149   4                       sound=0;
 150   4                       delay100ms();
 151   4                 LED_display(aa[0]);
 152   4                       sound=1;
 153   4                   }
 154   3      
 155   3                }                     //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 156   2        }                             //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 157   1      EA=1;
 158   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    404    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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