嵌入式成长轨迹38 【Zigbee项目】【CC2430基础实验】【按键控制开关】
注意:
1、
CC2430EB板上按键对应的管脚是P0.0 p0.4 p0.5 p0.6(这里用后两个),
#define K2 P0_5
#define K1 P0_4
P0SEL&=~0X60; 设置为连接外设
P0DIR&=~0X60; 将其配置为输入管脚
P0INP|=0X60; 调节对应管脚空闲为三态
这样之后读取K1、K2的值就知道是否按下按键
2、
这里给个按键消抖的范例:
if(K1 == 0) //低电平有效
{
Delay(100); //检测到按键
if(K1 == 0)
{
while(!K1); //直到松开按键
return(1);
}
}
1 //main.c 2 //电池板开关控制小灯 3 #include <ioCC2430.h> 4 5 6 #define uint unsigned int 7 #define uchar unsigned char 8 #define ON 0 //LED状态 9 #define OFF 1 10 11 //定义控制灯的端口 12 #define RLED P1_0 //定义LED1为P10口控制 13 #define YLED P1_1 //定义LED2为P11口控制 14 15 //#define K1 P1_2 //控制红灯 16 #define K2 P0_5 17 #define K1 P0_4 18 19 20 //函数声明 21 void Delay(uint); //延时函数 22 void Initial(void); //初始化P0口 23 void InitKey(void); 24 uchar KeyScan(void); 25 26 char i = 0; 27 uchar Keyvalue = 0 ; 28 29 /**************************** 30 //延时 31 *****************************/ 32 void Delay(uint n) 33 { 34 uint tt; 35 for(tt = 0;tt<n;tt++); 36 for(tt = 0;tt<n;tt++); 37 for(tt = 0;tt<n;tt++); 38 for(tt = 0;tt<n;tt++); 39 for(tt = 0;tt<n;tt++); 40 } 41 42 /***************************************** 43 //按键初始化 44 *****************************************/ 45 void InitKey(void) 46 { 47 /* 48 P1SEL &= ~0X0C; //P12 P13输入 49 P1DIR &= ~0X0C; //按键在P12 P13 50 P1INP |= 0x0c; //三态 51 */ 52 P0SEL&=~0X60;//~0X10; 53 P0DIR&=~0X60;//~0X10; 54 P0INP|=0X60;//0X10; 55 } 56 57 /**************************** 58 //初始化程序 59 *****************************/ 60 void Initial(void) 61 { 62 P1DIR |= 0x03; //P10、P11定义为输出 63 RLED = 1; //关LED 64 YLED = 1; // 65 } 66 67 /***************************************** 68 //读键值 69 *****************************************/ 70 uchar KeyScan(void) 71 { 72 if(K1 == 0) //低电平有效 73 { 74 Delay(100); //检测到按键 75 if(K1 == 0) 76 { 77 while(!K1); //直到松开按键 78 return(1); 79 } 80 81 } 82 if(K2 == 0) 83 { 84 Delay(100); 85 if(K2 == 0) 86 { 87 while(!K2); 88 return(2); 89 } 90 } 91 return(0); 92 } 93 94 /*************************** 95 //主函数 96 ***************************/ 97 void main(void) 98 { 99 100 Initial(); //调用初始化函数 101 InitKey(); 102 RLED = ON; //LED1 103 YLED = ON; //LED2 104 while(1) 105 { 106 Keyvalue = KeyScan(); 107 108 if(Keyvalue == 1) 109 { 110 RLED = !RLED; //red 111 Keyvalue = 0; //清除键值 112 } 113 else if(Keyvalue == 2) 114 { 115 YLED = !YLED; //red 116 Keyvalue = 0; //清除键值 117 } 118 119 120 } 121 }