- #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毫秒
- }
复制代码 |