按键双击和单击c语言,按键单击与双击
按键的单击与双击与长按短按实现方式相近,以下代码仅供参考,写得不是很好
适用于蓝桥杯开发板
程序扩展性不强,更重要的是思路
io.h
#ifndef _IO_H
#define _IO_H
#include "stm32f10x.h"
#define SingleClick 1
#define DoubleClick 2
#define KEY_B1 1
#define KEY_B2 2
#define KEY_B3 3
#define KEY_B4 4
#define TimeInterval 300 //判断双击与单击时间
#define keyState1 1
#define keyState2 2
#define keyState3 3
#define keyState4 4
//enum ss{keyState1,keyState2,keyState3,keyState4}keyState;
#define KEY0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)
#define KEY2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
#define KEY3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)
enum k{key0,key1,key2,key3};
extern void Delay_Ms(u32 nTime);
void RCC_Init(void);
void IO_Init(void);
void LED_Control(u16 nled , u8 flag);
u8 KEY_Scan(void);
void Key_Double(void);
#endif
io.c
u8 KEY_Scan(void)//按键扫描函数,查找键值
{
static u8 flag = 1;
if(flag&&(KEY0==0||KEY1==0||KEY2==0||KEY3==0))
{
Delay_Ms(10);
flag = 0;
if(KEY0==0)return key0;
else if(KEY1==0)return key1;
else if(KEY2==0)return key2;
else if(KEY3==0)return key3;
}
else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==1)flag = 1;
return 0xff;
}
//单击双击
/*
1、两次间隔10ms - 300ms以内是双击, 按下第一次开始计时
2、300ms 之后没有按下第二次就是单击
3、思路与我按键单击双击的思维在方向上不太一样,这里是直接状态中判断按键
*/
void Key_Double(void)
{
static u8 key_value = 0xff;
// static u16 keynum1 = 0,keynum2 = 0;
static u8 key = 0; //记录第一次按键是谁按下
switch(keyState)//keyState见宏定义,是按键第一次按下
{
case keyState1: key_value = KEY_Scan();
if(key_value != 0xff){
// keynum1 = keyTime;
flag_1 = 1;
keyState = keyState2;
if(key_value==key0)key = 1;
else if(key_value==key1)key = 2;
else if(key_value==key2)key = 3;
else if(key_value==key3)key = 4;
}
else
{
flag_1 = 0;
keyState = keyState1;
}
break;
case keyState2: key_value = KEY_Scan();
if(keyTime<300)
{
switch(key)
{
case 1:if(key_value==key0){
keyDouble = KEY_B1;flag_1 = 0;
keyTime = 0;
keyState = keyState1;
} break;
case 2:if(key_value==key1){
keyDouble = KEY_B2;flag_1 = 0;
keyTime = 0;
keyState = keyState1;
} break;
case 3:if(key_value==key2){
keyDouble = KEY_B3;flag_1 = 0;
keyTime = 0;
keyState = keyState1;
}
break;
case 4:if(key_value==key3){
keyDouble = KEY_B4;flag_1 = 0;
keyTime = 0;
keyState = keyState1;
}
break;
}
}
else
{
switch(key)
{
case 1:keySingle = KEY_B1; break;
case 2:keySingle = KEY_B2; break;
case 3:keySingle = KEY_B3; break;
case 4:keySingle = KEY_B4; break;
}
flag_1 = 0;
keyTime = 0;
keyState = keyState1;
key = 0;
}
break;
case keyState3:
break;
case keyState4:
break;
default: break;
}
}
按键双击和单击c语言,按键单击与双击相关推荐
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
看了一个晚上,结合了马潮老师的书,才搞懂这个程序,确实经典!原文: 题目:多功能按键设计.利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按. (amobbs.com 阿莫电子论坛 ...
- 单击修复计算机英语怎么说,电脑选择语言方式,单击修复计算机
其他选项:如果电源在启动过程中中断,则正常启动windows 但是我的电脑现在什么模式都启动不了 pe模式命令提示符输入"cd \windows\system32" 出现系统找不到 ...
- 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...
- c语言 按键切换显示屏,51单片机lcd1602按键切屏
大家好,我又来了,这次是基础切屏(我也只会这基础..),我用的是stc15w4k56s4的单片机,作用是,可以使用和51一样的操作. 切屏 切屏: 例如我想在两个屏幕之间切换:1.先把每个屏幕应该显示 ...
- jQuery —— 元素绑定单击事件(click),但是双击该元素也能触发单击事件,同时会触发两次单击事件的问题
最近做项目遇到一个问题,给元素绑定了单击事件,但是双击该元素时同样会触发单击事件,并且触发两次的问题,网上找了解决办法基本上都是用 clearTimeout .setTimeout 解决,但是效果不是 ...
- c语言按键控制的步进电机程序,独立按键控制步进电机运转c语言程序
独立按键控制步进电机运转c语言程序 /* * 名称:步进电机 * * 晶振:12MHZ * * 修改:无 * * 内容: 主程序中用 3 个按键,加速.减速.启动和停止.定时器做数码* * 管动态扫描 ...
- VUE 解决双击事件与单击事件冲突(单击模拟双击)
// 单击模拟双击操作this.clickTimes++;if (this.clickTimes === 2) { //当点击次数为2this.clickTimes = 0; //记得清零// 触发双 ...
- 用c写按键精灵脚本语言,按键精灵论坛发脚本的格式自动编排脚本源码
帮助你将按键脚本源代码,按照论坛Discuz!语言进行重新格式编排,主要是对语法进行着色,使脚本代码看起来更好看. 1.演示了如何调用系统打开文件对话框,以及如何根据用户的选择,进行下一步的操作(如打 ...
- 用c语言按键控制数码管,按键与数码管C语言例程
/* 程序效果:按键按下,蜂鸣器响,数码管有相应键值显示按下E键继电器开, 按下C键继电器关注:本空间所有程序仅供参考,所有程序都经实验过,符合题意. (若全选程序并复制到编译器中进行编译,定会出错, ...
- 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)
一.[开始] 1.按键精灵android手机脚本 1.1.截取手机上指定范围内的图片,通过api上传到有道智云处理后返回识别后的JSON格式数据. 1.2.代码 Import "ShanHa ...
最新文章
- 【Nvivo教程】使用Nvivo构建计算的本体
- windows server2012
- 【Netty】NIO 网络通信 SelectionKey 常用 API 简介
- SAP ABAP实用技巧介绍系列之ABAP取中文字符串的字节长度
- [Java]Java中的i++不是原子操作
- 索引(转载自百度百科)
- apache+php
- U盘格式化后容量变小问题修复方案
- sel4白皮书翻译 | sel4 whitepaper | sel4简介
- i5 6500 HD530 台式机黑苹果记录
- 2021_WSDM_Pre-Training Graph Neural Networks for Cold-Start Users and Items Representation
- (Hopcroft-Carp二分图匹配)Rain on your Parade
- 职教计算机录取分数,今年高职院校录取分数线是多少?
- drf celery
- 提取了Windows 10 Build 9901 系统自带 高清分辨率壁纸
- 【计算方法】实验一:python使用二分法、不动点法、牛顿法求根
- maya模型切割工具插件 tjh_Cut_Tool 1.2.0 下载及教程
- python实现进度条
- 关于数据清理,你必须知道这些!
- 自用笔记-Qt5.14.2开发Android环境搭建
热门文章
- Java源码-猜数字小游戏(Swing编程版)
- libGDX-5:文本显示 BitmapFont 和 工具 hiero
- Linux服务器生成https证书
- cad插件加载bplot成功用不了_AUTOCAD 能加载BatchPlot.VLX批量打印插件但是输入bplot打不开批量打印界面...
- ios13怎么打开科学计算机,教你iOS13怎么投屏到Win10上
- quick cocos2dx 组件使用要领
- CREO:CREO软件之零件【模型】、【分析】、【注释】、【工具】【视图】、【柔性建模】、【编辑】、【造型】、【渲染】的简介及其使用方法之详细攻略
- vba随机抽取人名不重复_excel如何实现随机抽取且不重复
- Ubuntu安装和显卡驱动安装
- 【通俗理解】开漏/开集,线与