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"

/*宏定义*/

#defineKEY_DOWN0X01

#defineKEY_UP0X02

/*函数声明*/

uint8KeyValue(void);

intmain(void)

{

uint8OldKeyValue=0;

uint8NewKeyValue=0;

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

LCD12864_Init();//LCD初始化

//最大显示列数

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

LCD12864_DisStr(1,"KeyTest");

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

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

while(1)

{

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

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

{

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

if(OldKeyValue==KEY_DOWN)

{

LCD12864_DisStr(3,"KeyDown");

}

else

{

LCD12864_DisStr(3,"KeyUp");

}

}

}

return0;

}

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

函数名:KeyValue

功能描述:读取按键的状态

输入参数:void

输出参数:

返回值:

修改历史:

1.日期:2014914

作者:retacn

修改内容:创建

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

uint8KeyValue(void)

{

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

{

returnKEY_DOWN;

}

else

{

returnKEY_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"

/*宏定义*/

#defineKEY_DOWN0X01

#defineKEY_UP0X02

volatileuint8NewKeyValue=0;

intmain(void)

{

/*显存*/

charLCDBuf[21]={0};

/*按键次数*/

intKeyCnt=0;

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

LCD12864_Init();//LCD初始化

//最大显示列数

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

LCD12864_DisStr(1,"KeyTest");

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

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

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

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

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

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

EA=1;//开总中断

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

LCD12864_DisStr(3,LCDBuf);

while(1)

{

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

{

SoftWaitUs(25000);//延时防抖

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

{

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

LCD12864_DisStr(3,LCDBuf);

}

else

{

NewKeyValue=KEY_UP;//按键松开

}

}

}

return0;

}

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

函数名:P0_ISR

功能描述:P0口中断处理

输入参数:void

输出参数:

返回值:

修改历史:

1.日期:2014914

作者:retacn

修改内容:创建

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

#pragmavector=P0INT_VECTOR

__interruptvoidP0_ISR(void)

{

if(0x01&P0IFG)

{

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

}

P0IFG=0;//清中断标志

P0IF=0;//清中断标志

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值