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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3293|回復(fù): 10
收起左側(cè)

單片機(jī)C語(yǔ)言單位切換鍵加長(zhǎng)按開(kāi)關(guān)機(jī)功能,如何實(shí)現(xiàn)?

  [復(fù)制鏈接]
ID:686513 發(fā)表于 2023-1-4 13:47 | 顯示全部樓層 |閱讀模式
333.png
想實(shí)現(xiàn)的功能:unit按鍵短按單位切換,長(zhǎng)按3S開(kāi)關(guān)機(jī)。
方法1:此鍵連到外部中斷IO口,開(kāi)機(jī)時(shí)短按單位切換,長(zhǎng)按時(shí)可以關(guān)機(jī),關(guān)機(jī)時(shí)短按下降沿觸發(fā)外部中斷也可以開(kāi)機(jī),基本可以實(shí)現(xiàn)想要的功能。但在短按觸發(fā)外部中斷開(kāi)機(jī)時(shí),單位切換也會(huì)觸發(fā)一次,即關(guān)機(jī)前是單位1,短按開(kāi)機(jī)后會(huì)到單位2。


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


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


下面是單片機(jī)按鍵掃描程序:
void key_scan()
{
        static u8 state=S0,key_time,lastkey;
        u8 key;
       key=PD&0xFF;
         
  switch(state)   //檢測(cè)狀態(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í)行長(zhǎng)按任務(wù) break;         // unit不僅連到單片機(jī)普通IO,還連到外部中斷IO口,開(kāi)機(jī)時(shí)長(zhǎng)按關(guān)機(jī),關(guān)機(jī)時(shí)短按下降沿觸發(fā)開(kāi)機(jī)。
             }
            state=S3;                                                                                                        
         }      
        break;

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

回復(fù)

使用道具 舉報(bào)

ID:686513 發(fā)表于 2023-1-4 14:11 | 顯示全部樓層
之前也有幾位大神指點(diǎn)過(guò),但自己太愚笨,沒(méi)能實(shí)現(xiàn)!
回復(fù)

使用道具 舉報(bào)

ID:863657 發(fā)表于 2023-1-4 17:01 | 顯示全部樓層
整幾個(gè)按鍵狀態(tài),LASTKEY 、NOWKEY,用定時(shí)器判斷,只有超過(guò)500ms才可以給按鍵狀態(tài)賦值,這樣長(zhǎng)按和短按可以分開(kāi)來(lái)
回復(fù)

使用道具 舉報(bào)

ID:1060328 發(fā)表于 2023-1-4 18:53 | 顯示全部樓層
每次判斷按鍵按下就觸發(fā)定時(shí)器TRx=1,并賦初值,再加一個(gè)flag計(jì)數(shù),再判斷按鍵彈起,若定時(shí)溢出就開(kāi)關(guān)機(jī),若沒(méi)有進(jìn)入定時(shí)中斷就功能切換
回復(fù)

使用道具 舉報(bào)

ID:686513 發(fā)表于 2023-1-5 09:33 | 顯示全部樓層
hjc5035 發(fā)表于 2023-1-4 18:53
每次判斷按鍵按下就觸發(fā)定時(shí)器TRx=1,并賦初值,再加一個(gè)flag計(jì)數(shù),再判斷按鍵彈起,若定時(shí)溢出就開(kāi)關(guān)機(jī), ...

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

使用道具 舉報(bào)

ID:686513 發(fā)表于 2023-1-5 09:37 | 顯示全部樓層
zhaomin253 發(fā)表于 2023-1-4 17:01
整幾個(gè)按鍵狀態(tài),LASTKEY 、NOWKEY,用定時(shí)器判斷,只有超過(guò)500ms才可以給按鍵狀態(tài)賦值,這樣長(zhǎng)按和短按可 ...

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

使用道具 舉報(bào)

ID:301191 發(fā)表于 2023-1-10 14:57 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報(bào)

ID:1056056 發(fā)表于 2023-1-10 15:08 | 顯示全部樓層
弄一個(gè)變量判斷開(kāi)關(guān)機(jī)狀態(tài)即可
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2023-1-10 19:59 | 顯示全部樓層
這是當(dāng)初我學(xué)單片機(jī)的時(shí)候?qū)懙?長(zhǎng)按和雙擊,定時(shí)器開(kāi)啟中斷
通過(guò)在主程序判斷標(biāo)志位來(lái)檢測(cè)是長(zhǎng)按還是雙擊,并調(diào)用函數(shù),在調(diào)用的函數(shù)中清除對(duì)應(yīng)的標(biāo)志位
大概是這樣的
void one_pre_disp()                                                //單擊按鍵處理
{       
        ONE_PRE=0;

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



回復(fù)

使用道具 舉報(bào)

ID:67199 發(fā)表于 2023-1-10 20:31 | 顯示全部樓層
單一執(zhí)行,設(shè)置一個(gè)狀態(tài)變量,根據(jù)當(dāng)前狀態(tài)結(jié)合按鍵狀態(tài),進(jìn)行下一步操作。個(gè)人喜歡按下則開(kāi)啟定時(shí)器計(jì)數(shù),松開(kāi)停止,超過(guò)多少時(shí)間為判定長(zhǎng)按判斷。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-1-11 07:36 | 顯示全部樓層
zhth1979 發(fā)表于 2023-1-5 09:37
長(zhǎng)按,短按或短按,連按倒都還好區(qū)分,但短按,長(zhǎng)按,連按三個(gè)放在一起都不太好區(qū)分吧?(連按大多是在長(zhǎng) ...

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线播放 | 色黄爽| 日韩在线精品强乱中文字幕 | 国产成人精品网站 | 国产福利精品一区 | 另类视频区 | 神马久久香蕉 | 亚洲精品视频免费看 | 欧美日韩中文在线 | 欧美日韩在线精品 | 日韩视频中文字幕 | 在线精品国产 | 国产综合第一页 | 1区2区视频 | 99reav | 日韩欧美在线播放 | 久久免费高清视频 | 99在线国产 | 四虎av电影 | 国产精品成人一区二区三区 | 日本免费在线看 | 成人午夜网 | 拍真实国产伦偷精品 | 国产线视频精品免费观看视频 | 欧美午夜一区二区三区免费大片 | 日本福利在线 | 在线亚洲免费 | 一区二区精品 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | www国产成人免费观看视频,深夜成人网 | 午夜视频精品 | 欧美一级特黄aaa大片在线观看 | 久久99这里只有精品 | 秋霞电影一区二区 | 99在线免费观看视频 | 国产在线观看一区二区三区 | 草久网 | 精品欧美一区二区三区久久久小说 | 女人牲交视频一级毛片 | 久久久精品视 | 国产91丝袜在线18 |