『壹』 51單片機識別四個獨立按鍵是短按還是長按
識別長按,先要確定一個時間,超過這個時間為長按,否則即為短按。
當按一下鍵後,開始計時,同時判斷確定時間到否?到了,執行長按的程序,等待按鍵釋放。
在判斷時間的時候,如果按鍵釋放了,說明未到長按的時間,執行短按的程序。
或者,按下時開始計時,等待按鍵釋放,釋放後,停止計時,根據計時的時間來判斷是長按還是短按。
『貳』 單片機按鍵怎麼實現長按和短按和組合鍵功能
是在實物開發板上實現嗎?
長按和短按很好實現,當檢測到有按鍵按下了,就開始計時,用定時器,檢測到按鍵松開了,停止計時,然後根據計時的時間長短,確定是長按還是短按,比如,時間小於0.5秒為短按,超過3秒為長按,其餘時間為無效,不夠長按時間,就為無效按鍵,也不算是短按的。這樣可以排除是隨意按鍵的可能。
組合鍵就好辦了,檢測到同時按兩個,三個,就為組合鍵,至於是什麼功能,那由你自己定義了。
『叄』 單片機,紅外線遙控器,長按和連續按2下有什麼區別程序該怎樣區分呢
每種協議都是不一樣的,比如是日立的協議吧,就是通常說的一種,長按時發的第一個32位是對應的地址碼,命令碼及其反碼,但是按鍵一直按下時,則每隔固定時間發送的是重復碼,這個重復是固定知橘一組編碼,與你按鍵對應的的地址和命令沒搭乎團有任何關系,也就是說任何長按的重復碼都是一樣的;
而連續按則不同,按鍵松開後再按,則再次發送對應地址碼,命令碼及其反碼,不發送重復碼。
程序可以根據具體的編碼時序分支處理,若是連續按,則頃寬跳入一個分支,否則跳入長按處理,長按裡面判斷很簡單,則將上一次的結果重復一次即可。
『肆』 51單片機,矩陣按鍵,長按短按判斷
/*網友反映長鍵結束後會送出短鍵值,特作更改2019.03.29*/
//1,再寫一個長短鍵判斷函數,調用那個按鍵掃描函數
unsignedcharKEY_process(void)
{
staticunsignedcharOld_key=0;//上次按鍵值
staticunsignedcharKey_buf=0;//按鍵有效保存
staticunsignedcharPress_CNT=0;//按鍵按下時間,根據調用時間間隔確定
=0;//長鍵有效標記變數
unsignedcharNew_key=0;//當前按鍵值
unsignedcharKEY=0;//待返回的按鍵值
New_key=keyscan();
if(New_key==Old_key)
{
if(New_key!=0)//建議keyscan返回0的那個值改為其他值,方便這里判斷
{
Key_buf=New_key;
if(Press_CNT<0xff)
{
Press_CNT++;
}
if(Press_CNT>=100)//調用時間間隔確定*100為長按時間,
{
KEY=Key_buf+100;//將短鍵+100作長鍵區分
Press_CNT=0;//按鍵時間清0
Key_buf=0;//按鍵緩沖清0
bPreKeyIsLong=1;//長鍵有效標記
}
}
else//按鍵彈起
{
if(Key_buf&&(bPreKeyIsLong==0))//僅在長鍵無效時
{
KEY=Key_buf;//將緩沖值送將返回的值
Key_buf=0;//清按鍵緩沖
}
Press_CNT=0;//按鍵彈起或按其他按鍵,將長按時間清0
bPreKeyIsLong=0;//長鍵有效標記清0
}
}
Old_key=New_key;//將新按鍵賦給下一次的舊按鍵值
returnKEY;//0代表無按鍵
}
//2,彈起不返回已確定的值,則在keyscan最後加一句判斷
if((P3&0X0F)==0X0F)//按鍵已經彈起
{
keyvalue=MY_key;//使按鍵等於一個自定義的值
}
『伍』 用一個輕觸開關實現單片機短按開機,長按關機
不需要單片機,使用雙穩態觸發器配合輕觸開關,當輕觸開關每按動一次,給雙穩態一個輸入脈沖,雙穩態兩個輸出端輪流輸出,利用此一個輸出端控制開機繼電器接通電源,即可在按動下一次時因雙穩態轉向另一端輸出而切斷電源。
『陸』 51單片機如何實現按鍵的長按與短按功能,嘗試過很多方法都不行,請高手多賜教,多謝了(想是簡單,做是難)
這個真心不難,就是簡單的c語言判定就行了,《C程序設計語言》,實在看不了就看譚總寫的那本c語言。給你寫過偽代碼,
if(key=ReadKey())//讀取按鍵,判斷有無按鍵按下去,沒按鍵按下,這里返回0值是不進入這個函數的
{
delay(x);//延時一段時間,寫過循環就行了
if(!ReadKey())//在次讀取按鍵值,實際上按下去按鍵是低電平(原理圖一般都是這樣做的)
{
return 已經鬆手了( 這里是高電平了返回0了)
『柒』 怎麼用C語言/C51程序實現單片機按鍵長按開機與長按關機
首先需要硬體支持,也就是單片機某個引腳可以控制斷電和維持上電
按鍵的的作用也可以給單片機供電,並且還要有個專門的引腳檢測按鍵狀態。
軟體:首先是長按判斷。這個最好用按鍵掃描。就是檢測按鍵按下時候,定時器計時,如果松開就立即清零。在設置一個功能函數檢測定時值,大於兩秒後,就表示長按。
按鍵按下單片機供電開始計時,如果達到長按標准,就輸出引腳控制持續供電,這時候按鍵鬆了也不會斷電。
運行期間,按鍵再次按下並符合長按,那木引腳輸出停止供電,這時候如果按鍵松開,那就徹底沒電關機。
『捌』 請教51單片機定時中斷檢測長按與短按問題-100分懸賞
首先你的程序寫的不夠合理,作為按鍵一般會使用外部中斷而不是定時中斷,外部中斷可以保證實時按鍵。
一般按鍵都是採用外部中斷,如果是在while循環裡面進行按鍵鍵值判斷,那麼在判斷之前最好加個小延時,進行按鍵去抖。
像你這個wile循環耗時很長,最適合使用外部中斷了,當然如果按鍵沒有接到外部中斷引腳,採用定時中斷也可以達到一定的效果,但是一定要把定時時間設置的短一些。
『玖』 51單片機如何通過編程來實現長按鍵與短按鍵的識別
檢測到按鍵按下後,來一個
for(;;)
{
按槐辯鍵松唯明睜了break;
否則一隻等待,同時一個變數i++當i加到一定值就可以為長按指歲了
}
『拾』 單片機按鍵短按和長按的程序
設置定時器100毫秒中斷a值自家1
設置按鍵值位變數k
設置按鍵埠k1
if (!k1)按鍵按下
{
delay(20);去痘
if (!k1)確認按下
a=0;計時數清0 確保長按時間精準
while(!k1)按鈕沒釋放 死循環檢測按下時間
if(a>30)達到3000毫秒
k=!k按鍵值取反 沒按前為0 長按3秒後為1 短案無效
}