#include #define uint unsigned int #define uchar unsigned char #define KEY P2_0 //定义按键 S1 为 P20 口控制 //函数声明 void Delay(uint); //延时函数声明 void Initial(void); //初始化函数声明 void InitKey(void); //初始化按键函数声明 uchar KeyScan(void); //按键扫描函数声明 uchar Keyvalue = 0 ; //定义变量记录按键动作 uint KeyTouchtimes = 0 ; //定义变量记录按键次数 /**************************** //延时 *****************************/ void Delay(uint n) { uint i; for(i = 0;i /**************************** //初始化按键为中断输入方式 *****************************/ void InitKeyINT(void) { P2DIR &= ~0x01; //P20定义为输入 KEY = 1; P2INP &= ~0X01; //配置P2.0口上拉下拉 P2IEN |= 0X01; //P2.0为中断模式 PICTL |= 0X08; //下降沿 IEN2 |= 0X02; P2IFG &= ~0x01; EA = 1; } void InitIO(void) { P1DIR |= 0x08; //P13定义为输出 BUZZER = 0; BUZZER = 1; BUZZER = 0; } /**************************** //中断处理函数 *****************************/ #pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void) { if(P0IFG>0) //按键中断 { P0IFG = 0; Delay(100); if(P0IFG==0) //按键中断 { Delay(100); KeyTouchtimes = KeyTouchtimes+1; //每次中断发生时记录按键次数加 1 } } P0IF = 0; //清中断标志 } /*************************** //主函数 ***************************/ void main(void) { InitIO(); InitKeyINT(); //调用初始化函数 while(1) { if(KeyTouchtimes == 1) { BUZZER=!BUZZER Delay(30000); KeyTouchtimes = 0; } } } |