嵌入式成长轨迹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 }

 

posted @ 2012-09-01 17:52  MooreZHENG  阅读(339)  评论(0编辑  收藏  举报