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

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(使用前将#替换为@)

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

  • STM32-定时器详解

    前言 定时器作为微控制器不可缺少的外设 在STM32中也是如此 相信不少初学者学到定时器的时候对STM32的学习热情就大打折扣甚至想要放弃了 因为这一部分知识确实比较复杂 但是 如果你在之前对GPIO 串口通信 外部中断的学习中把这些外设掌
  • 板子接线图

    1 ST LINK V2接线 2 对抗板子刷蓝牙固件 接USB转TTL 用镊子短接两个孔 2 对抗板子用串口测试蓝牙AT命令 短接白色箭头 接TX RX 电源
  • lv5 嵌入式开发-1 进程的创建和回收

    目录 1 进程概念 2 进程内容 3 进程类型 4 进程状态 5 查看进程信息 5 1 相关命令ps top proc 5 2 相关命令 nice renice 5 3 相关命令job bg fg 6 子进程概念 7 子进程创建 fork
  • 【海思SS626

    目录 一 概述 二 安装交叉编译工具 2 1 安装 aarch64 mix410 linux tgz 2 2 安装 cc riscv32 cfg11 musl 20220523 elf tar gz 2 3 检查工具链版本 打印版本则表示安
  • STM32使用USB虚拟串口+YMODEM实现IAP升级

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

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

    嵌入式码农小明最近在研发一个嵌入式产品 用的MC9S12XEP100芯片 其中三个需求需要通过几个使用SPI通讯的芯片实现 硬件开发人员小红照着芯片原理图布好了线 不知是否是没考虑到SPI通讯可以通过CS line来控制要通讯的从机从而实现
  • DTMF通信系统设计—基于MATLAB和STM32

    文章目录 1 摘要 2 设计任务 3 课程设计主要解决的问题 4 设计内容 4 1 整体设计方案 4 2 详细设计内容 5 结果与分析 5 1 基于MATLAB 的DTMF 通信系统 5 2 双机通信模拟 5 2 基于单片机的DTMF 通信
  • Linux下WiFi驱动开发——WiFi基础知识解析(转)

    详见 https blog csdn net zqixiao 09 article details 51103615
  • Android如何配置init.rc中的开机启动进程(service)

    开篇 为什么写这篇文章 先说下我自己的情况 我是个普通的学生 之前在学校一直做Android应用开发 找实习的时候也一直想找相关的工作 来到现在这家公司以后 由于业务调整 被领导安排去做底层开发 本来我对底层的东西一无所知 加上其实并不感兴
  • OpenCV+VS2019打开和关闭电脑摄像头

    关于OpenCV和VS2019的配置 请参考博客以前的连接 OpenCV中主要使用videocapture来打开和关闭摄像头 https docs opencv org master d8 dfe classcv 1 1VideoCaptu
  • 编程器烧写NAND flash的一些说明

    注意事项 1 大小端模式 也即在使用编程器时需不需要做字节反序 2 Spare area处理方式 需要还是不需要 是否含有私有ECC算法 3 坏块处理方式 摘要一段说明如下 虽然针对西尔特SUPERPRO 9000U的文章 但也对许多其他的
  • iMX6ULL学习(二)

    文章目录 Makefile机制规则 一 通配符 二 PHONY假想目标 三 即时变量和延迟变量 四 make函数 foreach VAR LIST TEXT filter out PATTERN TEXT filter out patter
  • 利用树莓派搭建简易服务器

    读研以来笔者一直负责实验室的网络维护 可以说是实验室名副其实的首席大网管 整个实验室是从学校网络中心购买了一个教育网的公网IP地址和带宽 公网IP绑定了实验室的主路由器 而主路由器就在笔者卡位的旁边 有一天笔者突发奇想 拿了手头的树莓派3结
  • thttpd嵌入式www服务工具的使用

    thttpd是一个非常小巧的轻量级web server 它非常简单 仅仅提供了HTTP 1 1和简单的CGI支持 在其官方网站上有一个与其他web server 如Apache Zeus等 的对比图 Benchmark 可以参考 此外 th
  • STM32开发——简介、开发环境(Keil5、CubeMX)、HAL库

    目录 1 简介 初识STM32 2 开发环境 2 1使用Keil5 2 2使用STM32CubeMX 3 标准库与HAL库区别 4 推挽输出与开漏输出 1 简介 初识STM32 什么是单片机 单片机 Single Chip Microcom
  • FPGA UART仿真

    摘自威三学员尤凯元 tb文件 Copyright c 2014 2019 All rights reserved Author Youkaiyuan v3eduyky 126 com wechat 15921999232 File tb t
  • STM32的介绍及MDK

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

    嵌入式开发里 首先需要配置一个串口 用于打印printk信息到控制台 以2440为例 这里的 dev console 设备号 5 1 就是控制台 用于printk信息输出到的设备 但是呢 dev console是个虚拟设备 他需要映射到真正
  • lv12 uboot源码配置编译 8

    目录 1 uboot源码获取 2 uboot特定 3 uboot源码结构 3 1 平台相关代码 3 1 1 arch 3 1 2 board 3 2 平台无关代码 3 2 1 common下放的都是uboot的命令 3 3 配置文件 帮助文

随机推荐