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

標(biāo)題: 單片機(jī)C語言單位切換鍵加長按開關(guān)機(jī)功能,如何實(shí)現(xiàn)? [打印本頁]

作者: zhth1979    時(shí)間: 2023-1-4 13:47
標(biāo)題: 單片機(jī)C語言單位切換鍵加長按開關(guān)機(jī)功能,如何實(shí)現(xiàn)?

想實(shí)現(xiàn)的功能:unit按鍵短按單位切換,長按3S開關(guān)機(jī)。
方法1:此鍵連到外部中斷IO口,開機(jī)時(shí)短按單位切換,長按時(shí)可以關(guān)機(jī),關(guān)機(jī)時(shí)短按下降沿觸發(fā)外部中斷也可以開機(jī),基本可以實(shí)現(xiàn)想要的功能。但在短按觸發(fā)外部中斷開機(jī)時(shí),單位切換也會觸發(fā)一次,即關(guān)機(jī)前是單位1,短按開機(jī)后會到單位2。


方法2:就是如上圖連接,硬件觸發(fā)開機(jī),unit鍵不連到外部中斷,普通按鍵接法,只負(fù)責(zé)短按單位切換,長按關(guān)機(jī)。關(guān)機(jī)短按UNIT可以開機(jī),但也會出現(xiàn)單位觸發(fā)一次,現(xiàn)像與方法1一樣.  


以上兩種方法都是因?yàn)榘聪聈nit開機(jī)的同時(shí),單位短按也執(zhí)行了,這樣情況如何解決,各路大神快來幫幫小弟吧,這個(gè)問題困擾小弟好久了!


下面是單片機(jī)按鍵掃描程序:
void key_scan()
{
        static u8 state=S0,key_time,lastkey;
        u8 key;
       key=PD&0xFF;
         
  switch(state)   //檢測狀態(tài)                              
   {
    case S0:                                    
             if(key!= 0xFF) state = S1;  break;      
               
   case S1:                                   
           if(key==0xFF)        state = S0;               
          else                                 
             {
                 lastkey=key;
                 state=S2;
            }
          break;

   case S2:
    if(key==0xFF)
        {                        
           state = S0;                //判斷輸入是否為1,為1返回狀態(tài)0        
           switch(lastkey)
               {
                 case 0x7F:     執(zhí)行短按任務(wù)         break;
                                                                                                        
                case 0xfe:      執(zhí)行短按任務(wù)         break;         //unit短按單位切換
                                                                                    
               case 0xFB:       執(zhí)行短按任務(wù)         break;
                                                                                                
               case 0xBF:       執(zhí)行短按任務(wù)         break;

               case 0xF7:              執(zhí)行短按任務(wù)         break;                        
                                                         
               case 0xEF:             執(zhí)行短按任務(wù)         break;                        
                                         
              default:break;               
               }
       }                        
     else if(++key_time==200)
         {
            key_time=0;
            switch(key)
             {
               case 0xfe:    執(zhí)行長按任務(wù) break;         // unit不僅連到單片機(jī)普通IO,還連到外部中斷IO口,開機(jī)時(shí)長按關(guān)機(jī),關(guān)機(jī)時(shí)短按下降沿觸發(fā)開機(jī)。
             }
            state=S3;                                                                                                        
         }      
        break;

  case S3:                                                  
            if(key==0xFF)   state=S0;                                 
      else if(++key_time==5)                                 //否則開始計(jì)時(shí),計(jì)時(shí)結(jié)束按鍵連擊
             {
               key_time=0;
               switch(key)
                {
                   case 0x7F:      執(zhí)行連擊任務(wù)         break;        
                                                                                                               
                  case 0xFB:      執(zhí)行連擊任務(wù)         break;                                                                                                                                                                                                                                                                                                                                                 }
              }
      break;
  }
}


作者: zhth1979    時(shí)間: 2023-1-4 14:11
之前也有幾位大神指點(diǎn)過,但自己太愚笨,沒能實(shí)現(xiàn)!
作者: zhaomin253    時(shí)間: 2023-1-4 17:01
整幾個(gè)按鍵狀態(tài),LASTKEY 、NOWKEY,用定時(shí)器判斷,只有超過500ms才可以給按鍵狀態(tài)賦值,這樣長按和短按可以分開來
作者: hjc5035    時(shí)間: 2023-1-4 18:53
每次判斷按鍵按下就觸發(fā)定時(shí)器TRx=1,并賦初值,再加一個(gè)flag計(jì)數(shù),再判斷按鍵彈起,若定時(shí)溢出就開關(guān)機(jī),若沒有進(jìn)入定時(shí)中斷就功能切換
作者: zhth1979    時(shí)間: 2023-1-5 09:33
hjc5035 發(fā)表于 2023-1-4 18:53
每次判斷按鍵按下就觸發(fā)定時(shí)器TRx=1,并賦初值,再加一個(gè)flag計(jì)數(shù),再判斷按鍵彈起,若定時(shí)溢出就開關(guān)機(jī), ...

