免越狱按键映射器ios循环一个内容

【求助】如图一个原地走循环动作_ae吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:488,042贴子:
【求助】如图一个原地走循环动作收藏
毕业设计,这个镜头是人物左入画右出画,但一开始做的是人物原地循环走,一个循环周期只有一秒多,但这个镜头有六秒,我知道复制粘贴这个本方法可以,但很烦,后面还有好几个这样的镜头,各位大大有没有简单的方法
ae,「摄图网」海量AE模板,片头模板,倒计时模板,各类AE模板免费下载,超高清视频,独特设计,提供个人-企业用超齐全素材,简约/唯美/特效/震撼/时尚./三维..
渲染分两层,一层背景没有人物垫底,一层人物放上面,回到项目窗口,右键人物素材,选择解释素材,下方修改循环次数即可
楼主 怎么解决的啊
可以写,循环函数(在时间重映射关键帧下)函数具体可以看帮助文档
预合成图层后点击时间重映射,在出点和入点打关键帧,随后按alt键点击闹钟输入表达式loopOut(&cycle&)即可,如果使用这个模式有跳跃那就使用pingpong替代cycle
登录百度帐号91按键映射器_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
91按键映射器
本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
《91按键映射器》是一款软件,支持Winxp/vista/win7/。
91按键映射器运行环境
支持Winxp/vista/win7/
91按键映射器软件介绍
可以将键盘或游戏手柄上的一个按键映射成一系列组合键或鼠标动作的的一款绿色免费小软件,当按下所设置的按键时,所映射的按键或鼠标动作就会被模拟发送,还可以设置连击和击键间隔时间,支持游戏手柄,强大易用,速度飞快;用来玩一些不能连击的DX的游戏将会非常方便,尤其那些需要搓技能和连击套路的游戏,按一下,就相当于按了一套组合键,轻松放大招,PK不怕手指不够快技术不如人了,电脑帮你搓技能放一大堆连招!另外还有很多用处,键盘某个键不管用的时候可以用别的键来代替,还有工作中需要重复输入固定按键的时候,就可以设计一键输入了.
清除历史记录关闭1688.com,阿里巴巴打造的全球最大的采购批发平台
1688/淘宝会员(仅限会员名)请在此登录
cbulogin.center.et2Server is OKForeach 循环编辑器(“变量映射”页)
Foreach 循环编辑器(“变量映射”页)
SQL Server 2014
发布日期: 2016年12月可以使用 “Foreach 循环编辑器” 对话框的 “变量映射” 页,将变量映射到集合值。 循环每次迭代时,都会用集合值更新变量的值。若要了解如何在 Integration Services 包中使用 Foreach 循环容器,请参阅
。 若要了解如何配置该循环容器,请参阅 。Microsoft SQL Server Integration Services 教程“创建简单 ETL 包教程”包括一节介绍如何添加和配置 Foreach 循环的课程。变量
选择现有变量,或单击“&新建变量...&”以创建新的变量。 说明
映射一个变量之后,“变量”列表中会自动增加一行。相关主题:、索引
如果使用的是 Foreach Item 枚举器,请指定集合值中要映射到变量的列的索引。 对于其他枚举器类型,索引是只读的。 说明
索引以 0 为基数。相关主题: 删除
选择一个变量,再单击“删除”。
Current Issue
Receive the MSDN Flash e-mail newsletter every other week, with news and information personalized to your interests and areas of focus.
您对此内容的反馈非常重要。请告诉我们您的想法。
更多反馈?
1500 个剩余字符
我们非常感谢您的反馈。当前位置: >>
全功能按键程序,支持消抖,长按,组合按键,按两次,三次,四次等
******************* main.c
if (key_mode == '0')
cur_key = get_key();
// 支持延迟消抖,可重复输入按键
cur_key = get_key_func();
// 按键并等待按键释放,支持长按和多次按键,需打开key.c中的函数定义
//
cur_key = get_key_release();// 支持延迟消抖,并等待按键释放,支持长按
if (cur_key != NO_KEY)
PutChar(cur_key);
PutString(&\n\r&);
PutString(&This Key's ID is: &);
******************* key.h
#ifndef __DEF_H
#define __DEF_H
typedef unsigned char
INT8U;
typedef unsigned int
INT16U;
typedef unsigned long
INT32U;
typedef signed char
INT8S;
typedef signed int
INT16S;
typedef signed long
INT32S;
typedef float
/* Single precision floating point
*/
typedef double
/* Double precision floating point
typedef unsigned char
BOOL;
typedef unsigned char
BYTE;
typedef unsigned int
FALSE
#define
TRUE
#define
void delay_N_ns(INT16U n);
#endif /* #ifndef __DEF_H */
#ifndef __KEY_H
#define __KEY_H
#include &msp430x14x.h&
//#define __KEY_IDPT
#define __KEY_ARRAY
//#define __KEY_USE_TIMER
// 使用定时器定时检测按键
#define NO_KEY
// 无按键
#define KEY_DELAY_BASE
// 消抖延迟时间基数
#define KEY_DITHERLESS_DELAY
// 按键消抖延迟时间
#define KEY_HOLD_TIME
// 按键按住多少时间开始重复
#define KEY_REPEAT_TIME
// 按键长按后的重复时间
#define KEY_LONGHOLD_TIME
// 按键按住多少时间开始算长按
#define KEY_HOLD_MAX
// 按键按住算超长按
#define KEY_TIME_MAX
// 总计数次数
//#define KEY_TIME_MAX
KEY_DITHERLESS_DELAY*100
#define KEY_DELAY_CHECK
0
#define KEY_LOOP_CHECK
// 按键状态定义
#define FSM_NOKEY
// 按键状态,无按键
#define FSM_KEY_DOWN
// 按键状态,按下
#define FSM_KEY_SURE_HOLD
// 按键状态,一直按住
#define FSM_KEY_UP
// 按键状态,松开
// ---------------------------- __KEY_IDPT ---------------------------
// Independent key defines and functions
#ifdef __KEY_IDPT
#define KEY_PORT_NUM
// 按键数 4
#define KEY_PORT_VAL
// 对应的IO有效位置
#define KEY_PORT_MAX
// 最高有效位
#define KEY_PORT_MIN
// 最低有效位
#define KEY_PORT_FUNC
{P1SEL &= ~KEY_PORT_VAL;} // 设置为IO模式
#define KEY_PORT_DIR
{P1DIR |= KEY_PORT_VAL;}
// 设置为输入
#define KEY_PORT_IN
KEY_PORT_VAL)
// 读取输入值,低电平有效
init_key();
#endif // #ifdef __KEY_IDPT
// ---------------------------- end of __KEY_IDPT --------------------
// ---------------------------- __KEY_ARRAY ---------------------------
// Key array defines and functions
#ifdef __KEY_ARRAY
// Key Row defines
#define KEY_ROW_NUM
#define KEY_ROW_VAL
// 行对应的IO有效位置
#define KEY_ROW_MAX
// 行最高有效位
#define KEY_ROW_MIN
// 行最低有效位
#define KEY_ROW_FUNC
{P1SEL &= ~KEY_ROW_VAL;}
// P5.4~P5.7设置为IO模式
#define KEY_ROW_DIR
{P1DIR |= KEY_ROW_VAL;}
// P5.4~P5.7设置为行扫描输出
#define KEY_ROW
// 行扫描输出端口
// Key col defines
#define KEY_COL_NUM
#define KEY_COL_VAL
// 列对应的IO有效位置
#define KEY_COL_MAX
// 列最高有效位
#define KEY_COL_MIN
// 列最低有效位
#define KEY_COL_FUNC
{P1SEL &= ~KEY_COL_VAL;}
// P1.0~P1.3设置为IO模式
#define KEY_COL_DIR
{P1DIR &= ~KEY_COL_VAL;}
// P1.0~P1.3设置为列扫描输入
#define KEY_COL
// 列扫描输入端口
#define KEY_COL_1
// 1列对应的IO位置
#define KEY_COL_2
// 2列对应的IO位置
#define KEY_COL_3
// 3列对应的IO位置
#define KEY_COL_4
// 4列对应的IO位置
//如果按键的行列在同一个IO口组,则可以用一句话进行端口初始化
#define KEY_PORT_VAL
(KEY_ROW_VAL | KEY_COL_VAL) // 也可以直接修改定义值为数字
#define KEY_PORT_FUNC
{P5SEL &= ~KEY_VAL;}
// P1.0~P1.7设置为IO模式
init_keypad();
#define key_pressed
keypad_pressed
//单独使用阵列键盘时,函数直接等同
// 同时使用独立按键和阵列键盘,需再定义以下函数(修改对应函数中key_pressed())
//INT8U keypad_pressed();
//INT8U check_keypad();
//INT8U get_keypad();
#endif /* #ifdef __KEY_ARRAY */
// ---------------------------- end of __KEY_ARRAY -------------------
// ---------------------------- __KEY_USE_TIMER ----------------------
// 使用定时器支持按键长按,定时(或者循环)消抖,组合按键
#ifdef __KEY_USE_TIMER
// 使用定时器支持按键长按,定时(或者循环)消抖,组合按键
typedef struct
key_check_
// 是否在循环中检测按键的标志KEY_DELAY_CHECK或KEY_LOOP_CHECK
// 时间计数
// 按键状态机状态
//
INT16U key_dly_
// 按键消抖延迟计数
INT16U key_hold_
// 按键按下后保持计数
INT16U key_repeat_
// 按键按下后重复次数计数
} struct_KeyI
/*
#define _KEY_NONE
#define _KEY_REENTER
#define _KEY_NO_REENTER 2
typedef struct
//上次检测到的键
//按键状态机状态
WORD SameKeyC
//同一键检测到按下的次数
//当前检测到的键, 用于处理长按的情况
BYTE (*KeyDownCallBack)(WORD, WORD);
//键确认按下的回调函数指针
void (*KeyUpCallBack)(WORD);
//键抬起的回调函数指针
} struct_KeyI
*/
// ---------------------------- else of __KEY_USE_TIMER
#else
// 不使用定时器检测按键,但支持按键按下和松开,按键长按等功能
typedef struct
key_check_
// 是否在循环中检测按键的标志KEY_DELAY_CHECK或KEY_LOOP_CHECK
// 时间计数
// 按键状态机状态
INT16U key_dly_
// 按键消抖延迟计数
INT16U key_hold_
// 按键按下后保持计数
INT16U key_repeat_
// 按键按下后重复次数计数
} struct_KeyI
#endif // #ifdef __KEY_USE_TIMER
// ---------------------------- end of __KEY_USE_TIMER ---------------
struct_KeyInfo
key_info1;
// 可以定义多套按键
read_key();
// 读键,并根据映射返回键值
BOOL
key_pressed();
// 检测是否有按键按下
INT8U
check_key(INT8U, struct_KeyInfo *); // 检测按键键值
INT8U
get_key();
// 支持延迟消抖,可重复输入按键
INT8U
get_key_release();
// 支持延迟消抖,并等待按键释放,支持长按
INT8U
get_key_func();
// 按键并等待按键释放,支持长按和多次按键
#endif /* #ifndef __KEY_H */
*******************key.c
//--------------------------------------------------------------------------
//独立按键和阵列式按键,不支持同时按键
//返回按键ASCII码
//支持按下一次有效,get_key()
//按下后重复有效,get_key()
//按下后释放按键才有效,get_key_release()或get_key_func()
//长按有效,get_key_release()或get_key_func()
//连续按下多次有效(1、2、3、4),get_key_func()
//--------------------------------------------------------------------------
#include &key.h&
//----------------------------------全局变量--------------------------------
#ifndef __KEY_USE_TIMER
struct_KeyInfo
key_info1 =
// 可以定义多套按键
KEY_LOOP_CHECK,
key_check_
// 检测按键的标志KEY_DELAY_CHECK或KEY_LOOP_CHECK
// 时间计数
FSM_NOKEY,
// 按键状态机状态
// INT16U key_dly_
// 按键消抖延迟计数
// INT16U key_hold_
// 按键按下后保持计数
// INT16U key_repeat_
// 按键按下后重复次数计数
};
#endif // #ifndef __KEY_USE_TIMER
#ifdef __KEY_IDPT
//键值映射
INT8U key_map[] = {0, '1', '2', 0, '3', 0, 0, 0, '4',
0, 0, 0, 0, 0, 0, 0};
#endif /* #ifdef __KEY_IDPT */
#ifdef __KEY_ARRAY
//键值映射
INT8U keypad_map[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F'};
#endif /* #ifdef __KEY_ARRAY */
//--------------------------------------------------------------------------
//函数名称:delay_key
//功
能:延时
//参
数:struct_KeyInfo * pKey_Info: 按键组信息
//返回值
:无
//--------------------------------------------------------------------------
void delay_key(struct_KeyInfo * pKey_Info)
{
if (pKey_Info-&key_check_mode)
if (pKey_Info-&key_dly_cnt & KEY_DITHERLESS_DELAY)
pKey_Info-&key_dly_cnt++;
pKey_Info-&key_dly_cnt = 0;
key_dly_over = (key_dly_cnt == KEY_DITHERLESS_DELAY);
pKey_Info-&key_dly_cnt = 0;
j = KEY_DITHERLESS_DELAY;
while (j-- & 0)
for (i = KEY_DELAY_BASE; i & 0; i--);
#ifdef __KEY_IDPT
//--------------------------------------------------------------------------
//函数名称:init_key
//功
能:初始化扫描键盘的IO端口
//参
数:无
//返回值
:无
//--------------------------------------------------------------------------
void init_key()
{
KEY_PORT_FUNC;
KEY_PORT_DIR;
}
//--------------------------------------------------------------------------
//函数名称:key_pressed
//功
能:检测按键
//参
数:无
//返回值
:0:无按键 1:有按键
//--------------------------------------------------------------------------
BOOL key_pressed()
{
return (KEY_PORT_IN != 0);
//获取输入
// 返回0无按键按下,否则有键按下
}
INT8U read_key()
{
return (key_map[KEY_PORT_IN]);
}
#endif /* #ifdef __KEY_IDPT */
#ifdef __KEY_ARRAY
//--------------------------------------------------------------------------
//函数名称:init_keypad
//功
能:初始化扫描键盘的IO端口
//参
数:无
//返回值
:无
//--------------------------------------------------------------------------
void init_keypad()
{
KEY_COL_FUNC;
KEY_COL_DIR;
KEY_ROW_FUNC;
KEY_ROW_DIR;
KEY_ROW |= KEY_ROW_VAL;
// 输出高电平
}
//--------------------------------------------------------------------------
//函数名称:key_pressed
//功
能:检测按键
//参
数:无
//返回值
:0:无按键 1:有按键
//--------------------------------------------------------------------------
BOOL keypad_pressed()
{
KEY_ROW &= ~KEY_ROW_VAL;
//行输出全0,判断有无按键输入
return ((~KEY_COL & KEY_COL_VAL) != 0); //获取列输入,低有效
// 返回0无按键按下,否则有键按下
}
//--------------------------------------------------------------------------
//函数名称:read_key
//功
能:扫描键盘的IO端口,获得键值
//参
数:无
//返回值
:INT8U 按键的ASCII码
//--------------------------------------------------------------------------
INT8U read_key()
{
// 使用循环扫描和循环查询的方式
INT8U key_
INT8U row_cnt, col_cnt, row_scanout, col_
key_val = 0;
row_scanout = KEY_ROW_MAX;
// 行从高到低按row_scanout扫描
//
row_scanout = KEY_ROW_MIN;
// 行从低到高按row_scanout扫描
for (row_cnt = 0; row_cnt & KEY_ROW_NUM; row_cnt++)
//--行扫描
KEY_ROW |= KEY_ROW_VAL;
//行输出全1
KEY_ROW &= (~row_scanout);
//行输出中有一个为0
row_scanout &&= 1;
// 行从高到低按row_scanout扫描
//
row_scanout &&= 1;
// 行从低到高按row_scanout扫描
if ((~KEY_COL & KEY_COL_VAL) != 0)
//是否列中有一位有效,低有效
col_scanin = KEY_COL_MAX; // 列从高到低col_scanin用于检测哪一位为0
col_scanin = KEY_COL_MIN; // 列从低到高col_scanin用于检测哪一位为0
for (col_cnt = 0; col_cnt & KEY_COL_NUM; col_cnt++)
//--列检测
if ((KEY_COL & col_scanin) == 0)
// 是否是该列, 等于0为是
// 查表获取键值
key_val = keypad_map[row_cnt * KEY_COL_NUM + col_cnt];
return (key_val); // 返回值,退出循环
col_scanin &&= 1;
// 列从高到低col_scanin右移1位
col_scanin &&= 1;
// 列从低到高col_scanin左移1位
// 使用直接扫描和case查询的方式
/*
INT8U key_
INT8U row_cnt, row_scanout, col_
key_val = 0;
row_cnt = 0;
for (row_scanout = KEY_ROW_MAX; row_cnt &= KEY_ROW_MIN; row_cnt &&= 1)
//
for (row_scanout = KEY_ROW_MIN; row_cnt &= KEY_ROW_MAX; row_cnt &&= 1)
KEY_ROW |= KEY_ROW_VAL;
//行输出全1
KEY_ROW &= (~row_scanout);
//行输出四位中有一个为0
col_scanin = ~KEY_COL & KEY_COL_VAL;
// 列col_scanin用于检测出哪一位为0
switch (col_scanin)
// 列检测,同一时刻只能有一个按键按下
case KEY_COL_1:
key_val = keypad_map[row_cnt * KEY_COL_NUM];
// 查表获取键值
case KEY_COL_2:
key_val = keypad_map[row_cnt * KEY_COL_NUM + 1];
// 查表获取键值
case KEY_COL_3:
key_val = keypad_map[row_cnt * KEY_COL_NUM + 2];
// 查表获取键值
case KEY_COL_4:
key_val = keypad_map[row_cnt * KEY_COL_NUM + 3];
// 查表获取键值
case default:
key_val = 0;
row_cnt++;
return (key_val); // 返回值
}
#endif /* #ifdef __KEY_ARRAY */
//--------------------------------------------------------------------------
//函数名称:key_callback
//功
能:按键回调函数,用于长按和重复计数
//参
数:INT8U key_holdtime: 保持计数次数
//
struct_KeyInfo * pKey_Info: 按键组信息
//返回值
:无
//--------------------------------------------------------------------------
void key_callback(INT8U key_holdtime, struct_KeyInfo * pKey_Info)
{
if (pKey_Info-&key_hold_cnt &= key_holdtime)
pKey_Info-&key_hold_cnt++;
if (pKey_Info-&key_hold_cnt &= KEY_HOLD_MAX)
// 计算超长按
pKey_Info-&key_hold_cnt++;
if (pKey_Info-&key_repeat_cnt &= KEY_REPEAT_TIME) // 进入重复
pKey_Info-&key_repeat_cnt++;
pKey_Info-&key_repeat_cnt = 0;
//--------------------------------------------------------------------------
//函数名称:key_fsm
//功
能:检测按键状态转换机转换函数
//参
数:INT8U key_value: 读到的键值
//
INT8U key_holdtime: 保持计数次数
//
struct_KeyInfo * pKey_Info: 按键组信息
//返回值
:无
//--------------------------------------------------------------------------
void key_fsm(INT8U key_value, INT8U key_holdtime, struct_KeyInfo * pKey_Info)
{
switch (pKey_Info-&key_state) // 根据新获得的键值转换按键状态,需区分两种检测方式
case FSM_NOKEY:
pKey_Info-&key_pre_value = NO_KEY;
if (key_value != NO_KEY)
// key_value有值
if (pKey_Info-&key_check_mode)
// 循环检测模式,进入消抖
pKey_Info-&key_state = FSM_KEY_DOWN;
// 进入消抖
// 延迟检测模式(已经消抖)
pKey_Info-&key_hold_cnt = 0;
pKey_Info-&key_repeat_cnt = 0;
pKey_Info-&key_pre_value = key_
// 备份上一次键值
pKey_Info-&key_state = FSM_KEY_SURE_HOLD; // 延迟检测模式,按键有效
pKey_Info-&key_state = FSM_NOKEY;
case FSM_KEY_DOWN:
// 循环检测模式按键可能按下,用于消抖
if (!pKey_Info-&key_check_mode ||
// 延迟检测模式或者循环满足延迟
(pKey_Info-&key_dly_cnt == KEY_DITHERLESS_DELAY))
if (key_value != NO_KEY)
// key_value有值
pKey_Info-&key_hold_cnt = 0;
pKey_Info-&key_repeat_cnt = 0;
pKey_Info-&key_pre_value = key_
// 备份上一次键值
pKey_Info-&key_state = FSM_KEY_SURE_HOLD; // 按键有效
pKey_Info-&key_state = FSM_NOKEY;
// 按键无效
// 循环检测模式未满足延迟,保持状态
case FSM_KEY_SURE_HOLD:
// 按键确定按下,长按后可检测连续有效几次
if (key_value != NO_KEY)
pKey_Info-&key_state = FSM_KEY_SURE_HOLD;
if (!pKey_Info-&key_check_mode ||
(pKey_Info-&key_dly_cnt == KEY_DITHERLESS_DELAY))
pKey_Info-&key_pre_value = key_
// 备份上一次键值
key_callback(key_holdtime, pKey_Info);
pKey_Info-&key_state = FSM_KEY_UP;
case FSM_KEY_UP:
// 释放按键瞬间,可用于按键有效一次的情况
if (key_value != NO_KEY)
// key_value有值
if (key_value == pKey_Info-&key_pre_value)
pKey_Info-&key_hold_cnt = 0;
pKey_Info-&key_repeat_cnt = 0;
pKey_Info-&key_state = FSM_KEY_SURE_HOLD;
pKey_Info-&key_state = FSM_KEY_DOWN;
pKey_Info-&key_state = FSM_NOKEY;
pKey_Info-&key_state = FSM_NOKEY;
//--------------------------------------------------------------------------
//函数名称:check_key
//功
能:检测按键(带消抖),并获取键值
//参
数:INT8U key_holdtime: 保持计数次数
//
struct_KeyInfo * pKey_Info: 按键组信息
//返回值
:INT8U 按键的ASCII码
//--------------------------------------------------------------------------
INT8U check_key(INT8U key_holdtime, struct_KeyInfo * pKey_Info)
{
INT8U key_
key_value = key_pressed();
// 获取按键按下情况
if (key_value != NO_KEY)
// 如果有键按下
delay_key(pKey_Info);
// 消除抖动
key_value = read_key();
// 再次检测按键,并转换键值
pKey_Info-&key_dly_cnt = 0;
key_fsm(key_value, key_holdtime, pKey_Info);
return (key_value);
}
//--------------------------------------------------------------------------
//函数名称:get_key
//功
能:检测按下按键(带消抖),并获取键值,支持多次输入
//
需要多组按键时,可以定义多个struct_KeyInfo key_info1,
//
并定义多个get_key使用其即可
//参
数:无
//返回值
:INT8U 按键有效时的ASCII码,否则为NO_KEY
//--------------------------------------------------------------------------
INT8U get_key()
{
INT8U key_
key_value = check_key(KEY_HOLD_TIME, &key_info1);
if ( ( key_info1.key_state == FSM_KEY_SURE_HOLD )
(!key_info1.key_check_mode
(key_info1.key_dly_cnt == KEY_DITHERLESS_DELAY))
((key_info1.key_hold_cnt == 0)
(key_info1.key_hold_cnt == KEY_HOLD_TIME) ||
(key_info1.key_repeat_cnt == KEY_REPEAT_TIME)) )
return (key_value);
return (NO_KEY);
}
//--------------------------------------------------------------------------
//函数名称:get_key_release
//功
能:检松开按键(带消抖)和长按,并获取键值(没有支持超长按)
//
需要多组按键时,可以定义多个struct_KeyInfo key_info1,
//
并定义多个get_key_release使用其即可
//参
数:无
//返回值
:INT8U 按键有效时的ASCII码,否则为NO_KEY
//--------------------------------------------------------------------------
INT8U get_key_release()
{
//
INT8U key_
key_value = check_key();
check_key(KEY_LONGHOLD_TIME, &key_info1);
if (key_info1.key_hold_cnt & KEY_LONGHOLD_TIME)
if (key_info1.key_state == FSM_KEY_UP)
return (key_info1.key_pre_value);
return (NO_KEY);
if ( (key_info1.key_state == FSM_KEY_SURE_HOLD)
(!key_info1.key_check_mode
(key_info1.key_dly_cnt == KEY_DITHERLESS_DELAY))
(key_info1.key_hold_cnt == KEY_LONGHOLD_TIME) )
{
#if 0 //这段是测试程序,可根据需要修改使用,打开 #if 开关即可
return (key_info1.key_pre_value | 0x80);
#else
if (key_info1.key_pre_value & '9')
return (key_info1.key_pre_value - '0' + 'a');
return (key_info1.key_pre_value - 'A' + 'a' + 10);
#endif
return (NO_KEY);
}
#if 1 //这是一个测试程序,可根据需要修改使用,打开 #if 开关即可
//--------------------------------------------------------------------------
//函数名称:get_key_func
//功
能:检松开按键(带消抖)、长按和连续多次按键,并获取键值
//参
数:无
//返回值
:INT8U 按键有效时的ASCII码,否则为NO_KEY
//--------------------------------------------------------------------------
INT8U get_key_func()
{
static INT16U key_time_cnt = 0;
static INT8U key_cnt = 0;
static INT8U pre_
INT8U cur_
key_time_cnt ++;
if (key_time_cnt & KEY_TIME_MAX)
cur_key = get_key_release();
if ((cur_key != NO_KEY) && (key_cnt == 0 || cur_key == pre_key))
pre_key = cur_
key_cnt ++;
cur_key = NO_KEY;
if (pre_key & 'a')
cur_key = pre_
else if (key_cnt == 0)
cur_key = NO_KEY;
else if (key_cnt == 1)
cur_key = pre_
else if (key_cnt == 2)
cur_key = 'x';
else if (key_cnt == 3)
cur_key = 'y';
else if (key_cnt == 4)
cur_key = 'z';
// 或者按5次以上
cur_key = '@';
pre_key = NO_KEY;
key_time_cnt = 0;
key_cnt = 0;
return (cur_key);
}
#endif
单片机按键去抖程序_计算机硬件及网络_IT/计算机_专业...{ //按下相应的按键,数码管显示相应的码值 delay...全功能按键程序,支持消抖... 9页 免费©...振动,按 键扫描程序是按顺序执行的; 首先提出三个...特别是独立按键,不经 济也不好用,但是特别情况还是...全功能按键程序,支持消抖... 9页 免费
键盘消抖...按键消抖的程序在网上有几种可供选择,但这里只讨论一种,本人觉得简单得来 又比较强大的一种。 其实消抖的原理就是把一个按键周期内所输入的所有有效信号, 包括...抖动消失后 再一次检测键的状态,如果仍保持闭合状态电平,则确认为真 正有键按...按键硬件消抖电路 暂无评价 3页 免费 全功能按键程序,支持消抖... 9页 免费...一、按键消抖 1.1 计数器型消抖电路(一) 计数器型消抖电路(一)是设置一个模值为(N+1)的控制计数器, 在上升沿时, clk 如果按键 开关 key_in='1',...(断开) ,因为开关的机械特性,重要经历接触-断开-再接触-再断开,最终稳定在 接触位置,这就是开关的抖动,即虽然只是按下按键一次然后放掉,结果在按键信号稳定前后,...(待定),该常数要比正常 // 按键时间要长,防止非...( KeyTemp == LastKey ) //是否第一次按下 {...全功能按键程序,支持消抖... 9页 免费 按键消抖...看老外如何实现按键消抖_计算机软件及应用_IT/计算机_专业资料。看老外如何实现...一次检测到按键被按下后,执行一个延时程序,产生一个 5ms~10ms 的延时程序,...非编码键盘是通过( )来实现键盘的识别、消抖和重键处理等功能,需占用MPU时间,适用于键数较少的场合。 A.硬件B.软件C.算术运算...2 程序电路工作原理以及按键抖动原因 按键电路示意图 (三 “按键消抖计数”程序测试与原理说明 1 程序运行效果说明按下 KEY1,数码管上的示数加 1。 按下 KEY...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 按键映射器 的文章

 

随机推荐