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

標題: 為什么這個單片機程序獨立按鍵長按才起作用 [打印本頁]

作者: abcarry    時間: 2018-5-16 14:17
標題: 為什么這個單片機程序獨立按鍵長按才起作用
程序是我這里復制的,按鍵程序是我自己寫的,求大神幫看下,為什么按鍵要長按下 才有反應;
  1. while (1)
  2.     {
  3.            if (flag1s)  //每秒更新一次溫度
  4.           {
  5.                   LcdShowStr(0, 1, "WD:");        //顯示到液晶屏上
  6.               LcdShowStr(6, 1, "SD:");        //顯示到液晶屏上
  7.               LcdShowStr(0, 0, "F:");
  8.            DHT_Start();
  9.                         tmp1=DHT_ByteRead(&DHT);
  10.                    if(tmp1==1)
  11.                    {
  12.                    str[0] = (DHT[0]/10)%10 + '0';  //十位轉為ASCII碼
  13.            str[1] = (DHT[0]%10) + '0';  //個位轉為ASCII
  14.                str[2] = '\0';
  15.                    LcdShowStr(9, 1, str);

  16.                    str[0] = (DHT[2]/10)%10 + '0';  //十位轉為ASCII碼
  17.            str[1] = (DHT[2]%10) + '0';  //個位轉為ASCII
  18.            str[2] = '\0';
  19.                LcdShowStr(3,1, str);

  20.                    WD= DHT[2];
  21.                    SD=DHT[0];
  22.                   temp2=adc0832(voc);
  23.                   if(temp2==1)
  24.                    {str[0] =  voc/1000 + '0';  
  25.            str[1] = (voc%1000)/100 + '0';
  26.                    str[2] = ((voc%1000)%100)/10 + '0';
  27.                    str[3] = ('.')  ;
  28.                    str[4] = ((voc%1000)%100)%10 + '0';
  29.                    str[5] = '\0';   
  30.                LcdShowStr(2, 0, str);
  31.                   
  32.                   }
  33.                           
  34.                    }
  35.                   
  36.          
  37.                 key();
  38.         }
  39.          
  40.                
  41.                
  42.                  
  43.          

  44.                  
  45. }                 
  46.          
  47. }


  48. void key (void)
  49. {                 unsigned char str[12];
  50.                
  51. if(Key1==0)
  52.                 {  
  53.                  set++;
  54.                   delay();
  55.                   if(set==1)
  56.                     LcdShowStr(7, 0, "STH:");        
  57.                   if(set==2)
  58.                     LcdShowStr(7, 0, "STL:");         
  59.                   if(set==3)
  60.                     LcdShowStr(7, 0, "SRH:");        
  61.                   if(set==4)
  62.                     LcdShowStr(7, 0, "SRL:");
  63.                   if(set==5)
  64.                     LcdShowStr(7, 0, "VOC:");                 
  65.                 if(set>=6)
  66.                 set=0;
  67.         while(!Key1);                                                   
  68.                 }
  69.                 if(Key2==0)
  70.                 {

  71.                 if(set==1)
  72.                 {
  73.                  STH++;
  74.                    str[0] = (STH/10)%10 + '0';  
  75.            str[1] = (STH%10) + '0';  
  76.            str[2] = '\0';
  77.                LcdShowStr(11, 0, str);
  78.                 }
  79.                 if(set==2)
  80.                 {
  81.                  STL++;
  82.                    str[0] = (STL/10)%10 + '0';
  83.            str[1] = (STL%10) + '0';  
  84.            str[2] = '\0';
  85.                LcdShowStr(11,0, str);
  86.                 }
  87.                 if(set==3)
  88.                 {
  89.                  SRH++;
  90.                    str[0] = (SRH/10)%10 + '0';
  91.            str[1] = (SRH%10) + '0';  
  92.            str[2] = '\0';
  93.                LcdShowStr(11, 0, str);

  94.                 }
  95.                                 if(set==4)
  96.                 {
  97.                   SRL++;
  98.                    str[0] = (SRL/10)%10 + '0';
  99.            str[1] = (SRL%10) + '0';  
  100.            str[2] = '\0';
  101.                LcdShowStr(11, 0, str);
  102.                 }
  103.                         if(set==5)
  104.                 {
  105.                   VOC++;
  106.                    str[0] = (VOC/10)%10 + '0';
  107.            str[1] = (VOC%10) + '0';  
  108.            str[2] = '\0';
  109.                LcdShowStr(11, 0, str);
  110.                 }

  111.                   delay();
  112.                 }

  113.                 if(Key3==0)
  114.                 {
  115.                                  if(set==1)
  116.                 {
  117.                  STH--;
  118.                  str[0] = (STH/10)%10 + '0';  
  119.            str[1] = (STH%10) + '0';  
  120.            str[2] = '\0';
  121.                LcdShowStr(11, 0, str);
  122.                 }
  123.                                 if(set==2)
  124.                 {
  125.                   STL--;
  126.                   str[0] = (STL/10)%10 + '0';  
  127.            str[1] = (STL%10) + '0';  
  128.            str[2] = '\0';
  129.                LcdShowStr(11, 0, str);
  130.                 }
  131.                                 if(set==3)
  132.                 {
  133.                  SRH--;
  134.                  str[0] = (SRH/10)%10 + '0';  
  135.            str[1] = (SRH%10) + '0';  
  136.            str[2] = '\0';
  137.                LcdShowStr(11, 0, str);
  138.                 }
  139.                                 if(set==4)
  140.                 {
  141.                  SRL--;
  142.                  str[0] = (SRL/10)%10 + '0';  
  143.            str[1] = (SRL%10) + '0';  
  144.            str[2] = '\0';
  145.                LcdShowStr(11, 0, str);
  146.                 }
  147.                 if(set==5)
  148.                 {
  149.                  VOC--;
  150.                  str[0] = (VOC/10)%10 + '0';  
  151.            str[1] = (VOC%10) + '0';  
  152.            str[2] = '\0';
  153.                LcdShowStr(11, 0, str);
  154.                 }
  155.                   delay();
  156.                 }
  157.         if(Key4==0)
  158.                 {

  159.                   delay();
  160.                   set=0;
  161.                   InitLcd1602();
  162.                    //初始化液晶
  163.                 }
  164.                
  165. }
  166.          





  167. void ConfigTimer0(unsigned int ms)
  168. {
  169.     unsigned long tmp;  //臨時變量

  170.     tmp = 11059200 / 12;      //定時器計數頻率
  171.     tmp = (tmp * ms) / 1000;  //計算所需的計數值
  172.     tmp = 65536 - tmp;        //計算定時器重載值
  173.     tmp = tmp + 12;           //補償中斷響應延時造成的誤差
  174.     T0RH = (unsigned char)(tmp>>8);  //定時器重載值拆分為高低字節
  175.     T0RL = (unsigned char)tmp;
  176.     TMOD &= 0xF0;   //清零T0的控制位
  177.     TMOD |= 0x01;   //配置T0為模式1
  178.     TH0 = T0RH;     //加載T0重載值
  179.     TL0 = T0RL;
  180.     ET0 = 1;        //使能T0中斷
  181.     TR0 = 1;        //啟動T0
  182. }
  183. /* T0中斷服務函數,完成1秒定時 */
  184. void InterruptTimer0() interrupt 1
  185. {         
  186.     static unsigned char tmr1s = 0;

  187.     TH0 = T0RH;  //重新加載重載值
  188.     TL0 = T0RL;
  189.     tmr1s++;
  190.     if (tmr1s >= 100)  //定時1s
  191.     {
  192.         tmr1s = 0;
  193.         flag1s = 1;
  194.       
  195.         }


  196. }
