欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

STM8(STM32)單片機(jī)如何實(shí)現(xiàn)按鍵鎖定程序

查看數(shù): 5299 | 評論數(shù): 7 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2021-5-14 18:21

正文摘要:

各位大佬好,在使用STM8的時(shí)候遇到一個(gè)問題,想用比較簡便的方法解決: /*  目標(biāo):想使用一個(gè)撥碼開關(guān)來控制所有的按鍵鎖定:                  ...

回復(fù)

ID:728915 發(fā)表于 2021-5-16 20:55
名字不是重點(diǎn) 發(fā)表于 2021-5-16 15:27
你這個(gè)函數(shù)有點(diǎn)繞。。。
一般常來說,超過3個(gè)并聯(lián)關(guān)系,最好是要用Switch。。。case來做分支。
uchar k ...

噢噢,受教了,謝謝!
ID:824490 發(fā)表于 2021-5-16 15:35
          key=key_scan();
                        switch (key)
                        {
                                case 0:
                                        break;
                                case 1://ENT
                                        item++;
                                  if (item>3)
                                        {
                                                RTC_Set(tyear,tmonth,tdate,calendar.hour,calendar.min,calendar.sec);//寫入時(shí)間;
                                                OLED_Screen_Fill(0x00);
                                                ret=1;
                                        }       
                                        break;
                                case 2: //+
                                        switch (item)
                                        {
                                                case 1:
                                                        if (tyear==2029) tyear=1970;
                                                  else             tyear++;
                                                  break;
                                                case 2:
                                                        if(tmonth==12)   tmonth=1;
                                                  else                                     tmonth++;
                                                  break;
                                                case 3:
                                                        max_date=DFM[tmonth-1];
                                                  if((Is_Leap_Year(tyear)==1)&&(tmonth==2))  max_date=29;
                                                        if(tdate==max_date)    tdate=1;
                                                  else                                     tdate++;
                                                 break;
                                        }
                                        break;
                                case 3://-
                                        switch (item)
                                        {
                                                case 1:
                                                 if (tyear==1970)  tyear=2099;
                                                 else               tyear--;
                                                 break;
                                                case 2:
                                                 if(tmonth==1)    tmonth=12;
                                                 else             tmonth--;
                                                 break;
                                                case 3:
                                                 max_date=DFM[tmonth-1];
                                                 if((Is_Leap_Year(tyear)==1)&&(tmonth==2))  max_date=29;
                                                 if (tdate==1)   tdate=max_date;
                                                 else             tdate--;
                                                 break;
                                        }
                                        break;
                                default:
                                        break;
                        }               
ID:824490 發(fā)表于 2021-5-16 15:32
我,菜雞 發(fā)表于 2021-5-15 15:50
是的,可以通過函數(shù)來先行判斷,但僅通過定義來先一步實(shí)現(xiàn)按鍵鎖定判斷好像行不通。
另外,是不是除了主 ...

定義一個(gè)孌量 uchar Key_vaule;
把K1的狀態(tài)存為Key_vaule的bit0,按下為0,未按下為1,同理,K2存為bit1...
這樣一來再配合switch。case 很方便做組合鍵,也能做長短按。
ID:824490 發(fā)表于 2021-5-16 15:27
本帖最后由 名字不是重點(diǎn) 于 2021-5-16 15:33 編輯
我,菜雞 發(fā)表于 2021-5-15 15:50
是的,可以通過函數(shù)來先行判斷,但僅通過定義來先一步實(shí)現(xiàn)按鍵鎖定判斷好像行不通。
另外,是不是除了主 ...

你這個(gè)函數(shù)有點(diǎn)繞。。。
一般常來說,超過3個(gè)并聯(lián)關(guān)系,最好是要用Switch。。。case來做分支。
uchar key_value;
key_value=key_scan();
switch (key_value)
{
case: 0x01
.
.
break;
case: 0x11
.
.
break;

case.
.
.
}
ID:728915 發(fā)表于 2021-5-15 15:50
名字不是重點(diǎn) 發(fā)表于 2021-5-15 11:10
你的想法沒錯(cuò),在按鍵掃描函數(shù)的開始加入對這個(gè)開關(guān)的判斷,為0就跳過按鍵掃描

是的,可以通過函數(shù)來先行判斷,但僅通過定義來先一步實(shí)現(xiàn)按鍵鎖定判斷好像行不通。
另外,是不是除了主函數(shù)里或者極個(gè)別情況下,盡量不要使用while、或者for之類的循環(huán)語句,會(huì)過分占用CPU資源,
比如我下面的按鍵函數(shù):

//按鍵判斷,帶撥碼開關(guān)BM3按鍵鎖定
int Anjian(void)   //返回值: K1(設(shè)置鍵)短/長按:1/11; K2(+鍵)短/長按:2/22; K3(-鍵)短/長按:3/33
{  
  u16 i=0;
  if(BM3!=0)
  {
    while(1)
    {
      if(BM3==0)
      {
        break;
      }
      if(K1==0)   //K1(設(shè)置鍵)按下
      {
        while(1)
        {
          if(K1==0)
          {
            i++;
            delay_cms(1);    //方便 計(jì)算 按鍵K1(設(shè)置鍵)計(jì)數(shù)時(shí)長
            if(i>=60000)   
            {
              i=55555;      //防止達(dá)到 計(jì)數(shù)上限   
            }
          }
         
          if(K1!=0)
          {
            if(i<=179)
            {            
              return 1;     //判斷K1(設(shè)置鍵)為:短按(約3秒以內(nèi))
            }
            if(i>=180)
            {        
               return 11;   //判斷K1(設(shè)置鍵)為:長按(約4秒以后)                 
            }                 
          }
        }
      }
      
      if(K2==0)   //K2(+鍵)按下
      {
        while(1)
        {
          if(K2==0)
          {
            i++;
            delay_cms(1);    //方便 計(jì)算 按鍵K2(+鍵)計(jì)數(shù)時(shí)長
            if(i>=60000)   
            {
              i=55555;      //防止達(dá)到 計(jì)數(shù)上限   
            }
          }
         
          if(K2!=0)
          {
            if(i<=179)
            {            
              return 2;     //判斷K2(+鍵)為:短按(約3秒以內(nèi))
            }
            if(i>=180)
            {        
               return 22;   //判斷K2(+鍵)為:長按(約4秒以后)                  
            }                 
          }
        }
      }

      if(K3==0)   //K3(-鍵)按下
      {
        while(1)
        {
          if(K3==0)
          {
            i++;
            delay_cms(1);    //方便 計(jì)算 按鍵K3(-鍵)計(jì)數(shù)時(shí)長
            if(i>=60000)   
            {
              i=55555;      //防止達(dá)到 計(jì)數(shù)上限   
            }
          }
         
          if(K3!=0)
          {
            if(i<=179)
            {            
              return 3;     //判斷K3(-鍵)為:短按(約3秒以內(nèi))
            }
            if(i>=180)
            {        
               return 33;   //判斷K3(-鍵)為:長按(約4秒以后)                  
            }                 
          }
        }
      }   
    }     
  }  
}
ID:919615 發(fā)表于 2021-5-15 15:22

你的想法沒錯(cuò),在按鍵掃描函數(shù)的開始加入對這個(gè)開關(guān)的判斷,為0就跳過按鍵掃描
ID:824490 發(fā)表于 2021-5-15 11:10
你的想法沒錯(cuò),在按鍵掃描函數(shù)的開始加入對這個(gè)開關(guān)的判斷,為0就跳過按鍵掃描

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

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

快速回復(fù) 返回頂部 返回列表