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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3037|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

單片機C語言單位切換鍵加長按開關(guān)機功能,如何實現(xiàn)?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:686513 發(fā)表于 2023-1-4 13:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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


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


以上兩種方法都是因為按下unit開機的同時,單位短按也執(zhí)行了,這樣情況如何解決,各路大神快來幫幫小弟吧,這個問題困擾小弟好久了!


下面是單片機按鍵掃描程序:
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不僅連到單片機普通IO,還連到外部中斷IO口,開機時長按關(guān)機,關(guān)機時短按下降沿觸發(fā)開機。
             }
            state=S3;                                                                                                        
         }      
        break;

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:686513 發(fā)表于 2023-1-4 14:11 | 只看該作者
之前也有幾位大神指點過,但自己太愚笨,沒能實現(xiàn)!
回復(fù)

使用道具 舉報

板凳
ID:863657 發(fā)表于 2023-1-4 17:01 | 只看該作者
整幾個按鍵狀態(tài),LASTKEY 、NOWKEY,用定時器判斷,只有超過500ms才可以給按鍵狀態(tài)賦值,這樣長按和短按可以分開來
回復(fù)

使用道具 舉報

地板
ID:1060328 發(fā)表于 2023-1-4 18:53 | 只看該作者
每次判斷按鍵按下就觸發(fā)定時器TRx=1,并賦初值,再加一個flag計數(shù),再判斷按鍵彈起,若定時溢出就開關(guān)機,若沒有進入定時中斷就功能切換
回復(fù)

使用道具 舉報

5#
ID:686513 發(fā)表于 2023-1-5 09:33 | 只看該作者
hjc5035 發(fā)表于 2023-1-4 18:53
每次判斷按鍵按下就觸發(fā)定時器TRx=1,并賦初值,再加一個flag計數(shù),再判斷按鍵彈起,若定時溢出就開關(guān)機, ...

這個方法可行,有沒有例程,發(fā)我一下參考,多謝!
回復(fù)

使用道具 舉報

6#
ID:686513 發(fā)表于 2023-1-5 09:37 | 只看該作者
zhaomin253 發(fā)表于 2023-1-4 17:01
整幾個按鍵狀態(tài),LASTKEY 、NOWKEY,用定時器判斷,只有超過500ms才可以給按鍵狀態(tài)賦值,這樣長按和短按可 ...

長按,短按或短按,連按倒都還好區(qū)分,但短按,長按,連按三個放在一起都不太好區(qū)分吧?(連按大多是在長按的基礎(chǔ)上觸發(fā)連按)
回復(fù)

使用道具 舉報

7#
ID:301191 發(fā)表于 2023-1-10 14:57 | 只看該作者
頂一下
回復(fù)

使用道具 舉報

8#
ID:1056056 發(fā)表于 2023-1-10 15:08 | 只看該作者
弄一個變量判斷開關(guān)機狀態(tài)即可
回復(fù)

使用道具 舉報

9#
ID:401564 發(fā)表于 2023-1-10 19:59 | 只看該作者
這是當初我學單片機的時候?qū)懙?長按和雙擊,定時器開啟中斷
通過在主程序判斷標志位來檢測是長按還是雙擊,并調(diào)用函數(shù),在調(diào)用的函數(shù)中清除對應(yīng)的標志位
大概是這樣的
void one_pre_disp()                                                //單擊按鍵處理
{       
        ONE_PRE=0;

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



回復(fù)

使用道具 舉報

10#
ID:67199 發(fā)表于 2023-1-10 20:31 | 只看該作者
單一執(zhí)行,設(shè)置一個狀態(tài)變量,根據(jù)當前狀態(tài)結(jié)合按鍵狀態(tài),進行下一步操作。個人喜歡按下則開啟定時器計數(shù),松開停止,超過多少時間為判定長按判斷。
回復(fù)

使用道具 舉報

11#
ID:213173 發(fā)表于 2023-1-11 07:36 | 只看該作者
zhth1979 發(fā)表于 2023-1-5 09:37
長按,短按或短按,連按倒都還好區(qū)分,但短按,長按,連按三個放在一起都不太好區(qū)分吧?(連按大多是在長 ...

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人成免费 | 久久精品性视频 | 日韩免费高清视频 | 中文字幕日韩欧美一区二区三区 | 蜜桃av一区二区三区 | 亚洲视频精品 | 性一爱一乱一交一视频 | 日韩一级精品视频在线观看 | 亚洲天堂一区二区 | 欧美一区二区久久 | 成人免费看黄网站在线观看 | 女人精96xxx免费网站p | 国产精品久久久久久吹潮日韩动画 | 欧美三级视频 | 亚洲欧美久久 | 成人一区二区三区在线观看 | 亚洲国产一区二区三区在线观看 | 日韩欧美在| 日日夜夜精品 | 男女国产视频 | 男人的天堂久久 | 91久久北条麻妃一区二区三区 | 国内精品一区二区 | 成人福利影院 | 日韩精品视频在线 | 中文字幕一区二区三区四区不卡 | 欧美日韩黄 | 国产一区久久 | 刘亦菲国产毛片bd | 亚洲综合在线网 | 国产1区| 国产在线精品一区二区 | 欧美一区二区久久 | 欧洲亚洲一区二区三区 | 国产精品免费在线 | 风间由美一区二区三区在线观看 | 久久亚洲一区二区三区四区 | 美国av片在线观看 | 国产精品久久久久久久久久久免费看 | 久久一二区 | 三级黄色片在线播放 |