同乙個按鍵短按與長按的區別觸發

2022-07-17 20:06:13 字數 1336 閱讀 4449

#include "reg52.h"

#define const_voice_short 20  //蜂鳴器短叫的持續時間

#define const_voice_long 140  //蜂鳴器長叫的持續時間

#define const_key_time1_short1 20 //短按的按鍵去抖動延時時間

#define const_key_time_long1 400 //長按的按鍵去抖動延時時間

#define const_key_time1_short2 20

#define const_key_time_long2 400

void initial_myself();

void initial_peripheral();

void delay_long(unsigned int uidelaylong);

void t0_time();

void key_service();

void key_scan();

sbit key_sr1=p0^0;

sbit key_sr2=p0^1;

sbit key_gnd_dr=p0^4;

sbit beep_dr=p1^5;

unsigned char uckeysec=0;

unsigned int uikeytimecnt1=0;  //按鍵去抖動延時計數器

unsigned char uckeylock1=0;   //按鍵觸發後自鎖的變數標誌

unsigned char ucshorttouchflag1=0; //短按的觸發標誌

unsigned int uikeytimecnt2=0;

unsigned char uckeylock2=0;

unsigned char ucshorttouchflag2=0;

unsigned int uivoicecnt=0;   //蜂鳴器鳴叫的持續時間計數器

void main()

}void key_scan()  //按鍵掃瞄函式,放在定時中斷裡

}else if(uckeylock1==0)  //有按鍵按下,且第一次被按下 }

if(key_sr2==1)

}else if(uckeylock2==0)}}

void key_service()

}void t0_time() interrupt 1

else

th0=0xf8;

tl0=0x2f;

tr0=1;

}void delay_long(unsigned int uidelaylong)

void initial_peripheral()

微控制器實現同乙個按鍵的長按3s與長按10s操作

如何實現微控制器單擊 雙擊 長按操作,可以參考別人文章 在這裡我主要將這個功能再進行擴充套件,實現按鍵的單擊 雙擊 長按3s 長按10s操作。需要修改的地方 1 預定義 define key long 3 3 注釋這行 define key long 3s 3 返回值,長按3s define key...

使用setjmp的時候,同乙個訊號只能觸發一次

linux的異常處理 基於setjmp和longjmp的執行控制方式是linux平台上c語言處理異常的標準方案,已被廣泛運用到由c語言開發的軟體系統和鏈結庫中,例如jpg解析庫,加密解密庫等等。setjmp和longjmp是以c語言標準庫函式的形式提供的,setjmp 函式能夠儲存程式當前的執行環境...

linux vnc 與server共享同乙個桌面

伺服器端 需要安裝軟體 tightvncserver 和 vnc4server,可以google,這裡就不解釋了,網上很多。我這裡是ubuntu 1.sudo apt get install tightvncserver 2.sudo apt get install vnc4server 3.vnc...