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

📄 key.lst

📁 本代码实现的是12864图形LCD模块
💻 LST
字号:
C51 COMPILER V8.08   KEY                                                                   11/02/2007 15:16:55 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Driver\Key_Service\Key.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Key.lst) OBJECT(
                    -Key.obj)

line level    source

   1          //========================================================================
   2          // 文件名:  Key.c
   3          // 作  者: xinqiang Zhang(小丑)  (email: xinqiang@Mzdesign.com.cn)
   4          // 日  期: 2007/07/26
   5          // 描  述: MzLH01-12864 LCD显示模块驱动V1.0版
   6          //                      基本功能接口函数集
   7          //
   8          // 参  考: 无
   9          // 版  本:
  10          //      2007/07/26      First version    Mz Design
  11          //========================================================================
  12          #include ".\Driver\Key_Service\Key_config.h"
  13          
  14          unsigned int Key_Sample1=0;                                     //当前对按键采样的值
  15          unsigned int Key_Sample2=0;                                     //上一次对按键采样的值
  16          unsigned int Key_Scan_old=0;                            //上一次有效的键值状态
  17                                                                                                  //(必需连续两次的采样值相同时才能载入该变量中)
  18          unsigned char Key_Down_flag=0;                          //键盘按下标识,注意是经过消抖后确认的按下标识
  19          unsigned char Key_Down_Counter=0;                       //用于消抖
  20          
  21          unsigned int Key_Value=0;                                       //最终经过确认的键值
  22          
  23          unsigned int Key_Data=0;
  24          unsigned char Key_flag=0;
  25          
  26          unsigned char Key_flag_long=0;                          //长时按键标识~
  27          unsigned char Key_Down_Counter_l=0;                     //长时按键计数器
  28          
  29          unsigned char Key_Release_flag=0;                       //在有些按键中防止长按键时重复响应用的
  30          
  31          
  32          void Key_Initial(void)
  33          {
  34   1      /*      *Port_Key_Dir &= ~KEY_MASK;
  35   1              *Port_Key_Attrib &= ~KEY_MASK;
  36   1              *Port_Key_Buffer &= ~KEY_MASK; */
  37   1              Port_Key_Data = KEY_MASK;
  38   1      }
  39          
  40          void KeyScan_Service(void)
  41          {
  42   1              Port_Key_Data = KEY_MASK;
  43   1              Key_Sample1 = Port_Key_Data&KEY_MASK;
  44   1              Key_Sample1 = Key_Sample1^KEY_MASK;
  45   1              if(Key_Sample1==Key_Sample2)
  46   1              {                                       //连续两次扫描的键值相同,有效,则处理
  47   2                      if(Key_Sample1)                         //是否有键按下?如有则处理
  48   2                      {
  49   3                              if(Key_Down_flag==0)    //如果键值还没有被消抖确认,则确认是否与之前的键值一至
  50   3                              {
  51   4                                      if(Key_Sample1==Key_Scan_old)
  52   4                                      {
  53   5                                              Key_Down_Counter++;
  54   5                                              if(Key_Down_Counter>=KEY_DOWN_COUNTER_S) 
C51 COMPILER V8.08   KEY                                                                   11/02/2007 15:16:55 PAGE 2   

  55   5                                              {
  56   6                                                      Key_Down_Counter = 0;
  57   6                                                      Key_Down_Counter_l=KEY_DOWN_COUNTER_S;
  58   6                                                      Key_Down_flag = 1;
  59   6                                                      Key_Value = Key_Sample1;        //将确认的键值载入缓存器中,供键抬起后处理用
  60   6                                              }
  61   5                                      }
  62   4                                      else
  63   4                                      {
  64   5                                              Key_Down_Counter = 0;           //重新计数,即重新消抖
  65   5                                              Key_flag_long=0;
  66   5                                      }
  67   4                              }
  68   3                              else                                    //如已经过消抖,则判断是否有组合键按下?如无则直接退出处理
  69   3                              {
  70   4                                      Key_Down_Counter_l++;//
  71   4                                      if(Key_Down_Counter_l>=KEY_DOWN_COUNTER_L) 
  72   4                                      {
  73   5                                              Key_flag_long=1;
  74   5                                              Key_Down_Counter_l=KEY_DOWN_COUNTER_L-KEY_DOWN_COUNTER_M;
  75   5                                      }
  76   4                              }
  77   3                      }
  78   2                      else                                            //否则就处理之前是否有键是经过确认的
  79   2                      {                                                       //如果已经有键按下,并确认消抖后则处理键值
  80   3                              if(Key_Down_flag==1)
  81   3                              {
  82   4                                      Key_Down_flag = 0;//
  83   4                                      Key_Data = Key_Value;
  84   4                                      Key_flag = 1;
  85   4                                      Key_Down_Counter = 0;
  86   4                                      Key_flag_long=0;
  87   4                              }
  88   3                              if(Key_Release_flag==1)
  89   3                              {
  90   4                                      Key_Release_flag=0;
  91   4                                      Key_flag = 0;
  92   4                              }
  93   3                      }
  94   2                      Key_Scan_old = Key_Sample1;                     //保存这次的有效键值
  95   2              }
  96   1              Key_Sample2 = Key_Sample1;                              //保存当次的值 
  97   1      }
  98          
  99          unsigned char Key_Get(void)
 100          {
 101   1              unsigned char KK=0;
 102   1              if(Key_Release_flag==1) return KK;
 103   1              if(Key_flag_long==1)
 104   1              {
 105   2                      Key_flag_long=0;
 106   2                      switch(Key_Value)
 107   2                      {
 108   3      /*                      case 0x0001: KK = 1;break;
 109   3                              case 0x0002: KK = 2;break;
 110   3                              case 0x0004: KK = 3;break;
 111   3                              case 0x0008: KK = 4;break;
 112   3                              case 0x0020: KK = 5;break;
 113   3                              case 0x0040: KK = 6;break;
 114   3                              case 0x0024: KK = 12;Key_Release_flag = 1; break;
 115   3                              case 0x0080: KK = 0x17; Key_Release_flag =1; break;
 116   3                              case 0x0100: KK = 0x18; Key_Release_flag =1; break;
C51 COMPILER V8.08   KEY                                                                   11/02/2007 15:16:55 PAGE 3   

 117   3                              case 0x0200: KK = 0x19; Key_Release_flag =1; break;
 118   3                              case 0x0400: KK = 0x1a; Key_Release_flag =1; break; */
 119   3                              default : KK=0;
 120   3                      }
 121   2                      if(KK!=0)
 122   2                      {
 123   3                              Key_flag=0;
 124   3                              return KK;
 125   3                      }
 126   2              }
 127   1              if(Key_flag!=0)
 128   1              {
 129   2                      Key_flag=0;
 130   2                      Key_Down_Counter = 0;
 131   2                      Key_Down_flag = 0;
 132   2                      switch(Key_Data)
 133   2                      {
 134   3                              case 0x0001: KK = 1;break;
 135   3                              case 0x0002: KK = 2;break;
 136   3                              case 0x0004: KK = 3;break;
 137   3                              /* case 0x0008: KK = 4;break;
 138   3                              case 0x0020: KK = 5;break;
 139   3                              case 0x0040: KK = 6;break;
 140   3                              case 0x0080: KK = 7;break;
 141   3                              case 0x0100: KK = 8;break;
 142   3                              case 0x0200: KK = 9;break;
 143   3                              case 0x0400: KK = 10;break;
 144   3                              case 0x0800: KK = 11;break; */
 145   3                              default : break;
 146   3                      }
 147   2                      return KK;
 148   2              }
 149   1              else return 0;
 150   1      }


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