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

📄 key.lst

📁 51单片机PC键盘LCD1602显示程序。
💻 LST
字号:
C51 COMPILER V8.02   KEY                                                                   04/12/2007 10:04:26 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 <Reg52.h>
   2          #include <intrins.h>   //_nop_();
   3          #include <stdio.h>
   4          #define uchar unsigned char
   5          #define uint  unsigned int
   6          #define ulong unsigned long
   7          #define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
   8          
   9          
  10          sbit Key_Data =P3^2; //定义Keyboard引脚
  11          sbit Key_CLK=  P3^3;
  12          
  13          void Delay5Ms(void);
  14          void Delay400Ms(void);
  15          void Decode(unsigned char ScanCode);
  16          void Keyboard_out(void);
  17          unsigned char code cdle_net[] = {"www.newmcu.com"};
  18          unsigned char code email[] = {"zsdfwnl@163.com"};
  19          unsigned char code Cls[] = {" "};
  20          static unsigned char IntNum = 0; //中断次数计数
  21          static unsigned char KeyV; //键值
  22          static unsigned char DisNum = 0; //显示用指针
  23          static unsigned char Key_UP=0, Shift = 0;//Key_UP是键松开标识,Shift是Shift键按下标识
  24          static unsigned char BF = 0; //标识是否有字符被收到
  25          unsigned char code UnShifted[59][2] = {
  26          0x1C, 'a',
  27          0x32, 'b',
  28          0x21, 'c',
  29          0x23, 'd',
  30          0x24, 'e',
  31          0x2B, 'f',
  32          0x34, 'g',
  33          0x33, 'h',
  34          0x43, 'i',
  35          0x3B, 'j',
  36          0x42, 'k',
  37          0x4B, 'l',
  38          0x3A, 'm',
  39          0x31, 'n',
  40          0x44, 'o',
  41          0x4D, 'p',
  42          0x15, 'q',
  43          0x2D, 'r',
  44          0x1B, 's',
  45          0x2C, 't',
  46          0x3C, 'u',
  47          0x2A, 'v',
  48          0x1D, 'w',
  49          0x22, 'x',
  50          0x35, 'y',
  51          0x1A, 'z',
  52          0x45, '0',
  53          0x16, '1',
  54          0x1E, '2',
  55          0x26, '3',
C51 COMPILER V8.02   KEY                                                                   04/12/2007 10:04:26 PAGE 2   

  56          0x25, '4',
  57          0x2E, '5',
  58          0x36, '6',
  59          0x3D, '7',
  60          0x3E, '8',
  61          0x46, '9',
  62          0x0E, '`',
  63          0x4E, '-',
  64          0x55, '=',
  65          0x5D, '\\',
  66          0x29, ' ',
  67          0x54, '[',
  68          0x5B, ']',
  69          0x4C, ';',
  70          0x52, '\'',
  71          0x41, ',',
  72          0x49, '.',
  73          0x4A, '/',
  74          0x71, '.',
  75          0x70, '0',
  76          0x69, '1',
  77          0x72, '2',
  78          0x7A, '3',
  79          0x6B, '4',
  80          0x73, '5',
  81          0x74, '6',
  82          0x6C, '7',
  83          0x75, '8',
  84          0x7D, '9',
  85          };
  86          
  87          unsigned char code Shifted[59][2] = {
  88          0x1C, 'A',
  89          0x32, 'B',
  90          0x21, 'C',
  91          0x23, 'D',
  92          0x24, 'E',
  93          0x2B, 'F',
  94          0x34, 'G',
  95          0x33, 'H',
  96          0x43, 'I',
  97          0x3B, 'J',
  98          0x42, 'K',
  99          0x4B, 'L',
 100          0x3A, 'M',
 101          0x31, 'N',
 102          0x44, 'O',
 103          0x4D, 'P',
 104          0x15, 'Q',
 105          0x2D, 'R',
 106          0x1B, 'S',
 107          0x2C, 'T',
 108          0x3C, 'U',
 109          0x2A, 'V',
 110          0x1D, 'W',
 111          0x22, 'X',
 112          0x35, 'Y',
 113          0x1A, 'Z',
 114          0x45, '0',
 115          0x16, '1',
 116          0x1E, '2',
 117          0x26, '3',
C51 COMPILER V8.02   KEY                                                                   04/12/2007 10:04:26 PAGE 3   

 118          0x25, '4',
 119          0x2E, '5',
 120          0x36, '6',
 121          0x3D, '7',
 122          0x3E, '8',
 123          0x46, '9',
 124          0x0E, '~',
 125          0x4E, '_',
 126          0x55, '+',
 127          0x5D, '|',
 128          0x29, ' ',
 129          0x54, '{',
 130          0x5B, '}',
 131          0x4C, ':',
 132          0x52, '"',
 133          0x41, '<',
 134          0x49, '>',
 135          0x4A, '?',
 136          0x71, '.',
 137          0x70, '0',
 138          0x69, '1',
 139          0x72, '2',
 140          0x7A, '3',
 141          0x6B, '4',
 142          0x73, '5',
 143          0x74, '6',
 144          0x6C, '7',
 145          0x75, '8',
 146          0x7D, '9',
 147          };
 148          
 149           
 150          
 151          void main(void)
 152          {
 153   1      Delay400Ms(); //启动等待,等LCM讲入工作状态
 154   1      
 155   1      IT1 = 0; //设外部中断1为低电平触发
 156   1      EA = 1;
 157   1      EX1 = 1; //开中断
 158   1      
 159   1      do
 160   1      {
 161   2      if (BF)
 162   2      Decode(KeyV);
 163   2      else
 164   2      EA = 1; //开中断
 165   2      }
 166   1      while(1);
 167   1      }
 168          
 169          //5ms延时
 170          void Delay5Ms(void)
 171          {
 172   1      unsigned int TempCyc = 5552;
 173   1      while(TempCyc--);
 174   1      }
 175          
 176          //400ms延时
 177          void Delay400Ms(void)
 178          {
 179   1      unsigned char TempCycA = 5;
C51 COMPILER V8.02   KEY                                                                   04/12/2007 10:04:26 PAGE 4   

 180   1      unsigned int TempCycB;
 181   1      while(TempCycA--)
 182   1      {
 183   2      TempCycB=7269;
 184   2      while(TempCycB--);
 185   2      };
 186   1      }
 187          
 188          void Keyboard_out(void) interrupt 2
 189          {
 190   1      if ((IntNum > 0) && (IntNum < 9))
 191   1      { 
 192   2      KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
 193   2      if (Key_Data) KeyV = KeyV | 0x80; //当键盘数据线为1时为1到最高位
 194   2      }
 195   1      IntNum++;
 196   1      while (!Key_CLK); //等待PS/2CLK拉高
 197   1      
 198   1      if (IntNum > 10)
 199   1      {
 200   2      IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
 201   2      BF = 1; //标识有字符输入完了
 202   2      EA = 0; //关中断等显示完后再开中断 (注:如这里不用BF和关中断直接调Decode()则所Decode中所调用的所有函数要声
             -明为再入函数)
 203   2      }
 204   1      }
 205          
 206          void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码
             -+shift的断码+G的断码
 207          {
 208   1      unsigned char TempCyc; 
 209   1      
 210   1      if (!Key_UP) //当键盘松开时
 211   1      {
 212   2      switch (ScanCode)
 213   2      {
 214   3      case 0xF0 : // 当收到0xF0,Key_UP置1表示断码开始
 215   3      Key_UP = 1;
 216   3      break;
 217   3      
 218   3      case 0x12 : // 左 SHIFT
 219   3      Shift = 1;
 220   3      break;
 221   3      
 222   3      case 0x59 : // 右 SHIFT
 223   3      Shift = 1;
 224   3      break;
 225   3      
 226   3      default: 
 227   3      if (DisNum > 15)
 228   3      {
 229   4      //DisplayListChar(0, 1, Cls);//清LCD第二行
 230   4      DisNum = 0; 
 231   4      }
 232   3      if(!Shift) //如果SHIFT没按下
 233   3      {
 234   4      for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
 235   4      //if (UnShifted[TempCyc][0] == ScanCode) DisplayOneChar(DisNum, 1, UnShifted[TempCyc][1]);
 236   4      DisNum++;
 237   4      } 
 238   3      else //按下SHIFT
 239   3      {
C51 COMPILER V8.02   KEY                                                                   04/12/2007 10:04:26 PAGE 5   

 240   4      for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
 241   4      //if (Shifted[TempCyc][0] == ScanCode) DisplayOneChar(DisNum, 1, Shifted[TempCyc][1]);
 242   4      DisNum++;
 243   4      }
 244   3      
 245   3      break;
 246   3      }
 247   2      }
 248   1      else
 249   1      { 
 250   2      Key_UP = 0;
 251   2      switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
 252   2      {
 253   3      case 0x12 : // 左 SHIFT
 254   3      Shift = 0;
 255   3      break;
 256   3      
 257   3      case 0x59 : // 右 SHIFT
 258   3      Shift = 0;
 259   3      break;
 260   3      }
 261   2      }
 262   1      BF = 0; //标识字符处理完了
 263   1      } 
 264          


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