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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3455|回復: 7
收起左側

請問單片機怎么用延時做按鍵長按延時?

[復制鏈接]
ID:644190 發表于 2019-11-21 22:35 | 顯示全部樓層 |閱讀模式
大神們你們好,本人單片機新手,在做萬年歷的時候為了節省一個按鍵,想把加的那個按鍵,做成功能是:單次按下只加一次,長按開始快速遞增,但是只能做出來前半部分功能,關于這個功能的代碼如下:
        if(i==333)
                  {        if(KEY2==1)
                          {
                                  i=0;
                          }
                  
                          goto j;
                  }
                else
                  {
                    while(!KEY2)
                    {
                     delay(5);
                     i++;                    }
                  }

j :{;}

求解答,問題比較白癡,希望不要笑話哈哈,感謝大家
回復

使用道具 舉報

ID:25310 發表于 2019-11-22 08:06 | 顯示全部樓層
檢測時給個時間比如超過300mS算長按,小于300算短按。操作時再調整.
回復

使用道具 舉報

ID:158375 發表于 2019-11-22 08:33 | 顯示全部樓層
按鍵是怎么掃描,怎么消小抖的呢?

如果是用定時器方式,很好辦的;確認按鍵位置后,時間長短根據進中斷次數即可區分長按鍵和短按鍵。
回復

使用道具 舉報

ID:644141 發表于 2019-11-22 09:05 | 顯示全部樓層
用狀態機進行掃描
回復

使用道具 舉報

ID:470332 發表于 2019-11-22 09:11 | 顯示全部樓層
你這按鍵問題比較大呀
回復

使用道具 舉報

ID:592807 發表于 2019-11-22 09:12 | 顯示全部樓層
if(i== 300)然 厚if(KEY2 ==1)i=0  
else whlle(!KEY2){ i++}

你的定義的變量  i  是什么?是按鍵時間還是計數器
回復

使用道具 舉報

ID:213173 發表于 2019-11-22 10:31 | 顯示全部樓層
給你一個長、短按鍵示例參考。
  1. #include <REG51.H>
  2. #define uint unsigned int                         //宏定義數據類型uint
  3. #define uchar unsigned char                 //宏定義數據類型uchar
  4. #define key_S 500                                        //宏定義短按(約20ms)
  5. #define key_L 16000                                        //宏定義長按(約2/3s)
  6. #define key_M 11000                                        //宏定義長按間隔(約1/3s)
  7. sbit key1=P3^6;                                                //加鍵
  8. sbit key2=P3^7;                                                //減鍵
  9. uchar num=1;

  10. void keyscan()                                                //按鍵掃描
  11. {
  12.         static uint count1=0,count2=0;        //計數變量
  13.         if(!key1)   
  14.         {  
  15.                 count1++;  
  16.                 if(count1>=key_L)                        //長按
  17.                 {
  18.                         if(num<255)
  19.                                 num++;        
  20.                         count1=key_M;
  21.                 }
  22.         }  
  23.         else                                                        //按鍵抬起
  24.         {  
  25.                 if(count1>key_S && count1<key_L)//短按
  26.                 {
  27.                         if(num<255)
  28.                                 num++;
  29.                 }
  30.                 count1=0;                                        //count清0
  31.         }   
  32.         if(!key2)   
  33.         {  
  34.                 count2++;  
  35.                 if(count2>=key_L)                        //長按
  36.                 {
  37.                         if(num>0)
  38.                                 num--;        
  39.                         count2=key_M;
  40.                 }
  41.         }  
  42.         else                                                        //按鍵抬起
  43.         {  
  44.                 if(count2>key_S && count2<key_L)//短按
  45.                 {
  46.                         if(num>0)
  47.                                 num--;
  48.                 }
  49.                 count2=0;                                        //count清0
  50.         }
  51. }

  52. void main()
  53. {
  54.         while(1)                                                //12MHz晶振主循環周期33~41us
  55.         {
  56.                
  57.                 keyscan();                                        //按鍵掃描
  58.                 P1=~num;                                        //LED低電平顯示
  59.         }
  60. }
復制代碼
回復

使用道具 舉報

ID:123289 發表于 2019-11-23 10:59 | 顯示全部樓層
1、別人的按鍵動作,你是無法延時的,因為你不能控制別人的手。
2、按鍵后是否響應卻是你可以控制的。
3、檢測到按鍵后,你就起動一個定時器,定時器動作后,你再響應按鍵的“動作需求”,這就OK了。當然你還要考慮中途取消等等問題,這是你需要做的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩亚洲欧美一区 | 国产乱码精品1区2区3区 | 亚洲国产精品久久人人爱 | 一区二区三区日韩 | 在线观看涩涩视频 | 日日想夜夜操 | 美日韩一区二区 | 国产视频精品在线 | 亚洲成人福利视频 | 91亚洲国产亚洲国产 | 日韩高清一区 | 久久久久久九九九九 | 草久久久 | 国产一级一片免费播放 | 中文字幕一区在线 | 日本精品一区 | 91在线精品秘密一区二区 | 免费日韩av网站 | 999www视频免费观看 | 超碰在线影院 | 日韩免费av网站 | 日韩av免费在线观看 | 成人免费视屏 | 日韩在线高清 | 天堂av中文在线 | 国产一区二区毛片 | 91精品国产综合久久久久久丝袜 | 亚洲精品乱码久久久久久按摩 | 欧美国产一区二区三区 | 中文字幕视频在线观看 | 欧美韩一区二区三区 | 欧美性区| 国产一区二区在线免费视频 | 黄色免费网址大全 | 男女免费观看在线爽爽爽视频 | 中文字幕国产精品 | 操到爽 | 国产成人免费视频 | 国产免费黄网 | 久草新在线| 久久男人天堂 |