#include "main.h"
ActFunType key_table[KEYSTATE][KEYSTATE] = { {&act3,&act0},{&act2,&act1} };
sKey_Info keyinfo;
sMyKey mykeyState[20];
void dealKeyNo( u8 i )
{
return;
}
void dealKeyShort( u8 i )
{
//按钮按下不足5s就释放时,判定为短按
button_info[i].press_type = BUTTON_PRESS_NULL;
button_info[i].press_short_flag = VALUE;
}
void dealKeyLong( u8 i )
{
if (i < PORT_NUM / 2)//第一组
{
usart6_motomsg_reinit( i ); //下层摆臂拨码1~10
usart6_motomsg_reinit( i + PORT_NUM / 2); //上层摆臂拨码11~20
}
else//第二组
{
usart1_motomsg_reinit( i - PORT_NUM / 2 ); //下层摆臂拨码1~10
usart1_motomsg_reinit( i ); //上层摆臂拨码11~20
}
}
void dealKeyDouble( u8 i )
{
return;
}
//释放状态被按下
void act0( sKey_Info *pKey )
{
pKey->msOffTime = 0;
}
//按下
void act1( sKey_Info *pKey )
{
pKey->msOnTime++;
if( KEY_PUSH_10S == pKey->msOnTime )
{
pKey->PulseNum = 0;
pKey->dealKeyFun = dealKeyLong;
(*dealKeyLong)(pKey->nowPort);//长按处理
}
}
//按下状态被释放
void act2( sKey_Info *pKey )
{
pKey->msOffTime = 0;
if( ( KEY_PUSH_50MS < pKey->msOnTime ) && (KEY_PUSH_8S > pKey->msOnTime) )
{
pKey->PulseNum++;
pKey->msOnTime = 0;
}
//
}
//释放状态
void act3( sKey_Info *pKey )
{
pKey->msOffTime++;
if( KEY_PUSH_50MS > pKey->msOffTime )
{
pKey->msOffTime++;
}
else
{
if( pKey->PulseNum == 1 )
{
pKey->dealKeyFun = dealKeyShort;
(*dealKeyShort)(pKey->nowPort);//短按处理
}
if( pKey->PulseNum >= 2 )
{
pKey->dealKeyFun = dealKeyDouble;
(*dealKeyDouble)(pKey->nowPort);//双击处理
}
pKey->PulseNum = 0;
pKey->msOffTime = 0;
pKey->msOnTime = 0;
}
}
//在 void handleInputScan() 中调用
void keyScanProc( u8 i,u8 io )
{
sMyKey *pState = 0;
pState = &mykeyState[i];
pState->keyInfo.nowPort = io;
if( io )
{
pState->keyInfo.NowState = KEY_ON;
}
else
{
pState->keyInfo.NowState = KEY_OFF;
}
(*key_table[pState->keyInfo.LastState][pState->keyInfo.NowState])( (sKey_Info *) ( &(pState->keyInfo) ) );
pState->keyInfo.LastState = pState->keyInfo.NowState;
}
//
/*
void keyScanProc()
{
u8 input[1] = 0;
sMyKey *pState = 0;
for(int i = 0; i < 1; i++ )
{
input[1] = readInputBitState(i* 2 + 1);
pState = &mykeyState;
if( input[1] )
{
pState->keyInfo.NowState = KEY_ON;
}
else
{
pState->keyInfo.NowState = KEY_OFF;
}
(*key_table[pState->keyInfo.LastState][pState->keyInfo.NowState])( (sKey_Info *) ( &(pState->keyInfo) ) );
pState->keyInfo.LastState = pState->keyInfo.NowState;
}
}
*/
按键扫描,短按/长按/双击
需积分: 2 141 浏览量
2023-04-20
17:33:14
上传
评论
收藏 2KB ZIP 举报
qq_43355022
- 粉丝: 1
- 资源: 6
最新资源
- yolo目标检测项目实验
- downloadFile-1.hc
- Centos7.9环境下离线安装开源版Nginx(亲测版)
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