"); //-->
#include "delay.h"
#include "sys.h"
#include "Key.h"
#include <stdlib.h>
#define KeyPin PAin(5)
typedef enum
{
KeyDown,
KeyUp,
KeyShort,
KeyLong
}KEYSTATE;
KEYSTATE KeyState;
void KeyPinInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//KeyPin检测
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
static u16 KeyDownTimes,KeyDoubleTimes;
void PollingKey(void)
{
static u8 KeyStep;
switch (KeyStep)
{
case 0:
{
if (!KeyPin)//有键按下
{
//printf("\r\n按下");
KeyState = KeyDown;
if (KeyDoubleTimes > 0)
{
KeyStep = 4;//双击
}
else
{
KeyStep = 2;//不是双击
}
}
else if(KeyDoubleTimes > 0)
{
KeyDoubleTimes--;
if ((KeyDoubleTimes == 0)&&(KeyState == KeyShort))
{
printf("\r\n短按处理");
KeyState = KeyUp;
}
}
}
break;
case 1://按下
{
if (!KeyPin)
{
KeyDownTimes++;
if (KeyDownTimes < 2800)
{
KeyState = KeyShort;
}
else if(KeyState != KeyLong)
{
KeyState = KeyLong;
printf("\r\n长按处理");
}
else if (KeyDownTimes >= 2800)//防止加满溢出
{
KeyDownTimes = 2800;
}
}
else
{
KeyStep = 2;
}
}
break;
case 2://
{
if (KeyPin)//弹起
{
KeyStep = 3;
}
else//按下
{
KeyStep = 1;
}
}
break;
case 3://弹起
{
if (KeyPin)//弹起
{
if (KeyDownTimes < 2800)
{
KeyDoubleTimes = 500;
}
KeyDownTimes = 0;
KeyStep = 0;
}
else
{
KeyStep = 2;
}
}
break;
case 4:
{
if (KeyPin)//如果弹起的话就执行
{
KeyState = KeyUp;
printf("\r\n双击处理");
KeyStep = 0;
}
}
break;
default:
KeyStep = 0;
break;
}
delay_us(100);
}
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
基于S3C44B0的布拉格光纤光栅传感信号处理系统
非人工智能需求疲软,日本一半新晶圆厂尚未开始量产
[Android开发视频教学]代码编写(一)(上)(29)
电风扇多功能控制器
MediaTek 9月推首款2nm芯片流片,用于智能手机/NVLink定制ASIC
电风扇简易无级调速电路
三星44b0的44bmon程序--使用说明
[Android开发视频教学]Service初步(一)(25)
驱动程序模型和加载实验源代码
长安马自达将开发基于宁德时代滑板底盘的电动汽车
求TrueFFS源码,或相关实现文档,谢谢!
罗德与施瓦茨携手ADI通过10BASE-T1S解决方案引领汽车以太网技术发展
辞旧岁--论坛2003最后一贴
[Android开发视频教学]代码编写(一)下(29)
哈佛结构和冯诺依曼结构的区别
苹果公布WWDC25邀请函:6月10日举行 iOS19等系统获更新
关于合并版面的计划
电风扇大功率调速电路
ATA-2041高压放大器在CFRP板分层缺陷的空耦超声原位测量中的应用
超声成像系统连续波多普勒设计挑战
吊扇调速器
谷歌开发者大会亮点:你的Chrome浏览器变AI管家!
[Android开发视频教学]项目详细设计(28)
与Douglass聊了几句
电风扇无级调速器
另一个Hex转Bin的小程序
争取抢到2004第一帖!
西门子收购Excellicon为EDA设计引入先进的时序约束能力
[Android开发视频教学]项目功能分析(27)
谷歌I/O大会:AI产品“大阅兵”,血战搜索霸权