按键松手检测 - 检测是否连续按下

2023-11-18



u8 KEY_Scan(void)
{	
	static u8 keyup=1;      //防止检测多次
	if(keyup&&(KEY0==0||KEY1==0||KEY3==0))
	{
		delay_ms(50);//去抖
		if(KEY0==0||KEY1==0||KEY3==0)
		{	
			keyup=0;			
			if (KEY0==0)
					return KEY0_PRES;
			else if(KEY1==0)
				    return KEY1_PRES;
			else if(KEY3==0)
					return WKUP_PRES;
		    
		} 
	}
	else  if(KEY0==1&&KEY1==1&&KEY3==1)  //若按键全部松开
		          keyup=1; 
	return 0;
}

今天写按键的一个小程序,发现没有松手检测,如果一直按着按键不松开,会一直触发,执行程序。然后发现例程的检测程序,感觉不错。

设置一个静态变量,当此变量为一,并且有按键按下时,进入按键判断函数。进入后把变量设置为0。若一直按着按键,一直执行不到最后若按键全部松开,keyup=1,所以,不会执行多次。

还可以设置一个参数,确定是否需要检测多次:

<pre name="code" class="objc">u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)
         key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY3==0))
	{
		delay_ms(10);//去抖动 
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(KEY3==0)return WKUP_PRES; 
	}else if(KEY0==1&&KEY1==1&&KEY3==1)key_up=1; 	     
	return 0;// 无按键按下
}


 

若mode置一,说明支持连按,则keyup一直为一,会重复检测 吐舌头 吐舌头

2016/1/16






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按键松手检测 - 检测是否连续按下 的相关文章

  • 【MCS-51】时钟电路和复位

    单片机的处理器内部具有众多模块 但是要想协调这些模块统一工作并不是一件易事 为了确保各部分能够统一有序工作 因为单片机已经是一个同步时序电路 所以要想让它内部能够有序工作 我们需要从外部输入一个时钟信号 目录 振荡方式 内部振荡 外部振荡
  • STM32开发——串口通讯(第2篇)——WIFI(Esp8266)

    目录 1 ESP8266 作为设备 2 ESP8266作为服务器 注意 1 在中断中一般不直接在中断服务函数里处理数据 而是在收到数据后直接丢给队列 再处理数据 2 在中断服务函数里尽量减少使用延时函数及打印函数 1 ESP8266 作为设
  • 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子 1048272975 1 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称 目前教科书基本都是以早期的MCS 51为原型 讲解微机的原理
  • STM32使用USB虚拟串口+YMODEM实现IAP升级

    USB虚拟串口 基于USB CDC可以将USB做成虚拟串口 这块ST已经给我们做好了 直接使用相关封装好的接口就可以了 具体使用参考 https blog csdn net mirco mcu article details 1060819
  • MC9S12XEP100的ATD模块(ADC12B16CV1)

    网上的各种示例基本都是用同步 轮询的方式来使用ATD模块的 自己封装ATD模块时想利用中断改成异步的方式 结果出现了莫名其妙的问题 我明明没有开启比较中断的 结果还是跳到了比较中断里头去了 一气之下 把整个文档翻译了一遍 顺带给大家分享了
  • max 3485 使用方法详解

    芯片管脚介绍 1 1 1号引脚为RO 通常与MCU UART控制器的RX相连接 用于接收对端数据 1 2 2号引脚为RE RE对RO起控制作用 RE为低电平 RO可接收数据 RE为高电平时 RO不接收数据 1 3 3号引脚为DE DE对 D
  • GD32替换STM32后 写片上闪存(flash)失败的解决方法

    目录 型号 问题 解决办法 下载gd的fmc操作库 修改fmc文件 使用 擦除一页 写一页 型号 使用的GD32C103CB等引脚替换STM32F103CB 问题 使用hal库的flash操作接口 片上flash可以正常擦除 但是无法写入
  • 趣谈操作系统原理,存储管理之页式、段式、段页式存储

    一 概述 非连续分配管理方式允许一个程序分散地装入到不相邻的内存分区 根据分区的大小是否固定分为分页式存储管理方式和分段式存储管理方式 分页存储管理方式中 又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为基本分页式存储管理方式和
  • 【面试】嵌入式软件与非嵌入式软件、设备驱动与裸机驱动开发区别

    嵌入式软件开发与非嵌入式软件开发区别 设备驱动开发与裸机驱动开发区别 嵌入式开发与传统单片机开发区别 如果面试遇到这样的问题 三个问题的答案一致 答 我认为嵌入式软件与非嵌入式软件 设备驱动开发与裸机驱动开发 嵌入式开发与传统单片机开发 的
  • Linux FB 的学习

    linux FB 是CPU 到显示器中的中间人 像一个池子一样 CPU 将操作好的数据项放到池子中 然后再将这些数据显示到屏幕上 它的好处在于 用户可以将FB看成一个显示内存的映射 当将其映射到用户进程空间是可以直接进行读写操作 操作的方式
  • Android如何配置init.rc中的开机启动进程(service)

    开篇 为什么写这篇文章 先说下我自己的情况 我是个普通的学生 之前在学校一直做Android应用开发 找实习的时候也一直想找相关的工作 来到现在这家公司以后 由于业务调整 被领导安排去做底层开发 本来我对底层的东西一无所知 加上其实并不感兴
  • 【STM32】定时器中断原理及操作

    目录 时钟的选择及分频 定时器中断有关的寄存器 定时器中断有关的库函数 1 时钟使能函数 RCC APB1PeriphClockCmd 2 定时器初始化函数 TIM TimeBaseInit 3 定时器中断使能 选择函数 TIM ITCon
  • 利用树莓派搭建简易服务器

    读研以来笔者一直负责实验室的网络维护 可以说是实验室名副其实的首席大网管 整个实验室是从学校网络中心购买了一个教育网的公网IP地址和带宽 公网IP绑定了实验室的主路由器 而主路由器就在笔者卡位的旁边 有一天笔者突发奇想 拿了手头的树莓派3结
  • 一文搞懂Linux内核页框回收(Page Frame Reclamation)

    页替换策略 Page Replacement Policy 每当讨论页替换策略 提及最多的就是基于LRU Least Recently Used 的算法 但严格来说这是不对的因为这些lists并不是严格按照LRU的顺序来维护的 在Linux
  • 双向链表,单向链表//循环

    head h ifndef HEAD H define HEAD H include
  • Linux内核文件系统知识大总结

    1 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • STM32的介绍及MDK

    文章目录 STM32介绍 单片机 STM32命名 armV7的三个系列 STM32系统结构 CMSIS标准 STM32F4方包绍官方库包 STM32F103 STM32F103资源 STM32F103总线架构 STM32F103引脚 STM
  • 关于/dev/console的个人理解

    嵌入式开发里 首先需要配置一个串口 用于打印printk信息到控制台 以2440为例 这里的 dev console 设备号 5 1 就是控制台 用于printk信息输出到的设备 但是呢 dev console是个虚拟设备 他需要映射到真正
  • Unity(纯C语言单元测试框架!不是那个Unity3d)入门文档

    译者注 译者博客 http blog csdn net lin strong 转载请保留这条 此为Unity手册的翻译 仅供学习交流使用 请勿用于商业用途 翻译的资料是公开的 在docs UnityGettingStartedGuide m
  • lv12 uboot移植深化 9

    u boot 2013 0 1移植 实验目的 了解 u boot 的代码结构及移植 的基本 方法 实验环境 u buntu 14 04

随机推荐