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

📄 hanglishikeybanchen02.lst

📁 stc/at89c51 的4乘4行列式按键程序
💻 LST
字号:
C51 COMPILER V6.23a  HANGLISHIKEYBANCHEN02                                                 03/17/2006 09:28:21 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE HANGLISHIKEYBANCHEN02
OBJECT MODULE PLACED IN .\HangliShiKeyBanChen02.obj
COMPILER INVOKED BY: e:\system\Keil\C51\BIN\C51.EXE ..\SCR\HangliShiKeyBanChen02.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Han
                    -gliShiKeyBanChen02.lst) OBJECT(.\HangliShiKeyBanChen02.obj) 

stmt level    source

   1                  #include <at89x52.h>
   2                  #define KeyBufSize      12
   3                      sbit LampFull=P3^7;//红色
   4                      sbit LampEempty=P3^6; //绿色
   5                  unsigned char  a[]={0x3f,0x06,0x5b,0x4f,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f ,0x77 ,0x7c};
   6                      unsigned char OverFlag;
   7                      unsigned char KeyBuf[KeyBufSize],JianZi,PointW,PointR;  //全局变量 按键队列
   8                  unsigned char DispBuf[2];//全局变量 显示缓存 只有两个七段LED 所以只定义了两个单元的数组
   9                  void delay(unsigned char j); 
  10                  unsigned char GetKey();
  11                      void LcdDriver();
  12                      unsigned char PutKey();
  13                  unsigned char KeyDriver();
  14                  void Key();
  15                      void display(void);
  16                  void delay(unsigned char j) 
  17                  {
  18   1                   unsigned char m,k;
  19   1                   for(m=0;m<j;m++)
  20   1                   for(k=0;k<5;k++);
  21   1                  }
  22                  void LcdDriver()
  23                      { static unsigned char i,j;
  24   1                   j=i;
  25   1                   i=GetKey();
  26   1                   if(i==255)  { DispBuf[0]=j; i=j;}
  27   1                    else      DispBuf[0]=i;
  28   1                    DispBuf[1]=DispBuf[0];
  29   1                   } 
  30                     unsigned char GetKey()
  31                     { unsigned char x;
  32   1                   if((PointW==PointR)&(OverFlag==0)) {LampEempty=1;LampFull=0;return 255;}
  33   1                   if(PointR>=KeyBufSize) PointR=0; 
  34   1                   x=KeyBuf[PointR];
  35   1               PointR++;
  36   1                  return x;
  37   1                  }
  38                  
  39                unsigned char PutKey()
  40                { 
  41   1                  if((PointW-PointR)==KeyBufSize-1) {LampEempty=0;LampFull=1;return 255;}
  42   1              if(PointW>=KeyBufSize) { PointW=0; OverFlag=1;} 
  43   1                  if((PointW==PointR)&(OverFlag==1)){LampEempty=0;LampFull=1;OverFlag=0;return 255;}
  44   1                  KeyBuf[PointW]=JianZi;
  45   1                  PointW++;
  46   1                 }
  47                    unsigned char KeyDriver()
  48                    {unsigned char x,y,key;
  49   1                 P2=0x0f;                             //低四位输入1,高四位输出0
  50   1                 x=P2;
  51   1                 x=x&0x0f;                    //P2输入后,清高四位,作为X值
  52   1                 P2=0xf0;                             //高四位输入1,低四位输出0
  53   1                 y=P2;
  54   1             y=y&0xf0;        //P2输入后移位到低四位,并清高四位,作为Y值
C51 COMPILER V6.23a  HANGLISHIKEYBANCHEN02                                                 03/17/2006 09:28:21 PAGE 2   

  55   1             key=x|y;
  56   1                 key=key&0xfe;
  57   1                 return key;
  58   1                }
  59                void Key()
  60                    {
  61   1                unsigned char Keyok;
  62   1                Keyok=KeyDriver();
  63   1                if(Keyok==254){return;}
  64   1                 else
  65   1              {
  66   2               switch(Keyok)
  67   2                   {
  68   3                    case 236: JianZi=3; break;
  69   3                        case 234: JianZi=2; break;
  70   3                        case 230: JianZi=1; break;
  71   3      
  72   3                        case 220: JianZi=6; break;
  73   3                        case 218: JianZi=5; break;
  74   3                        case 214: JianZi=4; break;
  75   3      
  76   3                        case 188: JianZi=9; break;
  77   3                        case 186: JianZi=8; break;
  78   3                        case 182: JianZi=7; break;
  79   3      
  80   3                        case 124: JianZi=0; break;
  81   3                        case 122: JianZi=11; break;
  82   3                        case 118: JianZi=10; break;
  83   3                       }
  84   2                        PutKey();
  85   2                    LcdDriver();
  86   2                  }
  87   1               }
  88             
  89                 
  90               void display(void) //显示函数
  91                   {
  92   1                static unsigned char sys;
  93   1                switch(sys)
  94   1                { case 0:P3_5=1;
  95   2                             P2_0=0;
  96   2                             P0=a[DispBuf[0]];
  97   2                                 sys=1;
  98   2                                 break;
  99   2                     case 1:P3_5=0;
 100   2                            P2_0=1;
 101   2                                P0=a[DispBuf[1]];
 102   2                                sys=0;
 103   2                                break;
 104   2                }
 105   1                }
 106                  main()
 107             {
 108   1          LampFull=0;
 109   1          LampEempty=0;
 110   1              while(1)
 111   1              {
 112   2           Key();
 113   2               display();
 114   2               delay(25);
 115   2               LampFull=0;
 116   2           LampEempty=0;
C51 COMPILER V6.23a  HANGLISHIKEYBANCHEN02                                                 03/17/2006 09:28:21 PAGE 3   

 117   2               }
 118   1          }
 119          


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