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

📄 int.lst

📁 嵌入式键盘
💻 LST
字号:
C51 COMPILER V7.50   INT                                                                   02/06/2009 10:34:28 PAGE 1   


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

line level    source

   1          #include <at89s52.h>
   2          #include <stdio.h>
   3          #include <per.h>
   4          #include <intrins.h>
   5          
   6          extern unsigned char MS[BUFFNUM+1];//
   7          //extern bit receive_flag;
   8          //extern bit first_receive_b;
   9          //extern bit receive_time_begin_b;
  10          //extern unsigned char receive_time;
  11          //extern unsigned char interrupt_times;
  12          //unsigned char px,sum_temp;
  13          //extern bit send_flag;
  14          extern bit SomeKeyEnableFlag,SomeKeyKeepFlag;
  15          extern unsigned char SomeKeyKeepTime;
  16          extern bit ReadKeyOnceFlag;
  17          
  18          extern unsigned char DatTemp1,DatTemp2,DatTemp11,DatTemp22;
  19          unsigned int time;
  20          extern unsigned char KeyWobbleTime;
  21          extern bit   NewKeyFlag;
  22          extern unsigned char makecode;
  23          extern unsigned char KeyT;
  24          extern unsigned int testtime;
  25          
  26          void INT_S(void)  interrupt S_VECTOR
  27           {
  28   1      //设计思想:当接收第一个数据时,判断是否是本机的地址数据,如果不是,SM2=1,因主机后来数据的TB8=0,数据再不会接
             -收,除非主机发送新的一桢;//
  29   1      //如果是本机地址,SM2=0,开始计时,保证6ms内把数据接收完,否则接受数据全部清除//
  30   1         unsigned char dat_temp;
  31   1         if(RI)
  32   1           {
  33   2                RI=0;
  34   2                dat_temp=SBUF;
  35   2               }
  36   1              else if(TI)
  37   1               {
  38   2                 TI=0;
  39   2                }
  40   1       }
  41          void INT_TO()interrupt TI0_VECTOR//1ms interrupt 
  42          {
  43   1        TL0=T0_L;
  44   1        TH0=T0_H;
  45   1        if(KeyT>0)
  46   1          KeyT--;
  47   1       // if(testtime>0)
  48   1       //   testtime--;
  49   1      //===============键盘扫描
  50   1        if(KeyT==0)
  51   1         {
  52   2        if(!ReadKeyOnceFlag)
  53   2          { 
  54   3                P1|=0x3f;//P10,P11,P12,P13,P14,P15口线置高
C51 COMPILER V7.50   INT                                                                   02/06/2009 10:34:28 PAGE 2   

  55   3                P2=0;//P2口拉低
  56   3                DatTemp11=P1&0x3f;//读取P10,P11,P12,P13,P14,P15口状态
  57   3                //if(DatTemp11==0x3f)
  58   3                //   NewKeyFlag=0;//取消上次按键标志
  59   3                P2=0xff;//把P2口拉高
  60   3                P1&=0xc0;//P10,P11,P12,P13,P14,P15口线拉低
  61   3                    DatTemp22=P2;//读取P2口状态
  62   3                //if(DatTemp22==0xff)
  63   3                //   NewKeyFlag=0;//取消上次按键标志
  64   3                P1|=0x3f;//P10,P11,P12,P13,P14,P15口线置高
  65   3                //20ms去抖动处理
  66   3                if((DatTemp1==DatTemp11)&&(DatTemp2==DatTemp22))
  67   3                  {//两次读取的值相同
  68   4                                if(KeyWobbleTime<30)
  69   4                         KeyWobbleTime++;
  70   4                    if((!NewKeyFlag)&&(KeyWobbleTime>=20))//20ms
  71   4                      {
  72   5                         ReadKeyOnceFlag=1;//建立一次成功读取开关标志
  73   5                         NewKeyFlag=1;//本次按键标志
  74   5                      }
  75   4                  }
  76   3                else
  77   3                  {//两次读取的值不同,可能是抖动,也可能是新的按键出现
  78   4                     DatTemp1=DatTemp11;
  79   4                     DatTemp2=DatTemp22;
  80   4                     KeyWobbleTime=0;//重新开始抖动计时
  81   4                                 NewKeyFlag=0;//取消上次按键标志
  82   4                  }
  83   3          }
  84   2          }
  85   1      }
  86          void INT_T1()interrupt TI1_VECTOR//20ms interrupt 
  87          {
  88   1        TL1=T1_L;
  89   1        TH1=T1_H;
  90   1        if(SomeKeyKeepFlag)
  91   1         {
  92   2           SomeKeyKeepTime++;
  93   2         }
  94   1      }
  95          


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