按键部分程序不理解,请大家帮忙看下

2020-01-14 18:56发布

void key_scan(void)
       {
      
                     present_key_dig++;
                    if(present_key_dig>=3900)  //延时?
                      present_key_dig=1;
      
         if(key_down)
                   return;
          if(pre_key_dig!=present_key_dig)
                {  if(pre_key_dig!=0)return;
                     else prekey=0; //松手检测?
                }
         else  if( pre_key_dig==present_key_dig)   prekey=1;
         if(P3.4&&!P12.2&&!P12.1)
               {   
               
                    keyesc=0;
                    pre_key_dig=0;
                    present_key_dig=1;
               
                    return;
                 }
          else if( !P3.4&&P12.2&&P12.1)
                         keyesc=1;
                        
               
            if(keyesc)
                   {
                             
                   return; }
                  
            else if(!prekey)
                    {
                     pre_key_dig=present_key_dig;
                    
                       return;
                      }
                       if(!P3.4)
                         {
                           
                           if(debuge_f==0)
                              {
                               key_down=1;
                                debuge_f=1;
                                
                                on_led=1;
                                  off_led=0;
                                  out_set=0;
                                 
                                 
                                
                              }
                              
                              
                           else
                               {
                                 debuge_f=0;
                                 key_down=1;
                                 l_move_t=0;
                                 l_move_s=0;
                                 
                                 
                                 
                                 
                                 
                               }   
                              
                              
                         }
                        
                      else if(P12.2&&debuge_f)
                           {
                              if(l_move_s>=4)l_move_s=0;
                                  l_move_s++;
                               debug_s_f=1;
                                 wr_f=1;
                              debug_t_f=0;
                              key_down=1;
                              l_move_t=0;
                              
                              
                           }
                      else if(P12.1&&debuge_f)
                          {
                             
                              if(l_move_t>=2)l_move_t=0;
                              l_move_t++;
                              debug_t_f=1;
                              debug_s_f=0;
                               l_move_s=0;
                              key_down=1;
                              wr_f=1;
                              
                             
                          }
                        
                         keyesc=1; //??
                           
                           
         
     }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
xiaobendan
2020-01-15 06:02
写的很分散,也繁琐,帮你整理了一下。
  1. void key_scan(void){   
  2. present_key_dig++;
  3. if(present_key_dig>=3900)present_key_dig=1; //延时?
  4. if(key_down)return;
  5. if(pre_key_dig!=present_key_dig){
  6.         if(pre_key_dig!=0)return;else prekey=0; //松手检测?
  7.         }else if( pre_key_dig==present_key_dig) prekey=1;
  8. if(P3.4&&!P12.2&&!P12.1){  
  9.         keyesc=0;
  10.         pre_key_dig=0;
  11.         present_key_dig=1;
  12.         return;
  13.         }else if( !P3.4&&P12.2&&P12.1) keyesc=1;
  14. if(keyesc){
  15.         return;
  16.         }else if(!prekey){
  17.            pre_key_dig=present_key_dig;
  18.            return;
  19.            }
  20. if(!P3.4){
  21.          if(debuge_f==0){
  22.                 key_down=1;
  23.                 debuge_f=1;
  24.                 on_led=1;
  25.             off_led=0;
  26.             out_set=0;
  27.            }else{
  28.              debuge_f=0;
  29.              key_down=1;
  30.              l_move_t=0;
  31.              l_move_s=0;
  32.             }
  33.         }else if(P12.2&&debuge_f){
  34.                if(l_move_s>=4)l_move_s=0;
  35.                   l_move_s++;
  36.                 debug_s_f=1;
  37.                  wr_f=1;
  38.                debug_t_f=0;
  39.                key_down=1;
  40.                l_move_t=0;
  41.              }else if(P12.1&&debuge_f){
  42.                if(l_move_t>=2)l_move_t=0;
  43.                l_move_t++;
  44.                debug_t_f=1;
  45.                debug_s_f=0;
  46.                 l_move_s=0;
  47.                key_down=1;
  48.                wr_f=1;
  49.                     }
  50. keyesc=1; //
  51. }
复制代码
三个IO是接三个按键?为何有低有效,有高有效?KEY_DOWN在被=1后,没地方=0。
前边有个不等于,这里pre_key_dig==present_key_dig再==有意思?

一周热门 更多>