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

📄 main.lst

📁 使用isis模拟的红外编解码实验
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  02/06/2009 16:07:36 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #define TIMEH 12 //基于22.1184M时钟晶振,数字越大,时间越长
   3          #define TIMEL 50 //基于22.1184M时钟晶振,数字越大,时间越长
   4          #define ROW P3  //矩阵按键接口定义
   5          #define LINE P2 //矩阵按键接口定义
   6          
   7          extern void timer_init(void);
   8          extern void delay(unsigned int);
   9          extern unsigned char scan_key(void);
  10          
  11          unsigned char irm_code;
  12          sbit QD = P1^0;
  13          
  14          void main()
  15          {
  16   1              unsigned char tmp;
  17   1              irm_code=0xff;
  18   1              timer_init();
  19   1              while(1) {
  20   2                      tmp = scan_key();
  21   2                      if(tmp!=0xff) {
  22   3                              if(irm_code==0xff) {//一次键值发射完成后会将irm_code置为0xff                    
  23   4                                      irm_code = tmp; //键值传递
  24   4                                      TR0 = 1;                //启动定时器,完成编码发射
  25   4                              }
  26   3                              delay(10);//两次编码发射之间需要延时,连续发射会导致解码失败  
  27   3                      }
  28   2              }        
  29   1      }
  30          
  31          void timer_init(void)
  32          {
  33   1              TMOD = 0x01;
  34   1              TH0 = 0xff;
  35   1              TL0 = 0xff;
  36   1              EA = 1;
  37   1              ET0 = 1;
  38   1              TR0 = 0;
  39   1      }
  40          
  41          /*定时中断,红外编码*/
  42          void timer_int(void) interrupt 1
  43          {
  44   1              static unsigned char i=0,flag=0;
  45   1              QD=~QD;
  46   1              if(i<10) { //连续发射5个“0”引导码
  47   2                      TH0 = 255-TIMEH/2;
  48   2                      TL0 = 255-TIMEL/2;
  49   2                      i++;
  50   2              }
  51   1              else if(i<18) { //数据编码
  52   2                      if((irm_code & 0x80)==0x80) {
  53   3                              TH0 = 255-TIMEH;
  54   3                              TL0 = 255-TIMEL;
  55   3                              irm_code <<= 1;
C51 COMPILER V8.02   MAIN                                                                  02/06/2009 16:07:36 PAGE 2   

  56   3                              i++;
  57   3                      }
  58   2                      else {
  59   3                              TH0 = 255-TIMEH/2;
  60   3                              TL0 = 255-TIMEL/2;
  61   3                              if(flag) {
  62   4                                      irm_code <<= 1;
  63   4                                      i++;
  64   4                              }
  65   3                              flag ^= 0x01;
  66   3                      }               
  67   2              }
  68   1              else {
  69   2                      TR0 = 0;
  70   2                      i=0;
  71   2                      QD=1;
  72   2                      irm_code=0xff;
  73   2                      TH0 = 0xff;
  74   2                      TL0 = 0xff;       
  75   2              }       
  76   1      }
  77          
  78          
  79          void delay(unsigned int t)
  80          {
  81   1              unsigned char i;
  82   1              while(t--) for(i=0;i<230;i++);
  83   1      }
  84          
  85          /*矩阵按键扫描*/
  86          unsigned char scan_key(void)
  87          {
  88   1              unsigned char j,tmp;            
  89   1              static unsigned char i=0;
  90   1              ROW = 255-(1<<i); //列扫描低电平有效,FE,FD,FB,F7
  91   1      //      tmp = LINE;
  92   1              if(LINE!=0xff) 
  93   1                      for(j=0;j<8;j++) 
  94   1                              if(LINE==(255-(1<<j))) return (j+(i<<3));
  95   1              i++; i&=0x03;
  96   1              return(0xff);
  97   1      }
*** WARNING C280 IN LINE 88 OF MAIN.C: 'tmp': unreferenced local variable
  98          
  99          
 100          
 101          
 102          


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


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

⌨️ 快捷键说明

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