注意:
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 }
来源:https://www.cnblogs.com/zeedmood/archive/2012/09/01/2666890.html