這個(gè)方法可行,有沒有例程,發(fā)我一下參考,多謝!
作者: zhth1979    時(shí)間: 2023-1-5 09:37
zhaomin253 發(fā)表于 2023-1-4 17:01
整幾個(gè)按鍵狀態(tài),LASTKEY 、NOWKEY,用定時(shí)器判斷,只有超過500ms才可以給按鍵狀態(tài)賦值,這樣長按和短按可 ...

長按,短按或短按,連按倒都還好區(qū)分,但短按,長按,連按三個(gè)放在一起都不太好區(qū)分吧?(連按大多是在長按的基礎(chǔ)上觸發(fā)連按)
作者: 人工置頂員    時(shí)間: 2023-1-10 14:57
頂一下
作者: ma5ter    時(shí)間: 2023-1-10 15:08
弄一個(gè)變量判斷開關(guān)機(jī)狀態(tài)即可
作者: Y_G_G    時(shí)間: 2023-1-10 19:59
這是當(dāng)初我學(xué)單片機(jī)的時(shí)候?qū)懙?長按和雙擊,定時(shí)器開啟中斷
通過在主程序判斷標(biāo)志位來檢測是長按還是雙擊,并調(diào)用函數(shù),在調(diào)用的函數(shù)中清除對應(yīng)的標(biāo)志位
大概是這樣的
void one_pre_disp()                                                //單擊按鍵處理
{       
        ONE_PRE=0;

...............
}
Timer0_Key.rar (1.33 KB, 下載次數(shù): 10)




作者: lyxing    時(shí)間: 2023-1-10 20:31
單一執(zhí)行,設(shè)置一個(gè)狀態(tài)變量,根據(jù)當(dāng)前狀態(tài)結(jié)合按鍵狀態(tài),進(jìn)行下一步操作。個(gè)人喜歡按下則開啟定時(shí)器計(jì)數(shù),松開停止,超過多少時(shí)間為判定長按判斷。
作者: wulin    時(shí)間: 2023-1-11 07:36
zhth1979 發(fā)表于 2023-1-5 09:37
長按,短按或短按,連按倒都還好區(qū)分,但短按,長按,連按三個(gè)放在一起都不太好區(qū)分吧?(連按大多是在長 ...

其實(shí)一鍵開關(guān)機(jī)不需要這么復(fù)雜的硬件電路。利用單片機(jī)休眠功能即可解決。初次上電自動開機(jī),P3.2作為普通按鍵使用,短按切換菜單,長按執(zhí)行菜單下不同任務(wù)。只要再加一項(xiàng)菜單,長按打開外部中斷,執(zhí)行睡眠即可關(guān)機(jī)。在睡眠狀態(tài)由外部觸發(fā)喚醒,關(guān)閉外部中斷,恢復(fù)P3.2作為普通按鍵使用。最多只要在P3.2外接一個(gè)1K電阻和1個(gè)104電容硬件消抖。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久国产精品久久久久久 | 日韩精品网站 | 亚洲免费一区二区 | 一区二区三区国产精品 | 亚洲激情第一页 | 久久久久一区二区三区四区 | 亚洲精品一区二区在线观看 | 欧美午夜激情在线 | 欧美美女爱爱视频 | 国产精品一区二区视频 | 欧美色性| a视频在线播放 | 一区二区三区四区在线视频 | 麻豆亚洲 | 亚洲自拍偷拍av | 高清国产午夜精品久久久久久 | 亚洲九九精品 | 成人a免费| 欧美性tv| 伊人网影院 | 视频在线一区二区 | 日本小视频网站 | 午夜电影一区二区 | 久久久久久久国产精品 | 日韩在线小视频 | 日本h片在线观看 | 国产在线视频一区 | 欧美寡妇偷汉性猛交 | 国产成人啪免费观看软件 | 韩国久久 | 欧美日韩1区2区 | 天天操综合网 | 午夜精品视频 | 欧美一区二区大片 | 国产精品久久久久不卡 | 成人精品一区 | 精品日韩一区二区三区 | 香蕉视频久久久 | 成人一区二 | 一区二区三区视频在线免费观看 | 亚洲不卡视频 |