久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1640|回復: 4
收起左側

單片機按鍵長按 短按 和連發程序還是有問題,請大家賜教,不勝感激

[復制鏈接]
ID:686513 發表于 2022-12-3 15:35 | 顯示全部樓層 |閱讀模式
我需要長按 短按 和連發(連按一直加或減)三個功能,之前發過一        貼,長按后會跟隨一次短按,現在我又加了一個狀態,現在連短按都不對了,請大師們賜教,不勝感激!               
#define PD 0x22|(P1&0x51)|(P2<<1&0x80)|(P3<<2&0x0c)   //P1.0/P3.0 p3.1/P4.2 p4.3組合5個按鍵為1個字節數據
單片機源程序如下:
/*******************************************************************************
* 文件名:按鍵函數
* 描  述: 放入定時器10ms掃描一次
* 功  能:
* 參  數:無
*******************************************************************************/        
void key_scan()
{
        static u8 cnt ;
        static u8 state=S0;
        u8 key;                 
  key = PD&0xFF;                                
  switch(state)   //檢測狀態                              
   {
        case S0:                                          //狀態0
      if(key!= 0xFF) state = S1; break;        //判斷輸入是否為0,為0轉入狀態1      
               
   case S1:                                             //狀態1
      if(key==0xFF) state = S0;                //判斷輸入是否為1,為1返回狀態0
      else                                              //否則,轉入狀態2,執行按鍵程序
        {
         state=S2;
         }
       break;
case S2:                                                 //狀態2
        if(key != 0xff)                            //還是按下的狀態     
           {
            state = S3;
             }
        else                                        //松開了,短按
             {  

                 switch(key)
                   {
                      case 0x7F:     執行短按任務;          break;                                                                                                        
                      case 0xfe:      執行短按任務;          break;        
                      case 0xFB:     執行短按任務;          break;
                      case 0xBF:     執行短按任務;          break;               
                      case 0xF7:          執行短按任務;          break;                                
                      case 0xEF:          執行短按任務;          break;                                                                        
                         default:break;               
                      }                           
              }                                          
          break;        
                                                
                                                                                
        case S3:    //判斷長按短按
               if(key != 0xff)
                {
                if(++cnt > 150)           //1500ms
                   {
                   cnt = 190;
                    state = S4;                                                        
                  }
            }
               
            break;
                                
  case S4:       //長按松手檢測
                if(key == 0xff)   //松開了
                   {
                    cnt = 0;                                         
                     switch(key)
                        {         
                          case 0xfe:   此鍵執行長按任務 ;    break;                                                
                        }                                                
                    }
               else if (++cnt>=200)       //連按
                        {
                            cnt = 190;               //100ms觸發一次
                         switch(key)
                           {
                              case 0x7F:     執行連按任務;          break;                             
                              case 0xFB:     執行連按任務;          break;                                                                                       
                          default:break;               
                        }                           
          break;        
                                                                                                
         }
}        

回復

使用道具 舉報

ID:213173 發表于 2022-12-3 20:37 | 顯示全部樓層
給你一個示例參考 4位冒號數碼管時鐘 單鍵調時 仿真.rar (129.93 KB, 下載次數: 34)

回復

使用道具 舉報

ID:686513 發表于 2023-1-7 08:27 | 顯示全部樓層
wulin 發表于 2022-12-3 20:37
給你一個示例參考

豐常感謝,但這個鍵只能識別短按和連按,我想實現一個鍵有短按,長按和連按的功能,如短按選項,連按連續加1,我還要增加一個長按關機,就不好實現了!
回復

使用道具 舉報

ID:130230 發表于 2023-1-9 11:31 | 顯示全部樓層
回復

使用道具 舉報

ID:213173 發表于 2023-1-9 14:16 | 顯示全部樓層
zhth1979 發表于 2023-1-7 08:27
豐常感謝,但這個鍵只能識別短按和連按,我想實現一個鍵有短按,長按和連按的功能,如短按選項,連按連續 ...

其實所謂連按就是長按,區別就在于長按執行一次任務,連按重復執行相同任務。例如K1短按進入菜單,再次短按選擇菜單,......,直到退出。長按關機,K2、K3在菜單界面短按為+/-,長按為+++/---。但要在一個鍵里實現短按,長按和連按的功能有點麻煩。例如K1長按關機,短按選擇菜單。在菜單狀態短按為+1,直至允許的最大值后歸0,長按為連加+,直至允許的最大值后歸0。再次短按切換菜單選項,直至短按退出菜單。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品视频 | 午夜久久久 | 亚洲精品一区在线观看 | 黄网站免费在线观看 | 欧美日韩国产在线观看 | 色综合久久久久 | av片免费 | 国产高清精品一区二区三区 | 久久久久亚洲精品 | 香蕉久久a毛片 | 91精品成人久久 | 欧美日韩中文在线 | 国产色婷婷精品综合在线手机播放 | 亚洲永久免费观看 | .国产精品成人自产拍在线观看6 | 在线一区 | 免费精品久久久久久中文字幕 | 日韩中文字幕视频在线观看 | 亚洲视频国产视频 | 日本天天操 | 日韩欧美一级精品久久 | 久久国产综合 | 国产美女视频黄a视频免费 国产精品福利视频 | 亚洲va欧美va天堂v国产综合 | 国产一区二区在线看 | 国产精品一区二区三区在线 | 麻豆一区二区三区 | 天堂一区在线观看 | av大片| 久久综合av| 91精品国产美女在线观看 | 日韩在线综合 | 一区二区三区四区电影视频在线观看 | 一区二区三区欧美在线观看 | 国产精品99久久久精品免费观看 | 日韩在线免费播放 | 我要看黄色录像一级片 | 国产亚洲欧美在线 | 九九热精品视频在线观看 | 欧美日韩精品在线一区 | 精品成人av |