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

📄 t.lst

📁 通过51解码38khz的红外遥控器信号
💻 LST
字号:
C51 COMPILER V8.08   T                                                                     04/20/2007 20:29:50 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE T
OBJECT MODULE PLACED IN t.OBJ
COMPILER INVOKED BY: D:\Keil_ARM\C51\BIN\C51.EXE t.c COMPACT BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<ks0108.h>
   3          #include<lib.h>
   4          //===========================函数声明=====================================//
   5          void SendData(unsigned char Serial_data)  ;
   6          unsigned char ReadCode();
   7          unsigned char DisplayUART();
   8          void ChangCode();
   9          //==========================================================================//
  10          sbit key0=P3^2;//=======确认键
  11          sbit key1=P3^3;//=======选择键
  12          sbit key2=P3^4;//=======确认键2
  13          sbit Inf=P3^5;//15pin
  14          sbit LED=P0^0;
  15          sbit LED2=P0^5;
  16          unsigned char SerialBuf[100];
  17          unsigned char SerialBufCount;
  18          unsigned char Flag=0;
  19          //=====================================================================//
  20          
  21          //====================主程序======================//
  22          main()
  23          {
  24   1       TMOD=0x21;     
  25   1       TH1=0xE8;      //波特率1200时,定时器/计数器T1自动重装初值 
  26   1       TL1=0xE8; 
  27   1       PCON=0x00;     //SMOD为0不倍增模式 
  28   1       SCON=0xc0;     //串行口设置为模式3,//
  29   1       //REN=1;       //允许接收 
  30   1       //ES=0;          //串行口允许中断 
  31   1      EA=1;
  32   1      IT1=1;
  33   1      IT0=1; //键盘中断
  34   1      EX0=1;EX1=1;
  35   1      Initialize();
  36   1      ClearScr(0,0,8,128);
  37   1      DisplayListChar(0,0,Tip,0);
  38   1      DisplayPic(1,1,2,16,wu,1);DisplayPic(1,17,2,16,zhi,1);DisplayPic(1,33,2,16,bin,1);//汉字测试
  39   1      DisplayPic(3,1,2,16,hzk[0],1);DisplayPic(3,17,2,16,hzk[1],1);DisplayPic(3,33,2,16,hzk[2],1);//汉字测试
  40   1      Delay(200);
  41   1      while(1)
  42   1      {if (key2==0){Delay(2000);while(key2==0);Flag=3;}
  43   2      switch (Flag)
  44   2      {case 1:LED=0;ClearScr(0,0,8,128);DisplayListChar(0,0,Rec,0);
  45   3              ReadCode();LED2=0;DisplayListChar(0,0,End,0);Flag=0;break;
  46   3       case 2:ClearScr(0,0,8,128);DisplayUART();Flag=0;break;
  47   3       case 3:ClearScr(0,0,8,128);DisplayListChar(0,0,Cod,0);ChangCode();Flag=0;break;
  48   3      }
  49   2      }
  50   1      }
  51          //=============================================================================//
  52          void Key_1() interrupt 2
  53          {
  54   1      Delay(2000);
  55   1      while(key1==0);
C51 COMPILER V8.08   T                                                                     04/20/2007 20:29:50 PAGE 2   

  56   1      Flag=1;
  57   1      }
  58          //==============================================================================//
  59          
  60          //KEY0确认键处理子程序==============================================================//
  61          void Key_0() interrupt 0
  62          {
  63   1      Delay(2000);
  64   1      while(key0==0);
  65   1      Flag=2;
  66   1      }
  67          
  68          //UART中断程序
  69          void Uart() interrupt 4
  70          {RI=0; 
  71   1      SerialBuf[SerialBufCount]= SBUF;
  72   1       SerialBufCount++;
  73   1      }
  74          //==============================================================================//
  75          unsigned char DisplayUART()
  76          {
  77   1      unsigned char i,x=0,y=0;
  78   1      TR1=1;//ES=1;
  79   1      for (i=0;i<SerialBufCount;i++)
  80   1      {
  81   2      SendData(SerialBuf[i]);
  82   2      if (y>120)y=0,x++;
  83   2      if (SerialBufCount>100)return(1);    
  84   2      DisplayListChar(x,y,&Number[SerialBuf[i]],0);y+=14;
  85   2      }
  86   1      SerialBufCount=0;LED2=1;LED=1;
  87   1      TR1=0;//ES=0;
  88   1      }
  89          //---------------------------------------------*/
  90          void SendData(unsigned char Serial_data)   
  91          { 
  92   1            ACC=Serial_data; 
  93   1            TB8=P;TI=0; 
  94   1            SBUF=Serial_data; 
  95   1            while(!TI); 
  96   1            TI=0;                            
  97   1      }
  98          
  99          //---------------------------------------------  
 100          unsigned char ReadCode()
 101          {
 102   1      unsigned char i;
 103   1      SerialBufCount=0;
 104   1      while(Inf==1);// 等待信号
 105   1      TH0=0x00;      
 106   1      TL0=0x00;
 107   1      TR0=1;   // 如果有信号开定时器(这时的信号为引导码)
 108   1      //--------------------------------
 109   1      for (i=0;i<100;i++)//读值
 110   1      {
 111   2      while(Inf==0);TR0=0;  
 112   2      //读值时先等待低电平可以省去判断引导码的过程(引导码过后的第一个低电平表示数据开始)
 113   2      SerialBuf[SerialBufCount]= TH0; 
 114   2      SerialBufCount++; TH0=0x00;TL0=0x00;TR0=1;//只需取个大概值所以省略TL0
 115   2      
 116   2      while(Inf==1);
 117   2      if (TH0>0x4e) {SerialBufCount--;return 0;}
C51 COMPILER V8.08   T                                                                     04/20/2007 20:29:50 PAGE 3   

 118   2      //如果所有的数据接收完了就返回(当接收端出现大于0x4e时间的高电平就表示结束)
 119   2      TR0=0;
 120   2      SerialBuf[SerialBufCount]= TH0; 
 121   2      SerialBufCount++; TH0=0x00;TL0=0x00;TR0=1;
 122   2      }
 123   1      }
 124          
 125          //--------------------------------
 126          void ChangCode()
 127          {
 128   1      unsigned char temp=0,i,k=3,x,Code[4];
 129   1      for (x=0;x<4;x++)
 130   1      {
 131   2       for (i=0;i<8;i++)
 132   2       {
 133   3       temp=temp>>1;
 134   3       if (SerialBuf[i+k]>0x04){temp=temp|0x80;k++;}
 135   3       else if (SerialBuf[i+k]<0x04){temp=temp&0x7f;k++;}
 136   3       }
 137   2      
 138   2      Code[x]=temp;k=k+8;
 139   2      }
 140   1      i=30;
 141   1      TR1=1;
 142   1      for (x=0;x<4;x++)
 143   1      {SendData(Code[x]);DisplayListChar(2,i,&Number[Code[x]],0);i+=14;}
 144   1      TR1=0;LED2=1;LED=1;
 145   1      }
 146          
 147          
 148          
 149          
 150          
 151          
 152          
 153          
 154          
 155          
 156          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    938    ----
   CONSTANT SIZE    =   1044    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =    102       9
   DATA SIZE        =   ----    ----
   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 + -