矩阵键盘.lst

来自「一些51单片机基础模块的程序」· LST 代码 · 共 114 行

LST
114
字号
C51 COMPILER V7.50   __阵键盘                                                              04/09/2009 18:36:00 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE __阵键盘
OBJECT MODULE PLACED IN 矩阵键盘.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 矩阵键盘.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * 文件名  : 矩阵键盘.c
   3          * 描述    :  该文件实现了 4 * 4 键盘的试验。通过数码管的最后两位来显示当前的按键值。             
   4          * 创建人  : 东流,2009年4月9日
   5          * 版本号  : 2.0
   6          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
   7          * 感谢“中国自动化资讯网”对本工作室的大力支持。
   8          *********************************************************************/
   9          #include<reg51.h>
  10          #include<intrins.h>
  11          
  12          #define uint unsigned int
  13          #define uchar unsigned char
  14          
  15          uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
  16          
  17          /********************************************************************
  18          * 名称 : Delay_1ms()
  19          * 功能 : 延时子程序,延时时间为 1ms * x
  20          * 输入 : x (延时一毫秒的个数)
  21          * 输出 : 无
  22          ***********************************************************************/
  23          void Delay_1ms(uint i)
  24          {
  25   1              uchar x,j;
  26   1              for(j=0;j<i;j++)
  27   1              for(x=0;x<=148;x++);    
  28   1      }
  29          
  30          
  31          /********************************************************************
  32          * 名称 : Keyscan()
  33          * 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
  34                           该函数的原理将在“视频及教程”文件夹中介绍。
  35          * 输入 : 无
  36          * 输出 : 按键值
  37          ***********************************************************************/
  38          uchar Keyscan(void)
  39          {
  40   1              uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
  41   1              for(j=0; j<4; j++)
  42   1              {
  43   2                      P1 = Buffer[j];
  44   2                      /*以下三个_nop_();作用为让 P1 口的状态稳定*/
  45   2                      _nop_();
  46   2                      _nop_();
  47   2                      _nop_();
  48   2                      temp = 0x01;                                                                                            
             -                                                                        
  49   2                      for(i=0; i<4; i++)
  50   2                      {
  51   3                              if(!(P1 & temp)) 
  52   3                              {
  53   4                                      return (i+j*4);           //返回取得的按键值
  54   4                              }
C51 COMPILER V7.50   __阵键盘                                                              04/09/2009 18:36:00 PAGE 2   

  55   3                              temp <<= 1;
  56   3                      }       
  57   2              }
  58   1      }
  59          
  60          /********************************************************************
  61          * 名称 : Main()
  62          * 功能 : 主函数
  63          * 输入 : 无
  64          * 输出 : 无
  65          ***********************************************************************/
  66          void Main(void)
  67          {
  68   1              uchar Key_Value;  //读出的键值          
  69   1              while(1)
  70   1              {
  71   2                      P1 = 0xf0;              
  72   2                      if(P1 != 0xf0)
  73   2                      {
  74   3                              Delay_1ms(15);  //按键消抖
  75   3                              if(P1 != 0xf0)
  76   3                              {
  77   4                                      Key_Value = Keyscan();          
  78   4                              }
  79   3                      }
  80   2                      P0 = table[Key_Value / 10];     //显示高位键值
  81   2                      P2 = 0x02;
  82   2                      Delay_1ms(5);       
  83   2                      P0 = table[Key_Value % 10];             //显示低位键值
  84   2                      P2 = 0x01;
  85   2                      Delay_1ms(5);
  86   2              }
  87   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    153    ----
   CONSTANT SIZE    =     14    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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