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

📄 keyscan.lst

📁 51单片机用c语言实例 包括ad
💻 LST
字号:
C51 COMPILER V7.09   KEYSCAN                                                               04/25/2006 10:22:40 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN KeyScan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KeyScan.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************/
   2          /*    文件名: KeyScan.c                               */
   3          /*    功能描述: 控制8255完成键盘扫描及数码显示实验    */
   4          /******************************************************/
   5          
   6          #include "Absacc.h"
   7          
   8          #define C8255_A     XBYTE[0x7F00]       //8255端口地址定义
   9          #define C8255_B     XBYTE[0x7F01]
  10          #define C8255_C     XBYTE[0x7F02]
  11          #define C8255_CON   XBYTE[0x7F03]
  12          //数码管显示编码
  13          unsigned char a[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  14                                                   0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
  15          //显示缓冲
  16          unsigned char b[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  17          
  18          unsigned char key_down;
  19          unsigned char key_value;
  20          unsigned char key_count;
  21          
  22          void delay(unsigned int time)
  23          {
  24   1              unsigned int i;
  25   1              for(i=0; i<time; i++);
  26   1      }
  27          
  28          void keyscan()                                  //按键扫描函数
  29          {
  30   1              unsigned char cc;
  31   1              C8255_A = 0x00;                         //X1~X4置0
  32   1              cc = C8255_C;                           //得到Y1~Y4的值
  33   1              key_down = (~cc) & 0x0f;
  34   1      }
  35          
  36          void display()                                  //显示函数
  37          {
  38   1              unsigned char i, j = 0xDF;
  39   1              for(i=0; i<6; i++)
  40   1              {
  41   2                      C8255_A = 0xFF;
  42   2                      C8255_B = a[b[i]];              //查表输出显示
  43   2                      C8255_A = j;
  44   2                      delay(0x100);
  45   2                      j = (j>>1)|(j<<7);
  46   2              }
  47   1      }
  48          
  49          void clear()                                    //清屏
  50          {
  51   1              C8255_B = 0x00;
  52   1      }
  53          
  54          void writebuffer()
  55          {
C51 COMPILER V7.09   KEYSCAN                                                               04/25/2006 10:22:40 PAGE 2   

  56   1              b[key_count] = key_value;
  57   1              key_count--;
  58   1              if(key_count == -1)
  59   1                      key_count = 5;
  60   1              display();
  61   1              clear();
  62   1              keyscan();
  63   1              while(key_down)                         //键盘消抖
  64   1              {
  65   2                      display();
  66   2                      clear();
  67   2                      keyscan();
  68   2              }
  69   1      }
  70          
  71          void getkey()                                   //得到按键值
  72          {
  73   1              unsigned char value;
  74   1              unsigned char i, j = 0xFE;
  75   1      
  76   1              for(i=0; i<4; i++)
  77   1              {
  78   2                      C8255_A = j;
  79   2                      value = C8255_C;
  80   2      
  81   2                      if(!(value & 0x01))             //行1
  82   2                      {
  83   3                              key_value = i + 0;
  84   3                              writebuffer();
  85   3                              return;
  86   3                      }
  87   2      
  88   2                      if(!(value & 0x02))             //行2
  89   2                      {
  90   3                              key_value = i + 4;
  91   3                              writebuffer();
  92   3                              return;
  93   3                      }
  94   2      
  95   2                      if(!(value & 0x04))             //行3
  96   2                      {
  97   3                              key_value = i + 8;
  98   3                              writebuffer();
  99   3                              return;
 100   3                      }
 101   2      
 102   2                      if(!(value & 0x08))             //行4
 103   2                      {
 104   3                              key_value = i + 12;
 105   3                              writebuffer();
 106   3                              return;
 107   3                      }
 108   2      
 109   2                      j <<= 1;
 110   2              }
 111   1      }
 112          
 113          void main()
 114          {
 115   1              C8255_CON = 0x81;                       //8255初始化
 116   1      
 117   1              key_count = 5;
C51 COMPILER V7.09   KEYSCAN                                                               04/25/2006 10:22:40 PAGE 3   

 118   1      
 119   1              while(1)
 120   1              {
 121   2                      display();                              //显示
 122   2                      clear();                                //清屏
 123   2                      keyscan();                              //按键扫描
 124   2                      if(key_down)                    //判是否有键按下
 125   2                      {
 126   3                              display();
 127   3                              delay(0x80);
 128   3                              clear();
 129   3                              keyscan();
 130   3                              if(key_down)
 131   3                              {
 132   4                                      getkey();               //得到按键值
 133   4                              }
 134   3                      }
 135   2              }
 136   1      }


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