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

標題: 請教單片機按鍵雙擊的問題 [打印本頁]

作者: tianqi911    時間: 2018-10-19 09:16
標題: 請教單片機按鍵雙擊的問題
1.不要所謂的狀態機方法    2.不要開定時器0的中斷(開/關定時器0 但不開中斷)  
3.如果開中斷也行(不得已最后方法)

說明:因為用的是觸摸單片機的觸摸按鍵。 按鍵為1有效。不需要濾波。

實現的基本原理:判斷2次按下的時間,>500(or250ms)再有按鍵按下,就是雙擊;沒有就是_單擊_。


目前的狀況:我水平很菜,網上看了很多,書上也翻了,我是沒實現的了。已經搞了_3天_了,就這個功能了,怎么弄都不行了,快崩潰了。


作者: 15942379927    時間: 2018-10-19 10:03
用定時器掃面計數非中斷模式  假設按鍵1被觸摸  內置flag=1  定時器掃描時間為50ms 讓標志time0計數 計數到10時即為500ms 再讓flag=2 再次按鍵即可生效
作者: taotie    時間: 2018-10-19 11:21
使用計數法識別長短按*/
#include<reg52.h>
#define key_S 1000 //宏定義短按(約20ms)
#define key_L key_S*50 //宏定義長按(約1s)
//定義端口
sbit KEY=P1^4;
sbit LED1 = P2^0;
sbit LED2 = P2^1;
unsigned int count=0;//計數變量

int main (void)
{
        LED1=1;
        LED2=1;               
        KEY=1; //按鍵輸入端口電平置高      
        while(1)         //主循環
        {
                if(!KEY)  //如果檢測到低電平,說明按鍵按下
                {  
                        count++;  
                        if(count==key_L)                                //長按
                                LED2=!LED2;
                        if(count>key_L)
                                count=key_L+1;                                //防止count溢出         
                }  
                else                                                                        //按鍵抬起
                {  
                        if(count>key_S && count<key_L)//短按
                                LED1=!LED1;
                        count=0;                                                        //count清0
                }   
        }
}

作者: tianqi911    時間: 2018-10-23 09:36
15942379927 發表于 2018-10-19 10:03
用定時器掃面計數非中斷模式  假設按鍵1被觸摸  內置flag=1  定時器掃描時間為50ms 讓標志time0計數 計數到 ...

牛比。
作者: m182892    時間: 2019-8-24 10:02
taotie 發表于 2018-10-19 11:21
使用計數法識別長短按*/
#include
#define key_S 1000 //宏定義短按(約20ms)

你的程序是按鍵長短按鍵程序,別人要按鍵雙擊程序。
作者: 陌上輕雨寒    時間: 2019-8-24 12:15
百度搜索杜洋師傅一鍵多能視頻,講的很好
作者: xianfajushi    時間: 2019-8-24 20:03
https://blog.csdn.net/xianfajushi/article/details/82281411
作者: 鵬博士PBs    時間: 2019-8-25 07:04
清零置1即可
作者: npn    時間: 2021-12-6 12:52
你可以看看這個程序 按鍵雙擊 N連擊 都可以
  1. #include "STC15F104E.h"
  2. #include "intrins.h"
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5. #define feed_dog() WDT_CONTR |= 0x10
  6. sbit sKEY = P3 ^ 2;
  7. sbit LED = P3 ^ 3;
  8. bit KEY = 1;
  9. u8 KEYms = 0;       //按鍵按下時間毫秒 松開清0
  10. u8 leave = 0;      //按鍵松開時間 減到0 則連擊清0
  11. u8 add = 0;         //按鍵連擊次數
  12. void InitTimer0(){
  13.     TMOD = 0x01;
  14.     TH0 = 0x0FC;
  15.     TL0 = 0x18;
  16.     EA = 1;
  17.     ET0 = 1;
  18.     TR0 = 1;
  19. }

  20. void main(){
  21.     WDT_CONTR = 0x27;
  22.     InitTimer0();
  23.     P3M0=0x08;P3M1=0x00;
  24.     while (1) {
  25.         feed_dog();
  26.         if (KEY == 0) {
  27.             leave = 250;        //等待250毫秒
  28.             if (++add >= 2) {   //雙擊
  29.                 add = 0;
  30.                 LED = !LED;     //LED亮滅翻轉
  31.             }
  32.             while (KEY == 0) {
  33.                 feed_dog();
  34.             }
  35.         }
  36.     }
  37. }

  38. void Timer0Interrupt() interrupt 1 { //12Mhz 1mS定時器中斷
  39.     TH0 = 0x0FC;
  40.     TL0 = 0x18;
  41.     if (leave && !--leave) {
  42.             add = 0;
  43.     }
  44.     if (sKEY) {
  45.         KEYms = 0;
  46.     } else {
  47.         if (KEYms != 0xFF) {
  48.             KEYms++;
  49.         }
  50.     }

  51.     KEY = !(KEYms >= 25);
  52. }
復制代碼





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