復制代碼




作者: 月城/    時間: 2018-5-16 14:44
因為你的程序還沒走到按鍵感應吧,不建議用delay寫程序。
作者: zhanghyg    時間: 2018-5-16 15:19
第一你按鍵沒有做消抖處理,第二你while(!Key1)這句位置應該緊跟著if(Key1==0)的后面。
作者: liu281469315    時間: 2018-5-16 15:21
初步判斷是你的按鍵1s輪詢時間過長,可以按鍵單獨出來,然后新定一個標志,30ms掃描一次按鍵,主要就很快了,
1s對按鍵來說的確太長了
作者: 雨廬    時間: 2018-5-16 16:08
不建議用delay寫程序
作者: s2318037    時間: 2018-5-16 16:12
消抖的原因吧
作者: 12345yj    時間: 2018-5-16 17:40
去抖動,采集按鍵值需要一定的周期才能采集到信號
作者: abcarry    時間: 2018-5-16 19:39
zhanghyg 發表于 2018-5-16 15:19
第一你按鍵沒有做消抖處理,第二你while(!Key1)這句位置應該緊跟著if(Key1==0)的后面。

消抖 還是一樣,反應時間長,
作者: abcarry    時間: 2018-5-16 19:41
liu281469315 發表于 2018-5-16 15:21
初步判斷是你的按鍵1s輪詢時間過長,可以按鍵單獨出來,然后新定一個標志,30ms掃描一次按鍵,主要就很快了,
1 ...

按鍵子程序 獨立出來不在FLAG1S里面嗎?
作者: abcarry    時間: 2018-5-16 19:42
12345yj 發表于 2018-5-16 17:40
去抖動,采集按鍵值需要一定的周期才能采集到信號

已經去抖動了,但是還是按鍵按下后還是要很長時間才能反應
作者: abcarry    時間: 2018-5-16 20:42
12345yj 發表于 2018-5-16 17:40
去抖動,采集按鍵值需要一定的周期才能采集到信號

我按下按鍵 5S-6S才會有反應,應該沒有這么長周期吧
作者: abcarry    時間: 2018-5-16 21:17
感謝大家,我已經找出原因了。。
作者: admin    時間: 2018-5-17 01:29
abcarry 發表于 2018-5-16 21:17
感謝大家,我已經找出原因了。。

原因是什么 能分享下嗎?

作者: xiaoshan7748    時間: 2018-5-17 09:07
1s才讀一次按鍵肯定要長按啊
作者: zhengkai    時間: 2018-5-17 09:22
需要加入防抖才能正常使用,就是判斷兩次按鍵電平,并加入一個延時。例如:
if(key==0)
{
delay(10);
if(key==0)
{//你需要進行的操作
}
};
作者: XIYIQQ    時間: 2018-5-17 09:54
按鍵  沒做處理   也就是   每次按下按鍵   需要延時
作者: abcarry    時間: 2018-5-17 09:54
admin 發表于 2018-5-17 01:29
原因是什么 能分享下嗎?

delay()函數延時長  并且 多次成倍調用delay()函數
作者: include599    時間: 2018-5-17 11:14
對io口查詢的頻率不夠高
作者: 快樂眼淚    時間: 2020-3-4 18:00
我的也是這問題,樓主怎么解決的?
作者: chengyuyu    時間: 2020-5-20 09:04
abcarry 發表于 2018-5-17 09:54
delay()函數延時長  并且 多次成倍調用delay()函數

請問您是怎么解決的呢,我也遇到了按鍵得長按才能起作用的問題。
作者: PDDDF    時間: 2020-5-20 14:21
5樓說的有道理,剛開始學習寫程序用DELAY能方便地理解程序運行過程,但是往后的話還是養成寫程序盡量不用delay的習慣為好




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