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

📄 keyscan.lst

📁 用中断实现的一个四*四的键盘程序。在Keil C下开发的。程序通过。
💻 LST
字号:
C51 COMPILER V7.50   KEYSCAN                                                               07/23/2007 11:14:31 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN keyscan.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL\C51\BIN\C51.EXE keyscan.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          0x18   0x14    0x12    0x11
   3          0x28   0x24    0x22    0x21
   4          0x48   0x44    0x42    0x41
   5          0x88   0x84    0x82    0x81
   6          */
   7          
   8          
   9          
  10          
  11          #include<at89x52.h>
  12          
  13          #define uint unsigned int
  14          #define uchar unsigned char
  15          
  16          
  17          void init();
  18          void key_scan();
  19          
  20          bit int1_flag;
  21          uchar key=0;
  22          
  23          void main(){
  24   1              init();
  25   1              while(1){
  26   2              if(int1_flag){
  27   3                      switch(key){
  28   4                              case 0x11: P0=0xfe; break;
  29   4                              case 0x12: P0=0xfd; break;
  30   4                              case 0x14: P0=0xfb; break;
  31   4                              case 0x18: P0=0xf7; break;
  32   4      
  33   4                              case 0x21: P0=0xef; break;
  34   4                              case 0x22: P0=0xdf; break;
  35   4                              case 0x24: P0=0xbf; break;
  36   4                              case 0x28: P0=0x7f; break;
  37   4                              
  38   4                              case 0x41: P0=0xfe; break;
  39   4                              case 0x42: P0=0xfc; break;
  40   4                              case 0x44: P0=0xf8; break;
  41   4                              case 0x48: P0=0xf0; break;
  42   4      
  43   4                              case 0x81: P0=0xe0; break;
  44   4                              case 0x82: P0=0xc0; break;
  45   4                              case 0x84: P0=0x80; break;
  46   4                              case 0x88: P0=0x00; break;
  47   4                      }
  48   3                      int1_flag=0;    
  49   3              }
  50   2      }
  51   1      }
  52          void init(){
  53   1              //IE=0x84;//中断总控制位EA、外中断1开中断
  54   1              IE=0xff;
  55   1              IP=0x04;//外中断1为高中断优先级
C51 COMPILER V7.50   KEYSCAN                                                               07/23/2007 11:14:31 PAGE 2   

  56   1              TCON=0x05;
  57   1              int1_flag=0;
  58   1              P2=0x0f;
  59   1              }
  60          
  61          void key_scan() interrupt 2
  62          {   
  63   1              uint t;
  64   1              uchar keycode,scancode,flag=0xff;
  65   1              int1_flag=1;
  66   1              t=5000;
  67   1              while(t--);
  68   1              if(INT1==1) return ; //如果此时键盘中断为高电平,则是拌动
  69   1              EX1=0;//关键盘中断
  70   1              scancode=0xef;
  71   1              while(scancode!=0xff){
  72   2                      P2=scancode;//输入扫描码,行,1110 1111
  73   2                      keycode=P2;//读出数据,看是否再些行上的某列键盘按下
  74   2                      if((keycode&0x0f)!=0x0f) break;//扫描到按上的键,则退出
  75   2                      scancode=(keycode<<1)|0x0f;//否刚,更新扫描码,下一行,继续扫描
  76   2                      }
  77   1      
  78   1          keycode=~keycode;//方便读数
  79   1              key=keycode;//传给全局变量KEY
  80   1      //      if(keycode==0x11) 
  81   1      //      else ;
  82   1              P2=0x0f;
  83   1              while(1){//看按键是否被释放
  84   2                      if(INT1==0){
  85   3                              flag=~flag;
  86   3                              if(flag==0) break;
  87   3                              }
  88   2                       t=10000;
  89   2                       while(t--);
  90   2                       }
  91   1              EX1=1;
  92   1              return ;
  93   1              }
  94          
  95          
  96          
  97          
  98          
  99          
 100          
 101          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    277    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -