CC2430基础——按键控制开关实验

岁酱吖の 提交于 2020-01-05 02:05:07

    本实验是用两个按键分别控制小灯的亮灭。在这个实验里用到的寄存器分别是P0,P1,P0SEL,P0DIR,P1DIR和P0INP。

    P0/P1:P0/P1口寄存器;

    P0SEL:P0功能选择寄存器,主要是选择相应位的功能(0,普通I/O;1,外设功能)。

    P0DIR/P1DIR:P0/P1口方向选择寄存器,主要是选择相应位的方向(0,输入;1,输出)。

    P0INP:P0口输入模式寄存器,(0,上拉;1,下拉)。

 

    两个LED灯的管脚分别为P1_0和P1_1,其中,功能选择(P0SEL)定义为普通IO输出;方向选择P0DIR定义为输出

  K键对应的是P0_5,CANCEL键对应的是P0_4,UP/DOWN/LEFT/RIGHT键对应的是P0_6

  设置这几个按键的管脚的步骤分别是:功能选择(P0SEL),方向选择(P0DIR),输入模式选择(P0INP)。源代码见下:

 

按下确定按钮LED灯亮,再按一下灯灭,取消按钮也是一样的效果。

#define K1 P0_4         //按键引脚定义,以便控制红灯
#define K2 P0_5

void InitKey(void)      //按键引脚初始化
{
  P0SEL &= ~0X30;
  P0DIR &= ~0X30;
  P0INP |= 0x30; //三态
}

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 Initial(void)//LED引脚初始化

{
 P1DIR |= 0x03; //P10、P11定义为输出
 RLED = 1;
 YLED = 1; //LED
}

void main(void)
{
 Initial();  //调用初始化函数
 InitKey();
 RLED = OFF;  //LED1
 YLED = OFF;  //LED2
 while(1)
 {
          Keyvalue = KeyScan();
          if(Keyvalue == 1)
          {
           RLED = !RLED;      //red
           Keyvalue = 0;      //清除键值
          }
          if(Keyvalue == 2)
          {
            YLED = !YLED;     //green
            Keyvalue = 0;
          }
 }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!