ble学习笔记五------------独立按键查询方式

------------------------------独立按键查询方式

查看原理图

查看用户手册

按键通过p0-0cpu相联,当按键按下时为低电平,

读取p0-0口的电平就可以知道按键的状态

复制之前LCD程序

修改main所在c文件/******************************************************************************

                  版权所有 (C), 2014-2020 

 ******************************************************************************

  文 件 名   : KEY.c

  版 本 号   : V1.0

  作    者   :  retacn

  生成日期   : 2014913

  功能描述   查询方式读取按键状态

  函数列表   :

  修改历史   :

  1.日    期   : 2014913

    作    者   :  retacn

    修改内容   创建文件

******************************************************************************/

/*----------------------------------------------*

 * 包含头文件                                   *

 *----------------------------------------------*/

#include <ioCC2540.h>

#include "Lcd12864.h"

/*宏定义*/

#define         KEY_DOWN        0X01

#define         KEY_UP          0X02

/*函数声明*/

uint8 KeyValue(void);

int main(void)

{

    uint8 OldKeyValue = 0;

    uint8 NewKeyValue = 0;

    SysStartXOSC();         // 启动外部晶振

    LCD12864_Init();        // LCD初始化

    //最大显示列数

    LCD12864_DisStr(0, "hello retacn!");    // 行最多显示字符

    LCD12864_DisStr(1, "    Key Test");

    P0SEL &= ~0X01; // 设置为IO功能

    P0DIR &= ~0X01; // 设置为输入功能

    while(1)

    {

        NewKeyValue = KeyValue();   // 读取按键状态

        if(OldKeyValue != NewKeyValue)  // 按键状态改变

        {

            OldKeyValue = NewKeyValue;  // 保存当前按键状态

            if(OldKeyValue == KEY_DOWN)

            {

                LCD12864_DisStr(3, "    Key Down ");

            }

            else

            {

                LCD12864_DisStr(3, "    Key Up ");

            }

        }

    }

    return 0;

}

/*****************************************************************************

 函 数 名  : KeyValue

 功能描述  读取按键的状态

 输入参数  : void

 输出参数  

 返 回 值  :

 修改历史      :

  1.日    期   : 2014914

    作    者   :  retacn

    修改内容   创建

*****************************************************************************/

uint8 KeyValue(void)

{

    if((P0&0X01) == 0X00 )      // 按下为低电平

    {

        return KEY_DOWN;

    }

    else

    {

        return KEY_UP;

    }

}

-----------------------------中断方式查询按键状态

按键通过p0-0cpu相联,当按键按下触发中断

查看用户手册

设置为中断方式

上升沿触发还是下降沿触发

设置中断

复制key工程,修改main所在c文件

/******************************************************************************

                  版权所有 (C), 2014-2020 

 ******************************************************************************

  文 件 名   : KEY.c

  版 本 号   : V1.0

  作    者   :  retacn

  生成日期   : 2014913

  功能描述   中断方式读取按键状态

  函数列表   :

  修改历史   :

  1.日    期   : 2014913

    作    者   :  retacn

    修改内容   创建文件

******************************************************************************/

/*----------------------------------------------*

 * 包含头文件                                   *

 *----------------------------------------------*/

#include <ioCC2540.h>

#include <stdio.h>

#include "Lcd12864.h"

#include "common.h"

/*宏定义*/

#define         KEY_DOWN        0X01

#define         KEY_UP          0X02

volatile uint8 NewKeyValue = 0;

int main(void)

{

    /*显存*/

    char LCDBuf[21]={0};  

    /*按键次数*/

    int KeyCnt = 0;

     

    SysStartXOSC();         // 启动外部晶振

    LCD12864_Init();        // LCD初始化

    //最大显示列数

    LCD12864_DisStr(0, "hello retacn!");    // 行最多显示字符

    LCD12864_DisStr(1, "    Key Test");

    P0SEL &= ~0X01; // 设置为IO功能

    P0DIR &= ~0X01; // 设置为输入功能

    

    P0IEN |= 0X01;  // P0.0 设置为中断方式

    PICTL |= 0X01;  // 下降沿触发

    IEN1 |= 0X20;   // 允许P0口中断

    P0IFG = 0x00;   // 清除中断标志位

    EA = 1;         // 开总中断

    

    

    sprintf(LCDBuf, "   Key Count : %d", KeyCnt++);    // 按键计数

    LCD12864_DisStr(3, LCDBuf);

    while(1)

    {

         if(KEY_DOWN == NewKeyValue)  // 按键按下

        {

            SoftWaitUs(25000);       // 延时防抖

            if((P0&0X01) == 0X00)   // 再次确认按键是否按下

            {

                sprintf(LCDBuf, "   Key Count : %d", KeyCnt++);    // 按键计数

                LCD12864_DisStr(3, LCDBuf);

            }

            else

            {

                NewKeyValue = KEY_UP;   // 按键松开

            }

        }

    }

    return 0;

}

/*****************************************************************************

 函 数 名  : P0_ISR

 功能描述  : P0口中断处理

 输入参数  : void

 输出参数  

 返 回 值  :

 修改历史      :

  1.日    期   : 2014914

    作    者   :  retacn

    修改内容   创建

*****************************************************************************/

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

    if(0x01&P0IFG)

    {

        NewKeyValue = KEY_DOWN;     // 记录按键按下

    }

    P0IFG = 0;              //清中断标志

    P0IF = 0;               //清中断标志

}

原文地址:https://www.cnblogs.com/retacn-yue/p/6194250.html