【蓝牙低功耗BLE】按键的使用

隔了这么久才来写这篇,HW加班太多,没办法。

1、硬件电路图



本节实验很简单,按下S1,让LED1亮起来,再按下S1,让LED1灭掉,是不是很简单啊。

首先要做的是识别按键被按下,可以看到按键弹起来的时候P0.0经过一个R10电阻接到3.3V上,也就是P0.0引脚是高电平,按键按下的时候P0.0直接连到GND上,当然是低电平0了,所以只要当P0.0的电平状态从高跳变到低的时候就是按键被按下了,这个时候只要去改变P1.0来控制LED1亮灭即可,很简单吧。

2、相关寄存器

P0SEL     P0[7:0]功能设置寄存器,默认设置为普通I/O口
P0INPP0[7:0]作为输入口时电路模式寄存器,可以设置为输入上下拉等
P0P0[7:0]可以位寻址的I/O寄存器
P0DIRP0口输入输出设置寄存器

3、代码实现

定义按键口,然后是LED和按键的初始化,P1.0和P1.1设置为输出,P0.0和P0.1设置输入

#define CODE_KEY1   0x01
#define CODE_KEY2   0x02

void InitLed()
{
  P1DIR |= 0x03;
  LED1 = 0;
  LED2 = 0;
}

void InitKey()
{
  P0SEL &= ~0x03;
  P0DIR &= ~0x03;
  P0INP &= ~0x03;
}

扫描按键,读取键值

uchar KeyScan()
{
  uchar code = 0x00;;
  if(KEY1 == 0) {
    Delayms(10);
    if(KEY1 == 0) {
      while(!KEY1);
      code |= CODE_KEY1;
    }
  } else if(KEY2 == 0) {
    Delayms(10);
    if(KEY2 == 0) {
      while(!KEY2);
      code |= CODE_KEY2;
    }
  }
  
  return code;
}

下面是全部代码,仅供参考。

#include <ioCC2540.h>
#define uint unsigned int
#define uchar unsigned char

#define LED1  P1_0
#define LED2  P1_1
#define KEY1  P0_0
#define KEY2  P0_1

#define CODE_KEY_NONE 0
#define CODE_KEY1   0x01
#define CODE_KEY2   0x02

void Delayms(uint);
void InitLed(void);
void InitKey();
uchar KeyScan();

void Delayms(uint ms)
{
  uint i, j;
  for(i = ms; i > 0; i--)
    for(j = 587; j > 0; j--);
}

void InitLed()
{
  P1DIR |= 0x03;
  LED1 = 0;
  LED2 = 0;
}

void InitKey()
{
  P0SEL &= ~0x03;
  P0DIR &= ~0x03;
  P0INP &= ~0x03;
}

uchar KeyScan()
{
  uchar code = 0x00;;
  if(KEY1 == 0) {
    Delayms(10);
    if(KEY1 == 0) {
      while(!KEY1);
      code |= CODE_KEY1;
    }
  } else if(KEY2 == 0) {
    Delayms(10);
    if(KEY2 == 0) {
      while(!KEY2);
      code |= CODE_KEY2;
    }
  }
  
  return code;
}

void main(void)
{
  uchar code;
  InitLed();
  InitKey();
  while(1) {
    code = KeyScan();
    if(code & CODE_KEY1) {
      LED1 = !LED1;
    } else if(code & CODE_KEY2) {
      LED2 = !LED2;
    }
  }
}


好了,这节就这样,下面继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值