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

📄 yaok2.lst

📁 C51遥控测试程序,电路已经认证合格,请多提意见
💻 LST
字号:
C51 COMPILER V7.06   YAOK2                                                                 07/06/2007 15:26:22 PAGE 1   


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

stmt level    source

   1          /**********************************************************
   2          *遥控解码程序(C语言)
   3          *遥控IC型号:RSM2222-001 与PT6122,uPD6122相同
   4          *版本:V0.2
   5          *编程:飞扬
   6          *学习C语言15天重写的,希望高手把你们写的好的程序贴出来给我们
   7          *这些菜鸟看看!!.
   8          *用12M晶振把引导信号检测次数改为10次
   9          **********************************************************/
  10          #include <sm8954a.h>
  11          //引脚定义
  12          //#define  LED2 P0
  13          #define  LED P1
  14          sbit Led  = P1 ^ 7;
  15          sbit Beep = P1^6;//P1.4脚音效输出
  16          sbit P3_2 = P3^2;
  17          sbit K2 = P2 ^ 2;
  18          sbit K3 = P2 ^ 3;
  19          sbit K4 = P2 ^ 4;
  20          sbit K5 = P2 ^ 5;
  21          static unsigned char data DT;
  22          //函数声明
  23          void delay1s();
  24          void Delay400us();
  25          void Sound();
  26          
  27          /**********************************************************
  28          *外中断0 遥控解码函数(子程序)
  29          **********************************************************/
  30          void IR() interrupt 0 using 3 //选择工作寄存器组
  31          {
  32   1      //LED=0xff;
  33   1      //unsigned int  a;
  34   1      unsigned char i,k;
  35   1      unsigned char KeyCoding[4]; //定义数组,存放接收到的数据
  36   1      /*我的遥控按键编码 确定 上 下 左 右 菜单 退出*/
  37   1      //unsigned char code KeyCode[9]={0x51,0x06,0x44,0x47,0x40,0x02,0x07,0x4b,0x03};
  38   1      EA = 0; //关外中断0
  39   1      if (P3_2==0) //P3.2低电平继续
  40   1      {
  41   2      for (i=20;i>0;i--) //循环检测10次,低电平引导信号干扰检测(9ms)
  42   2      {
  43   3      Delay400us(); //延时438us
  44   3      if (P3_2==1) //低电平引导信号出现高电平就跳出
  45   3      {
  46   4      EA = 1; //开外中断
  47   4      return;
  48   4      }
  49   3      }
  50   2      while(P3_2==0); //等待高电平引导信号到了.
  51   2      for (i=10;i>0;i--) //循环检测10次,高电平引导信号干扰检测(4.5ms)
  52   2      {
  53   3      Delay400us();
  54   3      if (P3_2==0) //高电平引导信号出现低电平就跳出
  55   3      {
C51 COMPILER V7.06   YAOK2                                                                 07/06/2007 15:26:22 PAGE 2   

  56   4      EA = 1; //开外中断
  57   4      return;
  58   4      }
  59   3      }
  60   2      
  61   2      while(P3_2==1); //等待高电平引导信号结束.
  62   2      //接收4个字节的数据
  63   2      for (k=0;k<4;k++)
  64   2      {
  65   3      for (i=8;i>0;i--) //8位数据
  66   3      {
  67   4      while(P3_2==0); //等待第一个地址码的高电平到了.(保证判断每位数据的起点一致)
  68   4      Delay400us();
  69   4      Delay400us(); //延时0.876ms去判断P3.2的状态(0.56ms<延时时间<1.125ms)
  70   4      KeyCoding[k]>>= 1; //右移1位
  71   4      if(P3_2==1) //仍是1,最高位写入1,0跳过
  72   4      KeyCoding[k]|= 0x80;
  73   4      while(P3_2==1); //等待高电平结束
  74   4      }
  75   3      }
  76   2      //比较地址码和地址反码,不同解码错误退出
  77   2      if (KeyCoding[0]!=~KeyCoding[1]&&KeyCoding[2]!=~KeyCoding[3])
  78   2      {
  79   3      EA = 1; //开外中断
  80   3      return;
  81   3      }
  82   2      Sound(); //解码成功声音提示.
  83   2      }
  84   1      switch (KeyCoding[2])
  85   1      {//按键判断
  86   2      case 0x14:
  87   2      LED=0xfe;
  88   2      DT = 1;//确定键
  89   2      //这里添加代码
  90   2      break;
  91   2      case 0x11: //向上键
  92   2      LED=0xfb;
  93   2      DT = 1;
  94   2      //这里添加代码
  95   2      break;
  96   2      case 0x09: //向下键
  97   2      LED=0xef;
  98   2      DT = 1;
  99   2      //这里添加代码
 100   2      break;
 101   2      case 0x1b: //向左键
 102   2      LED=0xdf;
 103   2      DT = 1;
 104   2      //这里添加代码
 105   2      break;
 106   2      case 0x12: //向右键
 107   2      LED=0xfa;
 108   2      DT = 1;
 109   2      //这里添加代码
 110   2      break;
 111   2      case 0x16:
 112   2      EA=1;
 113   2      EX0=1;   //标题菜单键
 114   2      do
 115   2      {
 116   3       LED=0xfe;
 117   3       delay1s(); 
C51 COMPILER V7.06   YAOK2                                                                 07/06/2007 15:26:22 PAGE 3   

 118   3       LED=0xfb;
 119   3       delay1s(); 
 120   3       LED=0xef;
 121   3       delay1s();
 122   3       LED=0xdf;
 123   3       delay1s();
 124   3       }while(1);
 125   2      LED=0x00;
 126   2      DT = 1;
 127   2      //这里添加代码
 128   2      break;
 129   2      case 0x07: //系统设定键
 130   2      LED=0x00;
 131   2      DT = 1;
 132   2      //这里添加代码
 133   2      break;
 134   2      case  0x18:
 135   2      LED=0xff;
 136   2      DT=1;
 137   2      break;
 138   2      }
 139   1      EA = 1; //开外中断
 140   1      //return;
 141   1      
 142   1      }
 143          /**********************************************************
 144          *延时400us
 145          **********************************************************/
 146          void Delay400us() //晶振=12MHz 延时时间=404us
 147          { //晶振=11.0592MHz 延时时间≈438us
 148   1      unsigned char i,j; //总的延时时间=[(2*i)+1]*j+1+1
 149   1      for (j=2;j>0;j--)
 150   1      for (i=100;i>0;i--);
 151   1      }
 152          void delay1s()
 153          {
 154   1      unsigned int  b;
 155   1      for (b=6000;b>0;b--) //循环检测10次,低电平引导信号干扰检测(2700ms)
 156   1      {
 157   2      Delay400us(); //延时438us
 158   2      }
 159   1      }
 160           
 161          /**********************************************************
 162          *音效子程序
 163          **********************************************************/
 164          void Sound()
 165          {
 166   1      unsigned char k;
 167   1      for (k=100;k>0;k--)
 168   1      {
 169   2      Beep=~Beep;
 170   2      Delay400us();
 171   2      }
 172   1      }
 173          void Delay(unsigned char a)//延时函数
 174          {
 175   1              unsigned char i;
 176   1              while( --a != 0)
 177   1              {
 178   2                      for(i = 0; i < 125; i++);
 179   2              }
C51 COMPILER V7.06   YAOK2                                                                 07/06/2007 15:26:22 PAGE 4   

 180   1      }
 181          void main(void)
 182          {
 183   1              unsigned int de;
 184   1      
 185   1              //TMOD = 0x01; //定时器0方式1
 186   1              EA = 1;      //允许CPU中断
 187   1              IT0 = 1;     //INT0下降沿有效
 188   1              EX0 = 1;     //开INT0中断
 189   1      
 190   1              P1 =  0xff;
 191   1              do
 192   1              {
 193   2                              
 194   2                      if(K2 == 0)//判断K2是否被按下
 195   2                      {
 196   3                              Delay(10);//延时10MS
 197   3                              if(K2 == 0)//再次确定K2是否被按下
 198   3                              {
 199   4                                      LED = 0xfe; //p1.3的LED被点亮
 200   4                                      while(K2 == 0);//等待肯定K2的松开
 201   4                                      LED = 0xff; //关闭P13的LED
 202   4                              }
 203   3                      }
 204   2                      if(K3 == 0)
 205   2                      {
 206   3                              Delay(10);
 207   3                              if(K3 == 0)
 208   3                              {
 209   4                                      LED = 0xFB; 
 210   4                                      while(K3 == 0);
 211   4                                      LED = 0xff;
 212   4                              }
 213   3                      }
 214   2                      if(K4 == 0)
 215   2                      {
 216   3                              Delay(10);
 217   3                              if(K4 == 0)
 218   3                              {
 219   4                                      LED = 0xef; 
 220   4                                      while(K4 == 0);
 221   4                                      LED = 0xff;
 222   4                              }
 223   3                      }
 224   2                      if(K5 == 0)
 225   2                      {
 226   3                              Delay(10);
 227   3                              if(K5 == 0)
 228   3                              {
 229   4                                      LED = 0xdf; 
 230   4                                      while(K5 == 0);
 231   4                                      LED = 0xff;
 232   4                              }
 233   3                      }
 234   2              
 235   2                      for (de=0; de<8000; de++)
 236   2                              Led = 1;     //LED点亮
 237   2                      for (de=0; de<8000; de++)
 238   2                              Led = 0;     //LED熄灭
 239   2                      if (DT)
 240   2                      {
 241   3                              EX0=0;  //关闭外中断
C51 COMPILER V7.06   YAOK2                                                                 07/06/2007 15:26:22 PAGE 5   

 242   3                              for (de=0; de<30000; de++) //这里起到按键值正确后会有一个延时,防止重复按键
 243   3                                      Led = 1;
 244   3                              for (de=0; de<30000; de++)
 245   3                                      Led = 0;
 246   3      
 247   3                              DT = 0;
 248   3                      }
 249   2                      EX0 = 1;
 250   2              }while(1);
 251   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    487    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       6
   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 + -