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

📄 ps2keybord.lst

📁 芯片at89s52
💻 LST
字号:
C51 COMPILER V8.05a   PS2KEYBORD                                                           08/02/2007 16:30:54 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE PS2KEYBORD
OBJECT MODULE PLACED IN PS2KeyBord.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE PS2KeyBord\PS2KeyBord.c BROWSE DEBUG OBJECTEXTEND PRINT(.\PS2
                    -KeyBord.lst) OBJECT(PS2KeyBord.obj)

line level    source

   1          /******************************************************************************
   2           * File   Name: PS2KeyBord.c                                                                                              *
   3           * Create Time: 2007/07/30                                                                                                        *
   4           * Description:                                                                                                                           *
   5           * Copyright  :                                                                                                                           *
   6           * History    :                                                                                                                           *
   7           * |---Data---|---Author---|--Version--|--------------Description-------------|
   8           *****************************************************************************/
   9            #define PSKEYBORD_ONOFF
  10            #ifdef PSKEYBORD_ONOFF
  11          /******************************
  12           *      Head File             *
  13           *****************************/
  14           #include"PS2KeyBord.h"
  15          /******************************
  16           *     Global Variable        *
  17           *****************************/
  18           uchar g_ucPSkeydata = 0x00; //按下键的通码值  
  19           uchar ucRecBuf_ptr=0x00;        //键盘按下键数据的缓冲区指针
  20           uchar ucRecBuf[11];             //从键盘接收数据的缓冲区
  21           uchar cntOddNum = 0x00;// 奇校验中‘1’的个数
  22          /******************************
  23           *      Function  Implement       *
  24           *****************************/
  25              
  26          /*******************************************************************************
  27          Function Name:  数据接收函数                                                                                               *
  28          Input  Parameter :                                                                                                                         *
  29          Output Parameter :                                                                                                                         *
  30          Function Description :  接收从键盘输入的11位数据                                                           *
  31          *******************************************************************************/
  32          void DataReceive(void)
  33          {       
  34   1              if(ucRecBuf_ptr<=0x0a)
  35   1              {       
  36   2                 if(P3_2 == 0)           
  37   2                 {ucRecBuf[ucRecBuf_ptr] = P3_7; 
  38   3                 ucRecBuf_ptr++; }
  39   2                 else return; 
  40   2              }
  41   1              else
  42   1              {
  43   2                      GetData();      
  44   2                      ucRecBuf_ptr = 0x00;
  45   2              }               
  46   1        
  47   1      } 
  48          /*******************************************************************************
  49          Function Name:  奇校验函数                                                                                                 *
  50          Input  Parameter :                                                                                                                         *
  51          Output Parameter :                                                                                                                         *
  52          Function Description :  对收到的数据进行校验和检验,防止数据出错                           *
  53          *******************************************************************************/
  54          uchar oddCheck(void)
C51 COMPILER V8.05a   PS2KEYBORD                                                           08/02/2007 16:30:54 PAGE 2   

  55          {
  56   1              uchar tmp;
  57   1              for(tmp=0;tmp<9;tmp++)
  58   1              {
  59   2                      if(ucRecBuf[tmp+1]==0x01)
  60   2                              cntOddNum++;
  61   2              }
  62   1              if(cntOddNum%2 == 1)
  63   1                      return TURE;
  64   1              else return FALSE;
  65   1      }
  66          /*******************************************************************************
  67          Function Name:  返回通码值函数                                                                                             *
  68          Input  Parameter :                                                                                                                         *
  69          Output Parameter :                                                                                                                         *
  70          Function Description :  通过函数得到键盘按下的键的通码值                                           *
  71          *******************************************************************************/
  72          uchar PSkeydata_value(void)
  73          {
  74   1              return g_ucPSkeydata;
  75   1      } 
  76          /*******************************************************************************
  77          Function Name:  通码拾取函数                                                                                               *
  78          Input  Parameter :                                                                                                                         *
  79          Output Parameter :                                                                                                                         *
  80          Function Description :  从接收的11位数据中抽取出8位通码                                            *
  81          *******************************************************************************/
  82          void GetData(void)
  83          {       
  84   1              uchar tmp,tmp2;
  85   1              if(oddCheck())
  86   1              {
  87   2                      tmp2 = g_ucPSkeydata;
  88   2                      g_ucPSkeydata = 0x00;
  89   2                      for(tmp=0;tmp<0x08;tmp++)
  90   2                      {  
  91   3                              g_ucPSkeydata |= ucRecBuf[tmp+1]<<tmp;          
  92   3                      }
  93   2                      if(g_ucPSkeydata == 0xf0)
  94   2                              g_ucPSkeydata = tmp2;           
  95   2              }       
  96   1      }
  97          /*******************************************************************************
  98          Function Name:  PS键盘中断0初始化函数                                                                              *
  99          Input  Parameter :                                                                                                                         *
 100          Output Parameter :                                                                                                                         *
 101          Function Description :  从接收的11位数据中抽取出8位通码                                            *
 102          *******************************************************************************/
 103          void Int0_init_PSkeybord(void)
 104          {
 105   1              TMOD = 0x01; //选择定时/计数器0,做定时器用,选择模式1,THx和TLx构成全16位计数器
 106   1              TL0 = 0x00;     //定时器中断时间为2.5ms
 107   1              TH0 = 0xee; //65536 - 0.0025/(12/22118400)=X,反解求出
 108   1              TR0 = 0x01;     //开启定时器0
 109   1              IE = 0x83;      //允许全局中断,允许定时器/计数器0溢出中断
 110   1              PT1 = 0x00;
 111   1              PX0 = 0x01;
 112   1      }
 113          
 114           #endif
 115          /*******************************************************************************
 116           *                        The end of the entire file                                   *
C51 COMPILER V8.05a   PS2KEYBORD                                                           08/02/2007 16:30:54 PAGE 3   

 117           ******************************************************************************/


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