#include "reg52.h"
#define const_voice_short 40
#define const_key_time1 20
#define const_key_time2 20
/*如何知道1秒鐘需要多少個定時中斷?
其實前面程式已經說過了,在這再囉嗦一下。
這裡需要先編寫一小段程式進行測試,得到測試的結果後再按比例修正。
比例:第一步:在程式**上先寫入1秒鐘大概需要200個中斷。
第二步:基於以上1秒鐘的基準,編寫乙個60秒的簡單測試程式(如果編
寫超過60秒的時間,這個精度還會更高)。比如,編寫乙個用蜂鳴器的
聲音來識別計時的起始和終止的測試程式。
第三步:把程式燒錄到微控制器後,上電開始測試,手上同步開啟手機裡的
秒錶。假設微控制器僅僅跑了27秒。
第四步:最終得到1秒鐘需要的定時中斷次數是:const_time_1s=(200*60)/27=444
*/#define const_time_0_25s 111 秒的時間需要的定時中斷次數
#define const_time_1s 444 //1秒鐘的時間需要的定時中斷次數
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 uikeytimecnt2=0;
unsigned int uikeyctntycnt2=0;
unsigned char uckeylock2=0;
unsigned int uivoicecnt=0;
unsigned int uisetnumber=0; //設定的資料
void main()
}void led_run()
void key_scan()
else if(uckeylock1==0) //有按鍵按下,且被第一次按下
}else if(uikeytimecnt1const_time_0_25s) //按住沒鬆手,每0.25秒觸發一次
}if(key_sr2==1)
else if(uckeylock2==0)
}else if(uikeytimecnt2const_time_0_25s)}}
void key_service()
}void t0_time() interrupt 1
else
th0=0xf8;
tl0=0x2f;
tr0=1;
}void delay_long(unsigned int uidelaylong)
void initial_peripheral()
按住乙個按鍵不鬆手的加速勻速觸發
實現功能 兩個獨立按鍵s1和s2,s1作為加鍵,s2作為減鍵。每按一次s1鍵,則被設定引數uisetnumber自加1.如果按住s1鍵不鬆手超過1秒,被設定引數uisetnumber以不斷邊塊的時間間隔往上自加1,這個為加速觸發的功能,直到到達極限,則以固定的速度加1,這個過程叫勻速。s5作為減法按...
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...