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

📄 pt2221.lst

📁 有32个按键的红外键盘
💻 LST
字号:
C51 COMPILER V8.02   PT2221                                                                08/19/2007 14:42:31 PAGE 1   


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

line level    source

   1          /**********************************************************************************************
   2          name: PT2221 红外解码 C 程序
   3          device: 红外一体化接收头 + 89S51
   4          Copyright (c) 2007-2008 张兴电子设计工作室技术开发部
   5          author: 张兴
   6          web: http://bbsky.ttsite.com
   7          date: 2007.8.4--0:00
   8          description:    用c做延时的32路红外遥控解码程序,程序中提供了两种实现延时的方法:
   9                                          1. 加入 intrins.h 头文件后,用for循环和_nop_ 联合组成的精确延时;
  10                                          2. 用 while(--i); 实现的精确延时
  11          
  12                                          红外一体化接收头接P3.2 (INT0)
  13                                          P37作工作指示用,解码成功后P36闪烁一次,同时,若解码值为01的话,会取反P35
  14          edition:V1.0
  15          ***********************************************************************************************/
  16          #include<PT2221.h>
  17          //************************主程序***********************************
  18          void main (void)  
  19          {
  20   1              uint di;
  21   1              InitCom(); //初始化串口
  22   1              EA=1;
  23   1              EX0=1;                   // 设定接受INT0的中断
  24   1              IT0=1;
  25   1              ComOutChar(1);  //向串口发送 1 ,表示串口正常工作
  26   1              do
  27   1              {
  28   2                      P37=~P37;       //工作指示灯,这个LED闪烁表示主程序在运行
  29   2                      for(di=0;di<1000;di++)
  30   2                      {
  31   3                              delay1000us();
  32   3                      }
  33   2              }while(1);
  34   1      }
  35          //*******************外部中断0 红外解码程序****************************************
  36          static void decode(void) interrupt 0 using 2
  37          {
  38   1              unsigned char IRCode[4]={0,0,0,0};
  39   1              unsigned char count0,count1,count2;
  40   1              unsigned char m;
  41   1              EX0 = 0; //外部中断0关闭
  42   1              for(count0=0;count0<10;count0++)        //起始码前9ms的低电平
  43   1              {
  44   2                      delay882us();
  45   2                      if(P32) goto exit;      //9ms没完就出来高电平则为干扰信号,跳出中断(退出解码)
  46   2              }
  47   1              if(!P32)        //低电平没完
  48   1              {
  49   2                      delay4740us();  //9ms没结束再延时4740us,加上前面的8820us,已跳过起始码的13.5ms
  50   2                      for(count1=0;count1<4;count1++) //开始读数据,4个字节,32位
  51   2                      {
  52   3                              for(count2=0;count2<8;count2++) //每个字节8位
  53   3                              {
  54   4                                      while(!P32);    //等待高电平到来
  55   4                                      delay882us();
C51 COMPILER V8.02   PT2221                                                                08/19/2007 14:42:31 PAGE 2   

  56   4                                      if(P32) //延时882us后,若P32还是高电平,则为 位1
  57   4                                              {
  58   5                                                      IRCode[count1]=IRCode[count1]>>1;
  59   5                                                      IRCode[count1]=IRCode[count1]|0x80;
  60   5                                                      delay1000us();  //延时1000us,结束高电平
  61   5                                              }
  62   4                                      else    //延时882us后,若P32为低电平,则为 位0
  63   4                                      {
  64   5                                              IRCode[count1]=IRCode[count1]>>1;
  65   5                                              IRCode[count1]=IRCode[count1]|0x00;
  66   5                                      }
  67   4                              }
  68   3                      }       //到这里已读完所有32位数据
  69   2                      if ((IRCode[0]==0x00)&&(IRCode[1]==0xff))       //判断用户码和用户反码是否正确
  70   2                      {
  71   3                              if (IRCode[2]==~IRCode[3])      //数据校验
  72   3                              {
  73   4                                      //ComOutChar(IRCode[0]);
  74   4                                      //ComOutChar(IRCode[1]);
  75   4                                      ComOutChar(IRCode[2]);  //串口发送数据码
  76   4                                      //ComOutChar(IRCode[3]);
  77   4                                      P36=0;                                  //解码成功后led闪烁一次
  78   4                                      for(m=0;m<100;m++)
  79   4                                      {
  80   5                                              delay1000us();
  81   5                                      }
  82   4                                      P36=1;
  83   4                                      if(IRCode[2]==0x01)
  84   4                                      {
  85   5                                              P35=~P35;                       //这里可加入控制命令,比如这里的当解码为01时取反P35
  86   5                                              for(m=0;m<100;m++)
  87   5                                              {
  88   6                                                      delay1000us();
  89   6                                              }
  90   5                                      }
  91   4                              }
  92   3                      }
  93   2              }
  94   1      exit:
  95   1              EX0 = 1;        
  96   1      }
  97          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    259    ----
   CONSTANT SIZE    =      4    ----
   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 + -