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

📄 keyread.lst

📁 程序是基于STC89C58的点阵屏显示程序
💻 LST
字号:
C51 COMPILER V8.02   KEYREAD                                                               04/10/2008 10:43:46 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE KEYREAD
OBJECT MODULE PLACED IN .\xiazai\keyread.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE daima\keyread.c BROWSE DEBUG OBJECTEXTEND PRINT(.\keyread.lst) OBJECT(.\xia
                    -zai\keyread.obj)

line level    source

   1          #include"reg51.h"
   2          sbit KEY_CLK=P3^6;
   3          sbit KEY_DATA=P3^7;
   4          //PS2每次发送11个数据位分别为起始位+八个数据位+奇偶校验位+停止位
   5          bit keyread(unsigned char *keyborad);
   6          
   7          
   8          bit keyread(unsigned char *keyborad) 
   9          { 
  10   1        static unsigned char passnumber=0;
  11   1        xdata unsigned char key;
  12   1        xdata unsigned int wi=0;
  13   1        xdata unsigned char i=0;
  14   1        EA=0;          //每次扫描PS2协议时,都要关总中断允许位,PS2通信时不能被中断,否则会读错数据
  15   1        KEY_CLK=1;
  16   1         while(KEY_CLK){if(++wi>50) { KEY_CLK=0; EA=1;return(0);} }    //拉高时钟线,如果键盘有数据要发,要在50微秒
             -内拉低时钟线
  17   1         while(!KEY_CLK){if(++wi>500) { KEY_CLK=0;EA=1;return(0);}}    //跳过始位
  18   1       
  19   1         for(i=0;i<10;i++)
  20   1         { while(KEY_CLK){if(++wi>500) { KEY_CLK=0;EA=1; return(0);  }}  //return(0);
  21   2           if(i>=0&&i<=7)                                                                                      //只接收八位数据位,跳过奇偶校验位和停止位
  22   2           { key=key>>1;
  23   3             if(KEY_DATA)
  24   3             key=key|0x80;}
  25   2             while(!KEY_CLK)
  26   2                 {
  27   3                              if(++wi>500) { KEY_CLK=0;EA=1;return(0);}
  28   3                 }
  29   2         }
  30   1           
  31   1       
  32   1          KEY_CLK=0;EA=1;      //拉低时钟线,抑制键盘发送数据,再开总中断允许位
  33   1              if(key==0xE1)    //第三类键
  34   1                passnumber=passnumber+2;  
  35   1              if(key==0xE0)    //第二类键
  36   1            ++passnumber;                               //这里有passnumber是为了只接后一组数据中的第一个,屏蔽每两个
  37   1              if(key==0xF0)
  38   1               passnumber=passnumber+2;           
  39   1          if(passnumber==0)
  40   1               { *keyborad=key;
  41   2                 return(1);            //如果成功接收一个键盘通码,就把flagre置1
  42   2               }
  43   1              else 
  44   1               { 
  45   2                      --passnumber;
  46   2                      return(0);
  47   2      
  48   2               }
  49   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    210    ----
C51 COMPILER V8.02   KEYREAD                                                               04/10/2008 10:43:46 PAGE 2   

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       4
   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 + -