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

📄 key.lst

📁 用51单片机模拟PS2接口。可以接PS2口的键盘。做外接键盘时很有用
💻 LST
字号:
C51 COMPILER V8.02   KEY                                                                   04/19/2007 11:19:16 PAGE 1   


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

line level    source

   1          #include<reg51.h>
   2          #define WAITFORKEYBOARDPULSE  while(!scl); while(scl);
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          #define DE 0x40
   6          #define PDATA P0
   7          
   8          uchar read_key (void);
   9          //sbit led = P1^2;
  10          sbit scl = P1^0;
  11          sbit sda = P1^1;
  12          void setkey(uchar row,uchar col);
  13          
  14          uchar te;
  15          void Delay(unsigned int MS)
  16          {
  17   1           unsigned char us,usn;
  18   1           while(MS!=0)            //for 12M
  19   1                 { usn = 2;
  20   2                       while(usn!=0)
  21   2                             {
  22   3                                   us=0xf5;
  23   3                                   while (us!=0){us--;};
  24   3                                   usn--;
  25   3                             }
  26   2                       MS--;
  27   2                 }
  28   1      }
  29          main ()
  30          { 
  31   1              Delay(250);
  32   1      //      setkey(1,3);
  33   1              while(1)
  34   1          {
  35   2               switch(read_key())
  36   2               {
  37   3                      case 0x69: //1
  38   3                              setkey(0,0);
  39   3                              while(read_key()==0x69 || read_key()==0xF0);
  40   3                              break;
  41   3                      case 0x72: //2
  42   3                              setkey(0,1);
  43   3                              while(read_key()==0x72 || read_key()==0xF0);
  44   3                              break;
  45   3                      case 0x7A: //3
  46   3                              setkey(0,2);
  47   3                              while(read_key()==0x7A || read_key()==0xF0);
  48   3                              break;
  49   3                      case 0x6B: //4
  50   3                              setkey(1,0);
  51   3                              while(read_key()==0x6B || read_key()==0xF0);
  52   3                              break;
  53   3                      case 0x73: //5
  54   3                              setkey(1,1);
  55   3                              while(read_key()==0x73 || read_key()==0xF0);
C51 COMPILER V8.02   KEY                                                                   04/19/2007 11:19:16 PAGE 2   

  56   3                              break;
  57   3                      case 0x74: //6
  58   3                              setkey(1,2);
  59   3                              while(read_key()==0x74 || read_key()==0xF0);
  60   3                              break;
  61   3                      case 0x6C: //7
  62   3                              setkey(2,0);
  63   3                              while(read_key()==0x6C || read_key()==0xF0);
  64   3                              break;
  65   3                      case 0x75: //8
  66   3                              setkey(2,1);
  67   3                              while(read_key()==0x75 || read_key()==0xF0);
  68   3                              break;
  69   3                      case 0x7D: //9
  70   3                              setkey(2,2);
  71   3                              while(read_key()==0x7D || read_key()==0xF0);
  72   3                              break;
  73   3                      case 0x70: //0
  74   3                              setkey(3,0);
  75   3                              while(read_key()==0x70 || read_key()==0xF0);
  76   3                              break;
  77   3                      case 0x71: //.
  78   3                              setkey(3,1);
  79   3                              while(read_key()==0x71 || read_key()==0xF0);
  80   3                              break;
  81   3      
  82   3                      case 0x06: //设置  F2
  83   3                              setkey(0,3);
  84   3                              while(read_key()==0x06 || read_key()==0xF0);
  85   3                              break;
  86   3                      case 0x05: //F1
  87   3                              setkey(1,3);
  88   3                              while(read_key()==0x05 || read_key()==0xF0);
  89   3                              break;
  90   3                      case 0x79: //X 小+
  91   3                              setkey(2,3);
  92   3                              while(read_key()==0x79 || read_key()==0xF0);
  93   3                              break;
  94   3                      case 0xE0: //确认 小回车
  95   3                              if(read_key()==0x5A)
  96   3                              {
  97   4                              setkey(3,3);
  98   4                              while(read_key()==0xE0 || read_key()==0x5A);
  99   4                              }
 100   3                              break;
 101   3                      case 0x0C: //查询 F4
 102   3                              setkey(3,2);
 103   3                              while(read_key()==0x0C || read_key()==0xF0);
 104   3                              break;
 105   3                      case 0x5A: //结账 大回车
 106   3                              setkey(4,3);
 107   3                              while(read_key()==0x5A || read_key()==0xF0);
 108   3                              break;
 109   3                      case 0x76: //退出       ESC
 110   3                              setkey(4,0);
 111   3                              while(read_key()==0x76 || read_key()==0xF0);
 112   3                              break;
 113   3                      case 0x03: //总清       F5
 114   3                              setkey(4,1);
 115   3                              while(read_key()==0x03 || read_key()==0xF0);
 116   3                              break;
 117   3                      case 0x66: //清除       退格键
C51 COMPILER V8.02   KEY                                                                   04/19/2007 11:19:16 PAGE 3   

 118   3                              setkey(4,2);
 119   3                              while(read_key()==0x66 || read_key()==0xF0);
 120   3                              break;
 121   3      
 122   3               }
 123   2          }
 124   1      }
 125          
 126          void setkey(uchar row,uchar col)
 127          {
 128   1              uchar tmp;
 129   1              //led=0;
 130   1              tmp=row+(col<<3);
 131   1              tmp&=~DE;
 132   1              PDATA=tmp;
 133   1              Delay(58);
 134   1              tmp|=DE;
 135   1              PDATA=0xFF;
 136   1      //      led=1;          
 137   1      }
 138          uchar read_key (void)
 139          {
 140   1      uchar KeyCode;
 141   1      uchar Rbit;
 142   1      while(scl);                            // 等待键盘把时钟第一次拉低
 143   1      
 144   1         for(Rbit = 8; Rbit != 0; Rbit --)   // 把起始位算入
 145   1         {
 146   2          WAITFORKEYBOARDPULSE;              // 等待一个有效的下跳沿
 147   2          KeyCode  >>= 1;                    // 按照PS2格式,数据低位在前
 148   2          scl  = 1;
 149   2          sda  = 1;
 150   2          if(sda == 1)
 151   2               {
 152   3               KeyCode |= 0x80;                 // 得到有效的数据位
 153   3               }
 154   2          }
 155   1         WAITFORKEYBOARDPULSE;               // 等待按键发送效验位
 156   1         WAITFORKEYBOARDPULSE;               // 等待按键发送终止位
 157   1         while(!scl);                        // 等待键盘把时钟线拉高
 158   1      
 159   1         return(KeyCode);                    // 返回按键扫描
 160   1      }


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