按键扫描函数,支持按键长按和短按,长按与短按的区别可以放到10ms的定时里面,根据需要设置判断次数
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下
//4,KEY3按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!!
u8 Key_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;
return 0;// 无按键按下
}
//0,没有任何按键按下
//1,长按
//2,短按
u8 Key_long_short(void)
{
static u8 oldkey,newkey;
static u8 keylongnum;
static u8 keylongflag;
u8 key;
newkey = Key_Scan(1);
if(newkey!=0)
{
if(oldkey==newkey)
{
keylongnum++;
if(keylongnum>100)
{
keylongnum=0;
keylongflag=1;
key = 1;
}
}
}
else
{
if((oldkey!=0)&&(keylongflag!=1))
{
key = 2;
}
else
{
key = 0;
}
keylongnum=0;
keylongflag=0;
}
oldkey=newkey;
return(key);
}
关键字:独立按键 长按 短按
引用地址:
独立按键的长按与短按
推荐阅读最新更新时间:2024-03-16 14:34
基于LPC1752的独立按键的原理及实现
1. 简介 本文档主要介绍LPC1752采集4个独立按键的原理及实现。 本设计共有4个独立按键,分别是确认键(SW1)、上键(SW2)、下键(SW3)和复合键(SW4)。确认键(SW1)连接至LPC1752的P1.25引脚,上键(SW2)连接至LPC1752的P1.26引脚,下键(SW3)连接至LPC1752的P1.28引脚,复合键(SW4)连接至LPC1752的P1.29引脚。连接图如下: 图1 独立按键连接图 本设计按键采用高电平输入有效方式。按键按下时,LPC1752检测到高电平,认为有按键信号输入。本设计可以处理独立按键的按下、长按以及按键间的组合键。 2. 程序设计 2.1 定义 2.2 初始化函数Key
[单片机]
在51单片机上用定时器实现按键长按、短按功能
我们在项目中常常需要在只有一个按键的情况下,来实现长按执行某个功能,短按执行另一个功能。 鉴于此,用51搭的核心板实测,亲测可行。好了,废话少说,简单粗暴,直接贴上程序结构。 主函数() { } 在进入while大循环中,先要配置定时器。 在while中核心是:使用两个if块判断,第一个if块判断按键是否按下,在第一个if块里面只进行按键按下标志位设置和定时器计数。 在第二个if块里根据第一个if块定时器计数来执行长短按功能,记得在退出第二个if块时,按键按下标志位(press_flag)和定时器 计数变量(count)都要清零。 …… 定时器配置和中断服务程序就不贴出来了。
[单片机]
独立按键和矩阵键盘原理
按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送人累加器,然后通过跳转指令转入执行该键
[单片机]
STM8之外部中断长按键识别相关内容
STM8常用中断指令 开总中断 _asm(“rim”); 禁止中断 _asm(“sim”); 进入停机模式 _asm(“halt”); 中断返回 _asm(“iret”); 等待中断 _asm(“wfi”); 软件中断 _asm(“trap”); STM8S常用中断映射 如使用中断函数时,可以通过在上图中查找相对应的中断向量号,而中断函数的名字可以自定义 外部中断长按键识别相关配置 ??STM8S为外部中断事件专门分配了五个中断向量: PortA 口的5个引脚:PA[6:2] PortB 口的8个引脚:PB[7:0] PortC 口的8
[单片机]
MSP430G2553测试程序(长短按键识别)
//原始状态P1.6亮,P1.0暗,利用状态机进行按键检测,短按键情况下并释放的瞬间P1.0翻转,P1.6翻转 //长按键P1.0,P1.6按照10Hz的频率闪烁 // MSP430G2xx3 // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // P1.3|KEY P1.6|-- LED // | P1.0|-- LED // 作者 http://jiwm.blog.163.com // Built with IAR Embedded
[单片机]