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

📄 key.lst

📁 4*4键盘程序
💻 LST
字号:
C51 COMPILER V8.08   KEY                                                                   02/14/2009 08:52:26 PAGE 1   


C51 COMPILER V8.08, 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          /******************
   2          #include<AT89X51.H>
   3          #include"key.h"
   4          
   5          unsigned char temp;
   6          unsigned char key;
   7          unsigned char i,j;
   8          
   9           void delay()
  10           {
  11             for(i=50;i>0;i--)
  12               for(j=200;j>0;j--);
  13           }
  14           unsigned char keyscan(void)
  15          {
  16          P3=0xff;
  17          P3_4=0;
  18          temp=P3;
  19          temp=temp & 0x0f;
  20          if (temp!=0x0f)
  21          {
  22           delay();
  23          temp=P3;
  24          temp=temp & 0x0f;
  25          if (temp!=0x0f)
  26          {
  27          temp=P3;
  28          temp=temp & 0x0f;
  29          switch(temp)
  30          {
  31          case 0x0e:key=0;break;
  32          case 0x0d:key=1;break;
  33          case 0x0b:key=2;break;
  34          case 0x07:key=3;break;
  35          }
  36          }
  37            }
  38          P3=0xff;
  39          P3_5=0;
  40          temp=P3;
  41          temp=temp & 0x0f;
  42          if (temp!=0x0f)
  43          {
  44          delay();
  45          temp=P3;
  46          temp=temp & 0x0f;
  47          if (temp!=0x0f)
  48          {
  49          temp=P3;
  50          temp=temp & 0x0f;
  51          switch(temp)
  52          {
  53          case 0x0e:key=4;break;
  54          case 0x0d:key=5;break;
  55          case 0x0b:key=6;break;
C51 COMPILER V8.08   KEY                                                                   02/14/2009 08:52:26 PAGE 2   

  56          case 0x07:key=7;break;
  57          }
  58           }
  59          }
  60          
  61          P3=0xff;
  62          P3_6=0;
  63          temp=P3;
  64          temp=temp & 0x0f;
  65          if (temp!=0x0f)
  66          {
  67          delay();
  68          temp=P3;
  69          temp=temp & 0x0f;
  70          if (temp!=0x0f)
  71          {
  72          temp=P3;
  73          temp=temp & 0x0f;
  74          switch(temp)
  75          {
  76          case 0x0e:key=8;break;
  77          case 0x0d:key=9;break;
  78          case 0x0b:key=10;break;
  79          case 0x07:key=11;break;
  80          }
  81          }
  82          }
  83          
  84          P3=0xff;
  85          P3_7=0;
  86          temp=P3;
  87          temp=temp & 0x0f;
  88          if (temp!=0x0f)
  89          {
  90          delay();
  91          temp=P3;
  92          temp=temp & 0x0f;
  93          if (temp!=0x0f)
  94          {
  95          temp=P3;
  96          temp=temp & 0x0f;
  97          switch(temp)
  98          {
  99          case 0x0e:key=12;break;
 100          case 0x0d:key=13;break;
 101          case 0x0b:key=14;break;
 102          case 0x07:key=15;break;
 103          }
 104          }
 105          }
 106            return(key);
 107          }
 108          
 109          //-------------------------------- ------------------------------------------------------------------
 110          // 函数名称: program_SCANkey
 111          // 函数功能: 程序扫描键盘,
 112          //                  有键按下完成按键处理,无键按下直接返回
 113          //--------------------------------------------------------------------------------------------------
 114          
 115          unsigned char i,j;
 116          bit judge_hitkey() ;
 117          unsigned char scan_key() ;
C51 COMPILER V8.08   KEY                                                                   02/14/2009 08:52:26 PAGE 3   

 118          
 119           void delay()
 120           {
 121             for(i=500;i>0;i--)
 122               for(j=200;j>0;j--);
 123           }
 124          unsigned char program_SCANkey()
 125          {
 126          unsigned char key_code;
 127                    if(judge_hitkey())                   //判断是否有键按下
 128          {
 129                        delay();                         //延时20ms左右,消除抖动干扰
 130                        if(judge_hitkey())                   //判断是否有效按键
 131             {
 132          key_code=scan_key();//      key_code=scan_key();;//           //获取键值
 133                       while(judge_hitkey());          //等待按键释放
 134                  {
 135                   }
 136                      return(key_code); //  key_manage(key_code);           //键盘扫描、键盘散转、按键处理
 137                 }
 138          }
 139          }
 140          
 141          //--------------------------------------------------------------------------------------------------
 142          // 函数名称: judge_hitkey
 143          // 函数功能: //判断是否有键按下,有返回1,没有返回0 
 144          // 列判断,还可以用行判断。
 145          //--------------------------------------------------------------------------------------------------
 146          bit judge_hitkey()                            //判断是否有键按下,有返回1,没有返回0
 147          {
 148          unsigned char scancode,keycode;
 149          scancode=0x0F;               //开始设定P1.0~P1.3输出全1(初值)即表明无键闭合
 150          KEY=scancode;          
 151          keycode=KEY;                 //读取P1.0~P1.3的真实状态,从而确定有没有键被按下
 152          if(keycode==0x0F)
 153                return(0);                              //全1则无键闭合
 154          else 
 155                     return(1);                              //否则有键闭合
 156          }
 157          /*******************************************************
 158          //--------------------------------------------------------------------------------------------------
 159          // 函数名称: scan_key
 160          // 函数功能: //扫描键盘,返回键值(高四位代表行,低四位代表列)
 161          // 说明:scancode 扫描码,keycode 键值,keycode_line 行,keycode_row 列
 162          // 过程:先扫描行,确定那行的按键被按下。再扫描列,确定那列的按键被按下,从而确定那个按键被按下。
 163          //--------------------------------------------------------------------------------------------------
 164          
 165          unsigned char scan_key()                    //扫描键盘,返回键值(高四位代表行,低四位代表列)
 166          {
 167                   unsigned char scancode,keycode,keycode_line,keycode_row;
 168              scancode=0xF0;               //列置低,行置高
 169              KEY = scancode;              //输入扫描码,扫描行
 170              keycode_line=KEY;            //KEY的值是与键盘相连的P的状态值。若没有按键按下KEY的值为0xF0,若有按键按
             -下则KEY的值就不是0xF0
 171                      delay(); 
 172              scancode=0x0F;                            //列置高,行置低
 173              KEY=scancode;                             //输入扫描码,扫描列
 174              keycode_row=KEY;         //KEY的值是与键盘相连的P的状态值。若没有按键按下KEY的值为0x0F,若有按键按下则
             -KEY的值就不是0x0F
 175                   keycode = ((keycode_line&0xF0)|(keycode_row&0x0F));
 176                   return(keycode);
 177          }
C51 COMPILER V8.08   KEY                                                                   02/14/2009 08:52:26 PAGE 4   

 178           *****************************************************/
 179          #include <AT89X51.H>
 180          #define   L1  P1_0
 181          
 182          void delay02s(void) //延时0.2秒子程序
 183          {
 184   1      unsigned char i,j,k;
 185   1      for(i=20;i>0;i--)
 186   1      for(j=20;j>0;j--)
 187   1      for(k=248;k>0;k--);
 188   1      }
 189          
 190          
 191          void main(void)
 192          {
 193   1      while(1) 
 194   1      
 195   1      {
 196   2      L1=0;
 197   2      delay02s();
 198   2      L1=1;
 199   2      delay02s();
 200   2      }
 201   1      
 202   1      }


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