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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4452|回復(fù): 15
收起左側(cè)

請教關(guān)于MCU單個按鍵實現(xiàn)不同次數(shù)的點擊對應(yīng)不同功能的處理思想

[復(fù)制鏈接]
ID:258164 發(fā)表于 2018-11-29 10:37 | 顯示全部樓層 |閱讀模式
現(xiàn)在我有一個按鍵(通過MCU IO口判斷電平的),有長按和短按兩種方式,現(xiàn)在長短按功能實現(xiàn)了,但是現(xiàn)在我遇到一個新的問題:我這個按鍵可能需要按1次到多次,然后不同的次數(shù)對應(yīng)不同的功能。因為我現(xiàn)在的短按時間設(shè)定的是50ms-2s,在多次檢查按鍵連續(xù)短按的時候,請問我該怎么處理,才能保證我可以識別具體按鍵的次數(shù)呢?

具體的實例可以參考現(xiàn)實生活中的電磁爐,菜單鍵按一次到多次,切換到不同的功能。

希望做過類似功能邏輯的壇友提供點思路,謝謝!
回復(fù)

使用道具 舉報

ID:94031 發(fā)表于 2018-11-29 11:34 | 顯示全部樓層
設(shè)一個變量存放在一定時間內(nèi)點擊次數(shù),根據(jù)這個變量決定程序走向。
回復(fù)

使用道具 舉報

ID:410399 發(fā)表于 2018-11-29 14:20 | 顯示全部樓層
設(shè)置一個標志號,長按一次加一,標志=1對應(yīng)一個功能,=2對應(yīng)一個功能等等,再設(shè)置另外一個標志,短按一次加一,同理
回復(fù)

使用道具 舉報

ID:435739 發(fā)表于 2018-11-29 14:48 | 顯示全部樓層
設(shè)定每次按鍵間隔時間,統(tǒng)計按鍵的次數(shù),超時后重新計數(shù)
回復(fù)

使用道具 舉報

ID:424598 發(fā)表于 2018-11-29 15:24 來自手機 | 顯示全部樓層
如需要實現(xiàn)一個按鍵5種功能,那就初始變量為0,按一次就+1,然后判斷變量的值是多少就執(zhí)行指定的程序。當累加超過5時,將變量重置為0
回復(fù)

使用道具 舉報

ID:435828 發(fā)表于 2018-11-29 16:06 | 顯示全部樓層
呃  如需要實現(xiàn)一個按鍵5種功能,那就初始變量為0,按一次就+1,然后判斷變量的值是多少就執(zhí)行指定的程序。當累加超過5時,將變量重置為0
回復(fù)

使用道具 舉報

ID:435826 發(fā)表于 2018-11-29 16:29 | 顯示全部樓層
短按只需設(shè)置防抖時間,程序要做成識別下降沿及上升沿,一個下降沿+一個上升沿為一個按鍵事件的觸發(fā),需不需要設(shè)置全局變量記錄觸發(fā)的次數(shù),看你的目的需求是以按下次數(shù)表示功能的切換,還是按一次功能響應(yīng)切換一次,個人建議后者
回復(fù)

使用道具 舉報

ID:258164 發(fā)表于 2018-11-29 16:33 | 顯示全部樓層
xuyaqi 發(fā)表于 2018-11-29 11:34
設(shè)一個變量存放在一定時間內(nèi)點擊次數(shù),根據(jù)這個變量決定程序走向。

我的問題不在這,我想問的是:我怎么保證我的第一次短按和第二次 第三次 ...第n次都檢測到,因為我的程序還有別的很多功能。
回復(fù)

使用道具 舉報

ID:258164 發(fā)表于 2018-11-29 16:34 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-29 15:24
如需要實現(xiàn)一個按鍵5種功能,那就初始變量為0,按一次就+1,然后判斷變量的值是多少就執(zhí)行指定的程序。當累 ...

這個我知道,但是我的問題不是這個。請看看我對一樓的回復(fù),我的問題所在
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2018-11-29 20:48 | 顯示全部樓層
給你寫一個單鍵長短按實現(xiàn)多任務(wù)的示例程序

#include <REG51.H>
#define uint unsigned int                         //宏定義數(shù)據(jù)類型uint
#define uchar unsigned char                 //宏定義數(shù)據(jù)類型uchar
#define key_S 10                                                //宏定義短按(10ms)
#define key_L key_S*100                                //宏定義長按(1s)

