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

📄 datainput.lst

📁 51系列单片机上实现PC键盘的识别
💻 LST
字号:
C51 COMPILER V7.06   DATAINPUT                                                             07/31/2007 21:14:25 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DATAINPUT
OBJECT MODULE PLACED IN datainput.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pc_keyboard\datainput.c BROWSE DEBUG OBJECTEXTEND PRINT(.\datainput.lst) OB
                    -JECT(datainput.obj)

stmt level    source

   1          ////////////////////////////////////////////////////////////////////////
   2          //  键盘识别源文件
   3          //  功能:将获得的键盘扫描码放到全局变量的InputData中
   4          
   5          #include "at89x52.h"
   6          #include "common.h"
   7          #include "dataInput.h"
   8          #include "display/display.h"
   9          
  10          ///////////////////////////////////////////////////////////////////////
  11          //    如果需要PC键盘模块
  12          
  13          #ifdef NEED_PC_KEYBORD
  14          
  15          ////////////////////////////////////////////////////////////////////////
  16          unsigned char Buffer[11];   //接受数据缓冲区   
  17          unsigned char InputDataBuffer=0x00; //实际数据暂存区,用于组装数据时候
  18          unsigned char DataBitPtr=0x00;  //接受数据位指针 
  19          BOOL gSymboleE0=0x00;
  20          BOOL SymboleF0=0x00;
  21          
  22          //////////////////////////////////////////////////////////////////////////
  23          //  数据校验
  24          //  校验正确返回1
  25          //  否则返回0
  26          BOOL CheckData(void)
  27          {
  28   1          ACC=InputDataBuffer;
  29   1          if(~P==Buffer[9])   //检测累加器中1的个数
  30   1          {
  31   2              return TRUE;
  32   2          }
  33   1          else
  34   1          {
  35   2              return FALSE;
  36   2          }
  37   1      }
  38          
  39          ////////////////////////////////////////////////////////////////////////
  40          //  组合数据 
  41          //  参数:无
  42          //  返回值:无
  43          //  功能:将缓冲区中数据组合成unsigned char型数据并且调用ExchangeCode()函数
  44          //  为显示作准备
  45          void CombinData(void)
  46          {
  47   1          unsigned char lInputData=0x00;
  48   1          unsigned char CircleTemp;   //移位循环变量
  49   1          InputDataBuffer=0;          //数据暂存区
  50   1      
  51   1          ////////////////////////////////////////////////////////////////////
  52   1          //  通过移位的方法将数据进行整合
  53   1          for(CircleTemp=0x00;CircleTemp<0x08;CircleTemp++)
  54   1          {
C51 COMPILER V7.06   DATAINPUT                                                             07/31/2007 21:14:25 PAGE 2   

  55   2              InputDataBuffer=InputDataBuffer+(Buffer[CircleTemp+1]<<CircleTemp);
  56   2          }
  57   1          ///////////////////////////////////////////////////////////////////
  58   1          //    数据写入显示缓冲区
  59   1          if(CheckData())
  60   1          { 
  61   2              if(InputDataBuffer!=0xE0&&InputDataBuffer!=0xF0)
  62   2              {
  63   3                  lInputData=InputDataBuffer;
  64   3                  Print(lInputData);
  65   3              }
  66   2      
  67   2              if(InputDataBuffer==0xE0)
  68   2              {           
  69   3                  gSymboleE0=1;
  70   3                  return;
  71   3               }
  72   2      
  73   2              if(gSymboleE0==1&&lInputData==0xF0)
  74   2              {
  75   3                  SymboleF0=1;
  76   3                  return;
  77   3              }
  78   2              else if(gSymboleE0==1&&SymboleF0==1)
  79   2              {
  80   3                  lInputData=InputDataBuffer;  //数据接受
  81   3                  Print(lInputData);
  82   3                  gSymboleE0=0;
  83   3                  SymboleF0=0;
  84   3                  return;
  85   3              }
  86   2              else if(gSymboleE0==1&&SymboleF0==0)
  87   2              {
  88   3                  lInputData=InputDataBuffer;  //数据接受
  89   3                  Print(lInputData);             
  90   3              }        
  91   2          }
  92   1          else
  93   1          {
  94   2              return ;
  95   2          }
  96   1      }
  97          
  98          /////////////////////////////////////////////////////////////////////////
  99          //  接受数据中断服务函数
 100          //  通过外部跳变电平引发外部中断
 101          //  接受数据线上的数据,放数据接收完成后组装数据
 102          
 103          void RecData(void) interrupt 0
 104          {
 105   1      
 106   1          Buffer[DataBitPtr]=DataLine;
 107   1          DataBitPtr++;
 108   1          if(DataBitPtr==11)
 109   1          {
 110   2              CombinData();              //组装数据
 111   2              DataBitPtr=0;              //复位数据指针
 112   2          }
 113   1      } 
 114          
 115          
 116          ///////////////////////////////////////////////////////////////////////////////////
C51 COMPILER V7.06   DATAINPUT                                                             07/31/2007 21:14:25 PAGE 3   

 117          //    文件结束
 118          #endif         


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