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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8885|回復(fù): 20
打印 上一主題 下一主題
收起左側(cè)

為什么這個(gè)單片機(jī)程序獨(dú)立按鍵長按才起作用

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:272459 發(fā)表于 2018-5-16 14:17 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
程序是我這里復(fù)制的,按鍵程序是我自己寫的,求大神幫看下,為什么按鍵要長按下 才有反應(yīng);
  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';  //十位轉(zhuǎn)為ASCII碼
  13.            str[1] = (DHT[0]%10) + '0';  //個(gè)位轉(zhuǎn)為ASCII
  14.                str[2] = '\0';
  15.                    LcdShowStr(9, 1, str);

  16.                    str[0] = (DHT[2]/10)%10 + '0';  //十位轉(zhuǎn)為ASCII碼
  17.            str[1] = (DHT[2]%10) + '0';  //個(gè)位轉(zhuǎn)為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;  //臨時(shí)變量

  170.     tmp = 11059200 / 12;      //定時(shí)器計(jì)數(shù)頻率
  171.     tmp = (tmp * ms) / 1000;  //計(jì)算所需的計(jì)數(shù)值
  172.     tmp = 65536 - tmp;        //計(jì)算定時(shí)器重載值
  173.     tmp = tmp + 12;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
  174.     T0RH = (unsigned char)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
  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中斷服務(wù)函數(shù),完成1秒定時(shí) */
  184. void InterruptTimer0() interrupt 1
  185. {         
  186.     static unsigned char tmr1s = 0;

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


  196. }
復(fù)制代碼



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

使用道具 舉報(bào)

沙發(fā)
ID:225135 發(fā)表于 2018-5-16 14:44 | 只看該作者
因?yàn)槟愕某绦蜻沒走到按鍵感應(yīng)吧,不建議用delay寫程序。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

消抖 還是一樣,反應(yīng)時(shí)間長,

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

按鍵子程序 獨(dú)立出來不在FLAG1S里面嗎?
回復(fù)

使用道具 舉報(bào)

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

已經(jīng)去抖動了,但是還是按鍵按下后還是要很長時(shí)間才能反應(yīng)
回復(fù)

使用道具 舉報(bào)

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

我按下按鍵 5S-6S才會有反應(yīng),應(yīng)該沒有這么長周期吧
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

原因是什么 能分享下嗎?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

delay()函數(shù)延時(shí)長  并且 多次成倍調(diào)用delay()函數(shù)
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品乱码一区二三区小蝌蚪 | 99国产精品久久久久 | 亚洲成人精品久久 | 亚洲激精日韩激精欧美精品 | 成人区精品 | 香蕉久久av | 久久网站免费视频 | 欧美日韩国产免费 | 一级免费毛片 | 91高清视频在线观看 | 国产精品一区二区三区在线 | 久久伊人影院 | 国产精品国产精品国产专区不片 | 午夜影视免费片在线观看 | 国产精品视频一 | 蜜桃毛片| 欧美一区永久视频免费观看 | 欧美一级黄色免费看 | 国产专区视频 | 最近中文字幕免费 | 久久国产精品一区二区三区 | 欧美激情a∨在线视频播放 成人免费共享视频 | 亚洲一区二区日韩 | 成人精品区| 在线视频亚洲 | 国产jizz女人多喷水99 | 97色在线观看免费视频 | 99在线免费观看视频 | 欧美一级欧美三级在线观看 | 日韩精品一区二区三区在线观看 | av中文字幕在线观看 | 久久99久久99久久 | 国产在线一区二区三区 | 亚洲一一在线 | 久热免费 | 天天操,夜夜爽 | 日本久久网 | 这里有精品 | 亚洲成人精品国产 | 农村妇女毛片精品久久久 | 一区二区三区四区电影 |