sbit key1=P3^7;
//sbit key2=P3^6;
sbit LED1=P1^0;
sbit LED2=P1^2;
sbit LED3=P1^4;
sbit LED4=P1^6;
uchar KeySec=0;
uchar num=0;
void Timer0Init()//1毫秒@12.000MHz
{
        TMOD= 0x01;                //設(shè)置定時器模式
        TL0 = 0x18;                //設(shè)置定時初值
        TH0 = 0xFC;                //設(shè)置定時初值
        TF0 = 0;                        //清除TF0標志
        TR0 = 1;                        //定時器0開始計時
        EA=1;                                //開總中斷
        ET0=1;                        //開定時器0中斷
}

void keyscan()                                                        //按鍵掃描
{
        static uint count1=0;                        //計數(shù)變量
//        static uint count2=0;                        //計數(shù)變量
        if(!key1)   
        {  
                count1++;  
                if(count1==key_L)                                //長按
                        KeySec=4;                                        //輸出鍵值4
                if(count1>key_L)                                //防止count溢出
                        count1=key_L+1;          
        }  
        else                                                                        //按鍵抬起
        {  
                if(count1>key_S && count1<key_L)//短按
                {                       
                        num++;
                        if(num==4)
                                num=1;
                        KeySec=num;                                        //輸出鍵值num
                }       
                count1=0;                                        //count清0
        }   
/*        if(!key2)   
        {  
                count2++;  
                if(count2==key_L)                                //長按
                        KeySec=4;                                        //輸出鍵值4
                if(count2>key_L)                                //防止count溢出
                        count2=key_L+1;          
        }  
        else                                                                        //按鍵抬起
        {  
                if(count2>key_S && count2<key_L)//短按
                        KeySec=3;                                        //輸出鍵值3
                        count2=0;                                        //count清0
        }*/   
}

void key_service()                                        //按鍵服務(wù)程序
{
        switch(KeySec)                                                //按鍵服務(wù)狀態(tài)切換
        {
                case 1:LED1=~LED1;KeySec=0;break;
                case 2:LED2=~LED2;KeySec=0;break;
                case 3:LED3=~LED3;KeySec=0;break;
                case 4:LED4=~LED4;KeySec=0;break;
                default: break;
        }
}

void main()
{
        Timer0Init();                //初始化定時器
        while(1)
        {
                key_service();        //按鍵服務(wù)程序
        }
}
void timer0() interrupt        1//1毫秒@12.000MHz
{
        TL0 = 0x18;                //設(shè)置定時重裝值
        TH0 = 0xFC;                //設(shè)置定時重裝值
        keyscan();                //按鍵掃描程序
}
回復(fù)

使用道具 舉報

ID:424598 發(fā)表于 2018-11-30 07:48 來自手機 | 顯示全部樓層
HelloPan111 發(fā)表于 2018-11-29 16:34
這個我知道,但是我的問題不是這個。請看看我對一樓的回復(fù),我的問題所在

還是看你變量的應(yīng)用和判斷的寫法,如果要區(qū)分長按和短按的累計,那就分成二個變量,分別在長按和短按的判斷中進行累計
回復(fù)

使用道具 舉報

ID:258164 發(fā)表于 2018-11-30 09:31 | 顯示全部樓層
wulin 發(fā)表于 2018-11-29 20:48
給你寫一個單鍵長短按實現(xiàn)多任務(wù)的示例程序

#include

謝謝,我的長短按程序已經(jīng)實現(xiàn)了。之前的問題是怎么處理兩次短按的間隔問題,不過我自己想到了解決的辦法,還是謝謝你的回復(fù)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99精品热视频| 搞黄视频免费看 | 亚洲欧美一区二区三区国产精品 | 亚洲97 | 亚洲成人精品视频 | av在线一区二区三区 | 视频在线观看一区 | 99久久夜色精品国产亚洲96 | 中文字幕第一页在线 | 久久99精品久久久久久国产越南 | 九九久久国产 | 日本一区二区高清视频 | 一级片毛片 | 亚洲视频一区二区三区 | 欧美一级在线免费观看 | 交专区videossex农村 | 男女网站免费观看 | 天天操夜夜操 | 成人免费大片黄在线播放 | 伊人免费观看视频 | 成人综合视频在线观看 | 日韩成人在线免费视频 | 日韩在线免费观看视频 | h小视频| 黄色大片免费网站 | 欧美精品久久 | 精品国产第一区二区三区 | 中文字幕亚洲区一区二 | 日韩精品视频网 | 国产在线网址 | 成人久久网 | 欧美日韩1区 | 亚洲精品1区2区3区 91免费看片 | 久久国产精品一区二区三区 | 国产第1页 | 黄毛片| 伊久在线| 伊人春色在线 | 在线只有精品 | 日韩视频在线播放 | 国产精品久久久久久久久久免费看 |