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

📄 main.lst

📁 基于51单片机实现的红外信号发送与接收系统
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  06/15/2008 18:04:01 PAGE 1   


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

line level    source

   1          
   2                  #include<reg51.h>
   3          
   4                  typedef unsigned char  byte;
   5          
   6                  byte keyCode[4][16]={0,0,0,0,0,0,0,0xB4,0,0,0,0xD1,0,0xE1,0xF0,0,
   7                                                           0,0,0,0,0,0,0,0x2D,0,0,0,0x4B,0,0x78,0x87,0,
   8                                                           0,0,0,0,0,0,0,0,0,0,0,0,0,0x0F,0x1E,0,
   9                                                           0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};      //低四位为按键编码,高四位为校验码
  10                  int clock=0;            //全局计数器,每次时钟中断加一
  11          
  12                  void init()                     //初始化
  13                  {
  14   1                      /*keyCode[0][14]=0xF0;  //0号键按下,P1高四位输出~(1<<0)=(1110),低四位检测到14=(1110)
  15   1                      keyCode[0][13]=0xE1;    //1号键按下,P1高四位输出~(1<<0)=(1110),低四位检测到13=(1101)
  16   1                      keyCode[0][11]=0xD2;    //2号键按下,P1高四位输出~(1<<0)=(1110),低四位检测到11=(1011)
  17   1                      keyCode[0][7] =0xB4;    //3号键按下,P1高四位输出~(1<<0)=(1110),低四位检测到 7=(0111)
  18   1      
  19   1                      keyCode[1][14]=0x87;    //4号键按下,P1高四位输出~(1<<1)=(1101),低四位检测到14=(1110)
  20   1                      keyCode[1][13]=0x78;    //5号键按下,P1高四位输出~(1<<1)=(1101),低四位检测到13=(1101)
  21   1                      keyCode[1][11]=0x4B;    //6号键按下,P1高四位输出~(1<<1)=(1101),低四位检测到11=(1011)
  22   1                      keyCode[1][7] =0x2D;    //7号键按下,P1高四位输出~(1<<1)=(1101),低四位检测到 7=(0111)
  23   1      
  24   1                      keyCode[2][14]=0x1E;    //8号键按下,P1高四位输出~(1<<2)=(1011),低四位检测到14=(1110)
  25   1                      keyCode[2][13]=0x0F;    //9号键按下,P1高四位输出~(1<<2)=(1011),低四位检测到13=(1101)  */
  26   1      
  27   1                      TMOD=0x02;      //使用计时器0,模式2,8位自动重装载,每当TL0溢出后自动重装载TH0 的值
  28   1                      TH0=0x9C;       
  29   1                      TL0=0x9C;       //赋8位时钟计数器初值,每 0xFF - 0x9C = 100us = 0.1ms中断一次
  30   1                      EA=1;           //开中断
  31   1                      ET0=1;      //注意,此时时钟并未启动
  32   1              }
  33                  
  34                  void sendLeadCode()     //发送引导码,8ms高电平,8ms低电平
  35                  {
  36   1                      TR0=1;                  //启动时钟
  37   1      
  38   1                      clock=0;
  39   1                      while(clock<80)
  40   1                              P0|=1;          //P0.0=1,循环持续8ms
  41   1                                      
  42   1                      while(clock<160)
  43   1                              P0&=0xFE;       //P0.0=0。循环持续8ms
  44   1      
  45   1                      TR0=0;                  //关闭时钟
  46   1                      TL0=0x9C;
  47   1              }
  48          
  49                  void sendBit(byte bitToSend)//发送一位脉位调制信号,1ms高电平,1ms或3ms低电平
  50                  {
  51   1                      TR0=1;                  //启动时钟
  52   1      
  53   1                      clock=0;
  54   1                      while(clock<10)
  55   1                              P0|=1;          //P0.0=1,循环持续1ms
C51 COMPILER V8.08   MAIN                                                                  06/15/2008 18:04:01 PAGE 2   

  56   1                                      
  57   1                      if(bitToSend & 0x01)//如果是bit"1"
  58   1                              while(clock<40)
  59   1                                      P0&=0xFE;       //P0.0=0,循环持续3ms
  60   1                      else                            //如果是bit"0"
  61   1                              while(clock<20)
  62   1                                      P0&=0xFE;       //P0.0=0,循环持续1ms
  63   1      
  64   1                      TR0=0;                  //关闭时钟
  65   1                      TL0=0x9C;
  66   1              }
  67          
  68                  void sendEnd()
  69                  {
  70   1                      clock=0;
  71   1                      TR0=1;
  72   1                      while(clock<2)
  73   1                              P0|=1;
  74   1                      P0&=0xFE;
  75   1                      TR0=0;
  76   1              }
  77                  
  78                  void sendCode(byte keyCode)//发送编码code及其反码,共8位
  79                  {
  80   1                      char i;
  81   1      
  82   1                      sendLeadCode();            //发送引导码
  83   1                      for(i=0;i<8;i++)           //依次从低到高发送8位编码
  84   1                              sendBit(keyCode>>i);
  85   1                      sendEnd();
  86   1              }
  87          
  88                  void main()
  89                  {
  90   1                      byte i,t;
  91   1      
  92   1                      init();
  93   1                      while(1)//轮询检测按键
  94   1                      {
  95   2                              for(i=4;i<8;i++)//P1口高四位依次变低电位,检测低四位
  96   2                              {
  97   3                                      P1=~(1<<i);
  98   3                                      if((t=keyCode[i-4][P1 & 0x0F])!=0)//如果有按键按下,则查表得到的编码t不为0
  99   3                                              sendCode(t);
 100   3                              }
 101   2                      }
 102   1              }
 103          
 104                  void timer() interrupt 1  //时钟中断处理函数
 105                  {
 106   1                      clock++;        //全局时钟加一          
 107   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    251    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     66    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V8.08   MAIN                                                                  06/15/2008 18:04:01 PAGE 3   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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