- #include "STC15.h"
- unsigned char key_ms = 0; //按鍵按住時間毫秒 最大255 按住+1,松開清0
- sbit skey = P3^ 2; //按鍵,低電平按下 (未消抖)
- bit key; //按鍵,低電平按下 (已消抖)
- sbit led = P3^3; //LED,低電平點亮
- void InitTimer0() {
- TMOD = 0x01;
- TH0 = 0x0FC;
- TL0 = 0x18;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main(){
- InitTimer0();
- while(1){
- if(!key){
- led = !led;
- while(!key);
- }
- }
- }
- void Timer0Interrupt() interrupt 1 { //12Mhz@1ms 定時器中斷
- TH0 = 0xFC;
- TL0 = 0x18;
- if(skey){ //按鍵松開
- key_ms = 0; //松開清0
- } else { //按鍵按下
- if(key_ms != 0xFF){ //沒加滿
- key_ms++; //按住+1
- }
- }
- key = !(key_ms >= 25); //25毫秒消抖,脈沖干擾需小于25毫秒
- }
復制代碼 |