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

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

QQ登錄

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

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

單片機(jī)按鍵長(zhǎng)按 短按 和連發(fā)程序還是有問(wèn)題,請(qǐng)大家賜教,不勝感激

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

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

回復(fù)

使用道具 舉報(bào)

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

回復(fù)

使用道具 舉報(bào)

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

豐常感謝,但這個(gè)鍵只能識(shí)別短按和連按,我想實(shí)現(xiàn)一個(gè)鍵有短按,長(zhǎng)按和連按的功能,如短按選項(xiàng),連按連續(xù)加1,我還要增加一個(gè)長(zhǎng)按關(guān)機(jī),就不好實(shí)現(xiàn)了!
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-1-9 14:16 | 顯示全部樓層
zhth1979 發(fā)表于 2023-1-7 08:27
豐常感謝,但這個(gè)鍵只能識(shí)別短按和連按,我想實(shí)現(xiàn)一個(gè)鍵有短按,長(zhǎng)按和連按的功能,如短按選項(xiàng),連按連續(xù) ...

其實(shí)所謂連按就是長(zhǎng)按,區(qū)別就在于長(zhǎng)按執(zhí)行一次任務(wù),連按重復(fù)執(zhí)行相同任務(wù)。例如K1短按進(jìn)入菜單,再次短按選擇菜單,......,直到退出。長(zhǎng)按關(guān)機(jī),K2、K3在菜單界面短按為+/-,長(zhǎng)按為+++/---。但要在一個(gè)鍵里實(shí)現(xiàn)短按,長(zhǎng)按和連按的功能有點(diǎn)麻煩。例如K1長(zhǎng)按關(guān)機(jī),短按選擇菜單。在菜單狀態(tài)短按為+1,直至允許的最大值后歸0,長(zhǎng)按為連加+,直至允許的最大值后歸0。再次短按切換菜單選項(xiàng),直至短按退出菜單。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本电影网站 | 国产一区二区三区四区 | 中文字幕亚洲欧美 | 伊人最新网址 | 最新免费视频 | 黄色片亚洲 | 日韩av一区在线观看 | 成人在线观看免费视频 | 99精品免费视频 | 欧美一区二区三区视频 | 欧美精品1区 | 亚洲精品第一页 | 免费观看www| 中文字幕一区二区三区在线观看 | 久久视频一区 | 国产精品揄拍一区二区久久国内亚洲精 | 黑色丝袜三级在线播放 | 久久久国产精品入口麻豆 | 黄色精品| 欧美成人一区二区 | 五月激情婷婷网 | 成人在线精品视频 | 99精品视频在线观看免费播放 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产999精品久久久久久绿帽 | 国产一区二区三区四区三区四 | 五月婷婷丁香婷婷 | 欧美亚洲国产一区二区三区 | 日韩精品中文字幕一区二区三区 | 二区在线视频 | 成人高潮片免费视频欧美 | 成人欧美一区二区三区白人 | 亚洲成人免费视频 | 成人精品一区二区三区 | avtt国产 | 国产精品一区二区三区在线 | 91精品国产乱码久久久久久久久 | 国产视频久久久 | 成人福利在线 | 日韩欧美国产精品一区二区 | 日本久久福利 |