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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8974|回復: 20
打印 上一主題 下一主題
收起左側

為什么這個單片機程序獨立按鍵長按才起作用

  [復制鏈接]
跳轉到指定樓層
樓主
ID:272459 發表于 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. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:225135 發表于 2018-5-16 14:44 | 只看該作者
因為你的程序還沒走到按鍵感應吧,不建議用delay寫程序。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:330198 發表于 2018-5-16 15:19 | 只看該作者
第一你按鍵沒有做消抖處理,第二你while(!Key1)這句位置應該緊跟著if(Key1==0)的后面。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:331281 發表于 2018-5-16 15:21 | 只看該作者
初步判斷是你的按鍵1s輪詢時間過長,可以按鍵單獨出來,然后新定一個標志,30ms掃描一次按鍵,主要就很快了,
1s對按鍵來說的確太長了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:331365 發表于 2018-5-16 16:08 | 只看該作者
不建議用delay寫程序

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:315386 發表于 2018-5-16 16:12 | 只看該作者
消抖的原因吧

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:304161 發表于 2018-5-16 17:40 來自手機 | 只看該作者
去抖動,采集按鍵值需要一定的周期才能采集到信號

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

8#
ID:272459 發表于 2018-5-16 19:39 | 只看該作者
zhanghyg 發表于 2018-5-16 15:19
第一你按鍵沒有做消抖處理,第二你while(!Key1)這句位置應該緊跟著if(Key1==0)的后面。

消抖 還是一樣,反應時間長,

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

9#
ID:272459 發表于 2018-5-16 19:41 | 只看該作者
liu281469315 發表于 2018-5-16 15:21
初步判斷是你的按鍵1s輪詢時間過長,可以按鍵單獨出來,然后新定一個標志,30ms掃描一次按鍵,主要就很快了,
1 ...

按鍵子程序 獨立出來不在FLAG1S里面嗎?
回復

使用道具 舉報

10#
ID:272459 發表于 2018-5-16 19:42 | 只看該作者
12345yj 發表于 2018-5-16 17:40
去抖動,采集按鍵值需要一定的周期才能采集到信號

已經去抖動了,但是還是按鍵按下后還是要很長時間才能反應
回復

使用道具 舉報

11#
ID:272459 發表于 2018-5-16 20:42 | 只看該作者
12345yj 發表于 2018-5-16 17:40
去抖動,采集按鍵值需要一定的周期才能采集到信號

我按下按鍵 5S-6S才會有反應,應該沒有這么長周期吧
回復

使用道具 舉報

12#
ID:272459 發表于 2018-5-16 21:17 | 只看該作者
感謝大家,我已經找出原因了。。
回復

使用道具 舉報

13#
ID:1 發表于 2018-5-17 01:29 | 只看該作者
abcarry 發表于 2018-5-16 21:17
感謝大家,我已經找出原因了。。

原因是什么 能分享下嗎?
回復

使用道具 舉報

14#
ID:194257 發表于 2018-5-17 09:07 | 只看該作者
1s才讀一次按鍵肯定要長按啊
回復

使用道具 舉報

15#
ID:320371 發表于 2018-5-17 09:22 | 只看該作者
需要加入防抖才能正常使用,就是判斷兩次按鍵電平,并加入一個延時。例如:
if(key==0)
{
delay(10);
if(key==0)
{//你需要進行的操作
}
};
回復

使用道具 舉報

16#
ID:331894 發表于 2018-5-17 09:54 | 只看該作者
按鍵  沒做處理   也就是   每次按下按鍵   需要延時
回復

使用道具 舉報

17#
ID:272459 發表于 2018-5-17 09:54 | 只看該作者
admin 發表于 2018-5-17 01:29
原因是什么 能分享下嗎?

delay()函數延時長  并且 多次成倍調用delay()函數
回復

使用道具 舉報

18#
ID:223416 發表于 2018-5-17 11:14 | 只看該作者
對io口查詢的頻率不夠高
回復

使用道具 舉報

19#
ID:399179 發表于 2020-3-4 18:00 來自手機 | 只看該作者
我的也是這問題,樓主怎么解決的?
回復

使用道具 舉報

20#
ID:755110 發表于 2020-5-20 09:04 | 只看該作者
abcarry 發表于 2018-5-17 09:54
delay()函數延時長  并且 多次成倍調用delay()函數

請問您是怎么解決的呢,我也遇到了按鍵得長按才能起作用的問題。
回復

使用道具 舉報

21#
ID:601478 發表于 2020-5-20 14:21 | 只看該作者
5樓說的有道理,剛開始學習寫程序用DELAY能方便地理解程序運行過程,但是往后的話還是養成寫程序盡量不用delay的習慣為好
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国三级黄色录像 | 永久网站 | 久草视频在线播放 | 亚洲区一区二 | 在线播放日韩 | 国产成人精品一区二区三区视频 | 91精品在线播放 | 日韩中文字幕区 | 波多野结衣一区二区三区在线观看 | 日韩色图在线观看 | 精品视频网 | 日日天天| 翔田千里一区二区 | 午夜在线影院 | 精品久久亚洲 | 国产精品久久久久久久久久 | 视频一区在线播放 | 四虎免费视频 | 欧美久久精品一级黑人c片 91免费在线视频 | 国产精品亚洲精品日韩已方 | 免费成人国产 | 91精品国产乱码久久久久久久久 | 粉嫩国产精品一区二区在线观看 | www.嫩草 | 午夜av免费 | h视频免费观看 | 精品亚洲一区二区 | 日韩精品在线观看一区二区三区 | 天天操 夜夜操 | 色综合久久久久 | ririsao久久精品一区 | 亚洲免费视频一区 | 99久久日韩精品免费热麻豆美女 | 欧美视频在线一区 | 精品视频在线一区 | 综合网中文字幕 | 国产精品亚洲二区 | 日本福利视频 | 中文字幕视频在线观看 | av永久免费 | 精品一二区 |