zoukankan      html  css  js  c++  java
  • 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;               //清中断标志

    }

  • 相关阅读:
    电子招投标应用系统连载(一)-开标系统
    js实现一个简单钟表动画(javascript+html5 canvas)
    ,net core mvc 文件上传
    echarts显示X轴最后一个lable
    C# 解压gzip文件(.tgz)
    【转】C#计算两坐标点距离
    用file标签实现多图文件上传预览
    c#数据批量插入
    Asp.net 中ViewState,cookie,session,application,cache的比较
    ASP.NET MVC从请求到响应发生了什么
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194250.html
Copyright © 2011-2022 走看看