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

📄 gsm-

📁 GSM室温监控系统
💻
字号:
C51 COMPILER V7.06   RED                                                                   06/13/2010 15:40:37 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE RED
OBJECT MODULE PLACED IN red.OBJ
COMPILER INVOKED BY: E:\WorkSpace\Keil\C51\BIN\C51.EXE red.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*********************************************
   2                          Writed By XianQiYuan
   3                                  2009.11.5
   4                  小毛@SCUT Electronic Engineering
   5          *********************************************/
   6          #ifndef _RED_INCLUDED_
   7          #define _RED_INCLUDE
   8          #include "common.h"
   9          sbit RDATA=P3^2;        //红外接口
  10          uchar key=255;          //红外摇控的键值,无键按下时为255
  11          
  12          uchar redchange(uchar rednum);
  13          
  14          //红外初始化
  15          void Red_Init(void)
  16          {
  17   1              RDATA=1;                //P3^2输出高电平        
  18   1              EX0=1;                  //开启红外中断 P3^2
  19   1      }
  20          
  21          //检测脉冲宽度
  22          uchar check(void)
  23          {
  24   1          uchar t=0;uchar a=0;
  25   1          while(RDATA)
  26   1          {
  27   2              t++;
  28   2                      for(a=0;a<4;a++);       //
  29   2              if(t==250)return t; //超时溢出
  30   2          }
  31   1          return t;
  32   1      }     
  33          /*-------------------------协议--------------------------
  34          开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
  35          接着是26位前导脉冲,用于识别该型号的摇控。
  36          然后是发送8位数据的原码,接着又发送8位数据的反码.
  37          最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。
  38          每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别
  39          8位原码就可以识别按键了
  40          ---------------------------------------------------------*/
  41          /****** 外部中断0服务程序,按键处理 ******/
  42          void exter0() interrupt 0       
  43          { 
  44   1          uchar res=0; uint aa=0;           
  45   1          bit OK=0; 
  46   1          bit RODATA=0; 
  47   1          while(1)
  48   1          {        
  49   2              if(RDATA)//有高脉冲出现
  50   2              {
  51   3                  res=check();//获得此次高脉冲宽度     
  52   3                  if(res==250)break;//非有用信号
  53   3                  if(res>=200&&res<250)OK=1; //获得前导位(4.5ms) 
  54   3                  
  55   3                  else if(res>=70&&res<100)  //如果是宽脉冲,则RODATA=1
C51 COMPILER V7.06   RED                                                                   06/13/2010 15:40:37 PAGE 2   

  56   3                  {
  57   4                      aa++;
  58   4                      RODATA=1;//1.5ms                
  59   4                  }
  60   3                  else if(res>=10&&res<50)  //如果是窄脉冲,则RODATA=0      
  61   3                  {
  62   4                      aa++;
  63   4                      RODATA=0;//500us              
  64   4                  }
  65   3                  //舍去26位前导脉冲,从第27位开始接着的8位是数据的正码,再后8位是反码
  66   3                  //获取正码
  67   3                  if(OK&&(aa>=27)&&(aa<35))
  68   3                  {
  69   4                      key<<=1;
  70   4                      key=key+(uchar)RODATA;
  71   4                  } 
  72   3                  if(aa==42) 
  73   3                  {
  74   4                      key=redchange(key);
  75   4                  } 
  76   3      
  77   3              }    
  78   2          } 
  79   1      }  
  80          //经测试:KD-29的全部解码如下(正码)
  81          //静音:104   电源:72   数字1:128   数字2:64
  82          //数字3:192   数字4:32   数字5:160  数字6:96
  83          //数字7:224   数字8:16  数字9:144
  84          //-/--:80    数字0:0    交替:88
  85          //SLEEP:56   S.SYS:248   CALL:216
  86          //P.P:152    TV/AV:208
  87          //上:200    下:232    左:40     右:8
  88          //MENU:24  SCAN:240   GAME:48
  89            
  90          //把红外数据进行转换
  91          uchar redchange(uchar rednum)
  92          {
  93   1          switch(rednum)
  94   1          {
  95   2              case 0  :return 0;
  96   2              case 128:return 1;
  97   2              case 64 :return 2;
  98   2              case 192:return 3;
  99   2              case 32 :return 4;
 100   2                      case 160:return 5;
 101   2              case 96 :return 6;
 102   2              case 224:return 7;
 103   2              case 16 :return 8;
 104   2              case 144:return 9;
 105   2              case 200:return 10;//上
 106   2              case 232:return 11;//下
 107   2              case 40 :return 12;//左
 108   2              case 8  :return 13;//右
 109   2              case 24 :return 14;//MENU 
 110   2              case 104:return 15;//静音  
 111   2              case 80 :return 16;//-/--  
 112   2              case 208:return 17;//TV/AV  
 113   2              case 240:return 18;
 114   2          }
 115   1      }      
 116          
 117          #endif                  
C51 COMPILER V7.06   RED                                                                   06/13/2010 15:40:37 PAGE 3   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    348    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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