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

📄 key.lst

📁 STC51系列的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 134   1          {   return key_table[i][j];
 135   2          }
 136   1      }
 137          
 138          /********************************************************************************/
 139          /* fun_name : c51_key_scan_process_jitter()                                     */
 140          /* version  : v1.00                                                             */
 141          /* created  : xillinx                                                           */
 142          /* descript : 键盘扫描到按键按下后需要去抖操作,这个函数处理去抖                 */
 143          /********************************************************************************/
 144          unsigned char c51_key_cur_value=0x0;
 145          unsigned char c51_key_jitter=0x0;
 146          unsigned char c51_key_record=0x0;
 147          unsigned char c51_key_scan_process_jitter(void)
 148          {   unsigned char c51_key_read_lo=0x0;
 149   1          c51_key_read_lo=c51_key_scan_operate();
 150   1          if( c51_key_cur_value!=c51_key_read_lo) //* 如果这次扫描的数据与上次不一致
 151   1          {   c51_key_cur_value=c51_key_read_lo;
 152   2              c51_key_jitter=0x0;
 153   2              c51_key_record=0x0;
 154   2          }
 155   1          else
 156   1          {   c51_key_jitter++;
 157   2          }
 158   1          if( c51_key_cur_value==0x0) //* 没有按键按下,不需要统计扫描次数
 159   1          {   c51_key_jitter=0x0;
 160   2              //key_off_proc();
 161   2          }
 162   1          if( c51_key_jitter<0x6)     //* 如果没有连续三次扫描到相同的按键,继续扫描
 163   1          {   return 0x0;
 164   2          }
 165   1          if( c51_key_record==0x1)    //* 如果是已经处理的按键还没有释放,一直按着,不处理
 166   1          {   return 0x0;
 167   2          }
 168   1          else
 169   1          {   c51_key_record=0x1;     //* 处理新检测的按键
 170   2              key_put_on_proc(c51_key_cur_value);
 171   2          }
 172   1          return c51_key_cur_value;
 173   1      }
 174          
 175          
 176          /********************************************************************************/
 177          /* fun_name : c51_key_scan_hi_process()                                         */
 178          /* version  : v1.00                                                             */
C51 COMPILER V8.02   KEY                                                                   10/20/2008 13:54:42 PAGE 4   

 179          /* created  : xillinx                                                           */
 180          /* descript : 扫描独立的四个按键                                                */
 181          /********************************************************************************/
 182          unsigned char key_hi_cur=0x0;
 183          unsigned char key_hi_jit=0x0;
 184          unsigned char key_hi_rec=0x0;
 185          unsigned char key_val=0x0;
 186          unsigned char c51_key_scan_hi_process(void)
 187          {   unsigned char key_read=0x0;
 188   1          key_read=c51_key_read_hi();
 189   1          if( key_hi_cur!=key_read)       //* 如果这次扫描的数据与上次不一致
 190   1          {   key_hi_cur=key_read;
 191   2              key_hi_jit=0x0;
 192   2              key_hi_rec=0x0;
 193   2          }
 194   1          else
 195   1          {   key_hi_jit++;
 196   2          }
 197   1          if( key_hi_cur==0xF0)           //* 没有按键按下,不需要统计扫描次数
 198   1          {   key_hi_jit=0x0;
 199   2              //key_off_proc();
 200   2          }
 201   1          if( key_hi_jit<0x3)             //* 如果没有连续三次扫描到相同的按键,继续扫描
 202   1          {   return 0x0;
 203   2          }
 204   1          
 205   1          if( key_hi_rec==0x1)            //* 如果是已经处理的按键还没有释放,一直按着,不处理
 206   1          {   return 0x0;
 207   2          }
 208   1          if((key_hi_cur&0xF0)==0xE0)     //* 第一个按键按下
 209   1          {   key_val = 0x1;
 210   2          }
 211   1          else if((key_hi_cur&0xF0)==0xD0)//* 第二个按键按下
 212   1          {   key_val = 0x2;
 213   2          }
 214   1          else if((key_hi_cur&0xF0)==0xB0)//* 第三个按键按下
 215   1          {   key_val = 0x3;
 216   2          }
 217   1          else                            //* 第四个按键按下
 218   1          {   key_val = 0x4;
 219   2          }
 220   1          key_hi_rec=0x1;             //* 处理新检测的按键
 221   1          key_put_on_proc(key_val);
 222   1          
 223   1          return key_val;
 224   1      }
 225          
 226          /********************************************************************************/
 227          /* fun_name : c51_key_scan()                                                    */
 228          /* version  : v1.00                                                             */
 229          /* created  : xillinx                                                           */
 230          /* descript : 这个函数需要在定时器里面调用                                      */
 231          /********************************************************************************/
 232          void c51_key_scan(void)
 233          {   unsigned char key_val; 
 234   1          if(  KEY_scan_timer==0x0) //* 定时器没有到
 235   1          {    return;
 236   2          }
 237   1          KEY_scan_timer=0x0;
 238   1          key_val=c51_key_scan_process_jitter(); //* 8x3=24MS定时器,扫描键盘
 239   1          if(  key_val!=0x0)
 240   1          {    UART_printf("push key: %c.\r\n",key_val);
C51 COMPILER V8.02   KEY                                                                   10/20/2008 13:54:42 PAGE 5   

 241   2          }
 242   1          key_val=c51_key_scan_hi_process();
 243   1          switch(key_val)
 244   1          {
 245   2          case 0x1:
 246   2               UART_printf("push key: F1.\r\n");
 247   2               break;
 248   2          case 0x2:
 249   2               UART_printf("push key: F2.\r\n");
 250   2               break;
 251   2          case 0x3:
 252   2               UART_printf("push key: F3.\r\n");
 253   2               break;
 254   2          case 0x4:
 255   2               UART_printf("push key: F4.\r\n");
 256   2               break;
 257   2          default:
 258   2               break;
 259   2          }
 260   1          return;
 261   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    465    ----
   CONSTANT SIZE    =    100    ----
   XDATA SIZE       =     14       1
   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 + -