/*
實現功能:兩個獨立按鍵s1和s2,s1作為加鍵,s2作為減鍵。每按一次s1鍵,則被設定引數uisetnumber自加1.
如果按住s1鍵不鬆手超過1秒,被設定引數uisetnumber以不斷邊塊的時間間隔往上自加1,這個為加速觸發的功能,
直到到達極限,則以固定的速度加1,這個過程叫勻速。s5作為減法按鍵,每觸發一次,uisetnumber就減1,
其加速和勻速觸發功能跟s1按鍵一樣。當被設定引數uisetnumber小於500的時候,led燈滅;當大於或者等於500
時,led燈亮。
*/#include "reg52.h"
#define const_voice_short 40
#define const_key_time1 20
#define const_key_time2 20
#define const_time_1s 444 //1秒鐘時間需要的定時中斷次數
#define const_initial_set 160 //連續觸發模式時,按鍵剛開始的間隔觸發時間
#define const_min_level 30 /*連續觸發模式時,按鍵經過加速後,
如果一旦發現小於這個值,則直接變到最後的間隔觸發時間*/
#define const_sub_dt 10 //按鍵的加速度,相當於按鍵間隔時間每次的變化量
#define const_last_min_set 5 //連續觸發模式的時候,按鍵經過加速後,最後的間隔觸發時間
#define const_syn_min_level 45 //產生同步聲音的最小閾值,這個必須要比蜂鳴器的時間略長一點
void initial_myself();
void initial_peripheral();
void delay_long(unsigned int uidelaylong);
void t0_time();
void key_service();
void key_scan();
void led_run();
sbit key_sr1=p0^0;
sbit key_sr2=p0^1;
sbit key_gnd_dr=p0^4;
sbit beep_dr=p1^5;
sbit led_dr=p3^5;
unsigned char uckeysec=0; //被觸發的按鍵編號
unsigned int uikeytimecnt1=0; //按鍵去抖動延時計數器
unsigned int uikeyctntycnt1=0; //按鍵連續觸發的間隔延時計數器
unsigned char uckeylock1=0; //按鍵觸發後自鎖的變數標誌
unsigned int uisynctntycnt1=0; //產生按鍵同步聲音的計數器
unsigned int uictntytimeset1=const_initial_set; //按鍵每次觸發的時間間隔,這數值不斷變小,導致速度不斷加快
unsigned int uictntysynset1=const_initial_set; //同步聲音的時間間隔,這數值不斷變小,這速度不斷變快
unsigned char ucctntyflag1=0; //是否處於連續加速觸發模式的標誌位
unsigned int uikeytimecnt2=0; //按鍵去抖動延時計數器
unsigned int uikeyctntycnt2=0; //按鍵連續觸發的間隔延時計數器
unsigned char uckeylock2=0; //按鍵觸發後自鎖的變數標誌
unsigned int uisynctntycnt2=0; //產生按鍵同步聲音的計數器
unsigned int uictntytimeset2=const_initial_set; //按鍵每次觸發的時間間隔,這數值不斷變小,導致速度不斷加快
unsigned int uictntysynset2=const_initial_set; //同步聲音的時間間隔,這數值不斷變小,這速度不斷變快
unsigned char ucctntyflag2=0; //是否處於連續加速觸發模式的標誌位
unsigned int uivoicecnt=0; //蜂鳴器鳴叫的持續時間計數器
unsigned int uisetnumber=0; //設定的資料
void main()
}void led_run() //led燈應用程式
else
}void key_scan() //按鍵掃面函式,放在定時中斷裡
else if(uckeylock1==0)
}else if(uikeytimecnt1uictntytimeset1)
else
uikeyctntycnt1=0;
ucctntyflag1=1; //進入連續加速觸發模式
uckeysec=1; //觸發1號鍵
}uisynctntycnt1++; //蜂鳴器連續觸發延時計數器累加
/*按住不鬆手,每隔一段uictntysynset1時間按鍵就觸發一次,
而且uictntysynset1不斷減小,鳴叫節奏就越快
*/if(uisynctntycnt1>uictntysynset1)
}else if(uikeytimecnt2uictntytimeset2)
else
uikeyctntycnt2=0;
ucctntyflag2=1; //進入連續加速觸發模式
uckeysec=2; //觸發2號鍵
}uisynctntycnt2++; //蜂鳴器連續觸發延時計數器累加
/*按住不鬆手,每隔一段uictntysynset2時間按鍵就觸發一次,
而且uictntysynset2不斷減小,鳴叫節奏就越快
*/if(uisynctntycnt2>uictntysynset2)
}void t0_time() interrupt 1
else
th0=0xf8;
tl0=0x2f;
tr0=1;
}void delay_long(unsigned int uidelaylong)
void initial_peripheral()
按住乙個獨立按鍵不鬆手的連續步進觸發
include reg52.h define const voice short 40 define const key time1 20 define const key time2 20 如何知道1秒鐘需要多少個定時中斷?其實前面程式已經說過了,在這再囉嗦一下。這裡需要先編寫一小段程式進行測試,...
pyqt實現乙個按住拖動有效果的按鈕
看到有些部落格上有這種樣式的好看背景彩蛋,因此自己打算用qt去實現一下。這個樣式的實現主要基於控制項的重繪。由於我的 過長,在此我只貼一下核心 def paintevent self,qevent global x,y print 重繪中 x,y 0,0 painter qpainter self ...
乙個按鍵程式的思考
2017.07.26 程式筆記 今天思考乙個關於按鍵的程式 結構體如下 if pc get key key ture 思考了一下,這個可以作為電堆按鍵檢測的乙個大體的框架,結合基本的按鍵處理程式,就可以實現功能if 0 io keyenter 如果有鍵按下了 else while 0 io keye...