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

標(biāo)題: 51單片機(jī)實(shí)現(xiàn)不同按鍵不同功能源程序 按鍵延遲 [打印本頁(yè)]

作者: xuehai0405    時(shí)間: 2019-6-18 11:35
標(biāo)題: 51單片機(jī)實(shí)現(xiàn)不同按鍵不同功能源程序 按鍵延遲
家里的壁掛管線機(jī)的一個(gè)程序,有2個(gè)抽水泵,一個(gè)是水位計(jì)控制水箱水泵,水位計(jì)是SW,有水位1,無(wú)水0。另外一個(gè)泵就是排水水泵,按鍵按下之后排水開(kāi)始,然后延時(shí)關(guān)閉。加熱也是一樣,按下加熱,延時(shí)關(guān)閉。現(xiàn)在的問(wèn)題是,水位計(jì)自動(dòng)上下水的程序?qū)懥酥螅存I就會(huì)有點(diǎn)延遲,必須要長(zhǎng)按才能有反應(yīng),這個(gè)是與水位計(jì)有水位長(zhǎng)期觸發(fā)按鍵有關(guān)。還有就是,按鍵1按下后,馬上再按按鍵2,是沒(méi)有反應(yīng)的,必須要按鍵1的程序執(zhí)行完之后再按按鍵2才有反應(yīng)。
想知道怎么樣才能讓按鍵水位各不干擾,按下執(zhí)行程序再按別的按鍵能同時(shí)執(zhí)行別的程序。

單片機(jī)源程序如下:
  1. void main()
  2. {
  3.         while(1)
  4.         {
  5.                         if(sw==0)                         //sw水位開(kāi)關(guān) 無(wú)水位1秒后抽水
  6.                         {                                         
  7.                                 delay(1000);                 
  8.                                 if(sw==0)                 
  9.                                 {
  10.                                         sb1=1;                  //泵1運(yùn)行
  11.                                 }
  12.                         }

  13.                         if(sw==1)                         //有水位1秒后關(guān)泵
  14.                         {
  15.                                 delay(1000);                 
  16.                                 if(sw==1)                 
  17.                                 {
  18.                                         sb1=0;                  //泵1停止
  19.                                 }
  20.                         }


  21.                         if(aj1==0)                         //按鍵1
  22.                         {
  23.                                 delay(10);                 
  24.                                 if(aj1==0)                 
  25.                                 {
  26.                                         while(!aj1);//等待按鍵釋放
  27.                                         sb2=1;                  //泵2運(yùn)行
  28.                                         delay(5000);
  29.                                         sb2=0;                  //泵2停止
  30.                                 }
  31.                         }

  32.                         if(aj2==0)                         //按鍵2
  33.                         {
  34.                                 delay(10);                 
  35.                                 if(aj2==0)                 
  36.                                 {
  37.                                         while(!aj2);//等待按鍵釋放
  38.                                         jr=1;                  //加熱運(yùn)行
  39.                                         delay(15000);
  40.                                         jr=0;                  //加熱停止
  41.                                                 
  42.                                 }
  43.                         }

  44.         }

  45. }
復(fù)制代碼




作者: bhjyqjs    時(shí)間: 2019-6-25 08:58
在定時(shí)器中斷中檢測(cè)按鍵,再置位相應(yīng)標(biāo)志,再在主程序中執(zhí)行相應(yīng)動(dòng)作即可。
萬(wàn)不可在程序中出現(xiàn)類似delay(1000);  之類的東西!
作者: egypt    時(shí)間: 2019-6-25 10:18
多浪費(fèi)個(gè)變量做按住的計(jì)時(shí),main 循環(huán)中要加 delay_ms 以劃分時(shí)間片

按住計(jì)時(shí)大致寫(xiě)法是:( 假設(shè) 按住時(shí) key=0 ,松手時(shí) key=1 。 key_count 是 s8 類型,初值為 0)

有了 key_count 就可以玩不少花樣,比方說(shuō)去抖、判斷按下瞬間、判斷松開(kāi)瞬間。而且 main 程序邏輯并未阻塞,只是靠 count 做計(jì)數(shù),下述代碼對(duì)并發(fā)性事務(wù)毫無(wú)阻塞。
if( key==0)
{  if(key_count==0) do_press_key(); if(key_count<100) key_count++; }
else
{  if(key_count>0) do_release_key();  key_count=0; }

(補(bǔ)充:例如去抖需要8毫秒,并且 main 循環(huán)每 ms 呼叫上述代碼,就需要修改為下述形式

    if( key==0)
    {  if(key_count==8) do_press_key(); if(key_count<100) key_count++; }
    else
    {  if(key_count>8) do_release_key();  key_count=0; }







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1