/***************************************** //按键初始化 *****************************************/ void InitKey(void) { /* P1SEL &= ~0X0C; //P12 P13输入 P1DIR &= ~0X0C; //按键在P12 P13 P1INP |= 0x0c; //三态 */ P0SEL&=~0X10; P0DIR&=~0X10; P0INP|=0X10; } 接收按键输入 #define K1 P1_2 //控制红灯 #define K2 P1_3 uchar KeyScan(void) { if(K1 == 0) //低电平有效 { Delay(100); //检测到按键 if(K1 == 0) { while(!K1); //直到松开按键 return(1); } } if(K2 == 0) { Delay(100); if(K2 == 0) { while(!K2); return(2); } } return(0); } 源代码 #include <ioCC2430.h> #define uint unsigned int #define uchar unsigned char #define ON 0 //LED状态 #define OFF 1 //定义控制灯的端口 #define RLED P1_0 //定义LED1为P10口控制 #define YLED P1_1 //定义LED2为P11口控制 #define K1 P1_2 //控制红灯 #define K2 P1_3 //函数声明 void Delay(uint); //延时函数 void Initial(void); //初始化P0口 void InitKey(void); uchar KeyScan(void); char i = 0; uchar Keyvalue = 0 ; /**************************** //延时 *****************************/ void Delay(uint n) { uint tt; for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); } /***************************************** //按键初始化 *****************************************/ void InitKey(void) { /* P1SEL &= ~0X0C; //P12 P13输入 P1DIR &= ~0X0C; //按键在P12 P13 P1INP |= 0x0c; //三态 */ P0SEL&=~0X10; P0DIR&=~0X10; P0INP|=0X10; } /**************************** //初始化程序 *****************************/ void Initial(void) { P1DIR |= 0x03; //P10、P11定义为输出 RLED = 1; //关LED YLED = 1; // } /***************************************** //读键值 *****************************************/ uchar KeyScan(void) { if(K1 == 0) //低电平有效 { Delay(100); //检测到按键 if(K1 == 0) { while(!K1); //直到松开按键 return(1); } } if(K2 == 0) { Delay(100); if(K2 == 0) { while(!K2); return(2); } } return(0); } /*************************** //主函数 ***************************/ void main(void) { Initial(); //调用初始化函数 InitKey(); RLED = ON; //LED1 YLED = OFF; //LED2 while(1) { Keyvalue = KeyScan(); if(Keyvalue == 1) { RLED = !RLED; //red Keyvalue = 0; //清除键值 } if(Keyvalue == 2) { YLED = !YLED; //green Keyvalue = 0; } } } 扩展: 按钮控制灯闪烁 void main(void) { Initial(); //调用初始化函数 InitKey(); RLED = 0; //开红灯,表示系统工作 while(1) { Keyvalue = KeyScan(); //扫键 if(Keyvalue>0) { if(Keyvalue == 1) GlintFlag[0] = !GlintFlag[0]; if(Keyvalue == 2) GlintFlag[1] = !GlintFlag[1]; }; if(GlintFlag[0]==1) { RLED = !RLED; //闪灯 Delay(4000); } else RLED = OFF; //关灯 if(GlintFlag[1]==1) { YLED = !YLED; if(GlintFlag[0] == 0) Delay(4000); } else YLED = OFF; } }