|
你可以看看這個程序 按鍵雙擊 N連擊 都可以
- #include "STC15F104E.h"
- #include "intrins.h"
- #define u8 unsigned char
- #define u16 unsigned int
- #define feed_dog() WDT_CONTR |= 0x10
- sbit sKEY = P3 ^ 2;
- sbit LED = P3 ^ 3;
- bit KEY = 1;
- u8 KEYms = 0; //按鍵按下時間毫秒 松開清0
- u8 leave = 0; //按鍵松開時間 減到0 則連擊清0
- u8 add = 0; //按鍵連擊次數(shù)
- void InitTimer0(){
- TMOD = 0x01;
- TH0 = 0x0FC;
- TL0 = 0x18;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main(){
- WDT_CONTR = 0x27;
- InitTimer0();
- P3M0=0x08;P3M1=0x00;
- while (1) {
- feed_dog();
- if (KEY == 0) {
- leave = 250; //等待250毫秒
- if (++add >= 2) { //雙擊
- add = 0;
- LED = !LED; //LED亮滅翻轉(zhuǎn)
- }
- while (KEY == 0) {
- feed_dog();
- }
- }
- }
- }
- void Timer0Interrupt() interrupt 1 { //12Mhz 1mS定時器中斷
- TH0 = 0x0FC;
- TL0 = 0x18;
- if (leave && !--leave) {
- add = 0;
- }
- if (sKEY) {
- KEYms = 0;
- } else {
- if (KEYms != 0xFF) {
- KEYms++;
- }
- }
- KEY = !(KEYms >= 25);
- }
復(fù)制代碼 |
|