/****************************************************************************/

//文 件 名:key.c

//功 能:短击\连击

//调用方法:unsigned char keyValue = ReadKey();

//说 明:该程序不适用于阵列键盘.

// 该程序不需要使用定时器.

// 调用处要加入switch语句来判断相应按键按下并执行相应动作.

// 如需要在按键松开后执行动作,则调用函数需要定义一个bit标志位,在default语句里判断标志位状态.

// KEY_WOBBLE_TIME 指程序程序执行次数.实际应用中要根据程序的长短来调整成合适的数值.

//

//备 注:程序思路是当按键被按下时开始计算程序的执行次数,如小于KEY_WOBBLE_TIME,则认为按键没有被按下.

// 引用自http://www.rupeng.com/forum/thread-12239-1-1.html,略做更改.

// KEIL编译时会提示WARNING C291: not every exit path returns a value.不影响使用.

// 如有朋友发现问题所在请联系我.

/****************************************************************************/

#include

#define KEY_IO P1 //按键所连的IO口

#define NO_KEY_VALUE 0xf //当按键没有被按下时IO口的值

#define KEY_WOBBLE_TIME 150 //去抖动时间(待定)

#define KEY_OVER_TIME 500 //等待进入连击时间(待定),该常数要比正常

//按键时间要长,防止非目的性进入连击模式

#define KEY_QUICK_TIME 200 //等待按键抬起的连击时间(待定)

typedef unsigned char uchar;

typedef unsigned int uint;

uchar ReadKey(){ //判断哪个键被按下

static uchar lastKey = NO_KEY_VALUE ;

static uint keyCount = 0;

static uint keyOverTime = KEY_OVER_TIME;

uchar keyTemp = NO_KEY_VALUE ;

keyTemp = KEY_IO & NO_KEY_VALUE ; //读取键值

if(keyTemp == NO_KEY_VALUE ){ //无按键按下时

keyCount = 0;

keyOverTime = KEY_OVER_TIME;

return NO_KEY_VALUE ;

}else{ //有按键按下时

if(keyTemp==lastKey){

if(++keyCount == KEY_WOBBLE_TIME){ //不是第1次按下判断抖动是否结束

return keyTemp; //去抖结束,返回键值

}else{

if(keyCount>keyOverTime){

keyCount = 0;

keyOverTime = KEY_QUICK_TIME;

}

return NO_KEY_VALUE ;

}

}else{ //是第1次按下则保存键值,下次执行此函数时与读到的键值作比较

lastKey = keyTemp ; //保存第1次读到的键值

keyCount = 0; //延时计数器清零

keyOverTime = KEY_OVER_TIME ;

return NO_KEY_VALUE ;

}

}

}

///

以上程序例子我用三个按键连在P1^0,P1^1,P1^2,使用中根据实际需要更改

KEY_IO P1 , NO_KEY_VALUE ,KEY_WOBBLE_TIME , KEY_OVER_TIME 500,

#define KEY_QUICK_TIME 200 .

如只需要判断单击,把判断连击的代码删除即可.

抛砖引玉^^

单片机按键检测程序c语言,单片机检测按键短击,连击c程序相关推荐

  1. 小程序源码:老年祝福短视频微信小程序源码下载支持流量主

    这是一款相当于是老年人的一个短视频小程序 里面的视频内容基本都是那些老年人喜欢转发的 所以说可以用此来打入老年人的圈子让老年人看了基本都会转发 所以裂变还是挺不错的! 这一款小程序的视频是自动化的 视 ...

  2. 单片机设计时钟程序c语言,单片机电子时钟程序设计

    共用体除非必要,否则我们不推荐使用,枚举的用法比较简单,在本书 19 章的项目实践中有很好的示例,这节课我们先来练习一下结构体的使用.下边这个程序的功能是一个带日期的电子钟,相当于一个简易万年历了,并 ...

  3. 散转程序c语言,单片机 散转表程序的使用

    原标题:单片机 散转表程序的使用 使用散转表可以尽可能的减少程序的编写,方便. 减少判断次数. 程序名:散转程序试验 ;说明: 开使后 1亮,按下任何按键,寄存器r0从零加起,根据r0内容,程序散转到 ...

  4. 单片机实现水位控制C语言,单片机课程设计 水位自动控制.doc

    单片机课程设计 水位自动控制 河南机电高等专科学校电气工程系 电子课程设计报告 设计题目:水位自动控制 专业: 电机与电器 班级: 101 班 学号: 姓名: 指导教师: 设计时间: 2012-6-2 ...

  5. 单片机 多机通讯c语言,单片机多机串口通信.doc

    单片机多机串口通信 摘要 本文详细介绍了基于RS-485总线的单片机与多台单片机间的串行通信原理.实现方法和相应的通信硬件.软件设计.该设计是由单片机与单片机组成的主从控制系统,其中单片 关键词: 单 ...

  6. 单片机tcp ip协议c语言,单片机TCP IP协议栈实现的原理

    对已TCP IP协议栈,我们已经说了很多关于它的原理相关的知识了.但是只有原理是不够的,在这方面我们将要举出一个实际操作实例为大家讲解,那么首先我们来看一下有关于单片机TCP/IP就是在单片机上运行的 ...

  7. 想设计一个母亲节小程序c语言,明天母亲节,用这款小程序,给妈妈送一张贺卡吧!...

    原标题:明天母亲节,用这款小程序,给妈妈送一张贺卡吧! 小程序体验师:陈丹阳 妈妈,再打我一次吧. 明天就是一年一度的母亲节了,还没想好给妈妈送什么吗? 现在,「知晓程序」就给你推荐一款贺卡小程序「小 ...

  8. 最新版去水印小程序源码/基于WordPress的短视频去水印小程序源码

    最新版去水印小程序源码,基于WordPress的短视频去水印小程序源码.本版本全开源,是Wordpress插件 上传到Wordpress 安装插件,启动之后绑定自己的小程序id就可以了. wordpr ...

  9. ds18b20程序c语言,单片机中使用DS18B20温度传感器C语言程序(参考6)

    /******************************************/ // //       DS18B20温度计C程序 //       2007.06.08 /******** ...

最新文章

  1. hash是线程安全的吗?怎么解决?_这次进程、线程、多线程和线程安全问题,一次性帮你全解决了...
  2. TFS2012 用户重复无法添加到组问题解决方法
  3. 398. Random Pick Index
  4. 德布罗意波与神经网络与粒子
  5. 机器学习实战读书笔记(3)朴素贝叶斯
  6. 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
  7. 套口机跳针修理带图_套口机维修注意事项
  8. 2021富途校招后台C++
  9. MongoDB集群——副本集
  10. (1)-(Two SUM-在数组中找到两个数,他们的和为给定的数)-(数组遍历)
  11. Ubuntu桌面生存指南:Linux 的哲学
  12. Luogu2894 [USACO08FEB]Hotel G
  13. 【Unity3D插件】Highlighting System插件分享《物体高亮插件》
  14. 19. 各种提权姿势总结
  15. 连接linux工具Mtr,Linux/Windows MTR工具检测服务器性能详细方法
  16. MATLAB如何调用百度云文字识别API
  17. 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔...
  18. Android Studio如何创建VR项目。
  19. c语言中\0’ ,‘0’, “0” ,0的区别
  20. 【时间序列分析】05.谱函数与谱密度

热门文章

  1. 呆滞库存产生的原因是什么?该如何预防?
  2. Spring打印sql语句,MybatisLog小黑鸟无法打印sql的解决
  3. AMDR5-5600g+光威悍将2666 16G测试
  4. 安利一个小众又高薪的职业
  5. 番外-vue 导出word文档(包括屏幕截图)
  6. GC分类、TLAB、逃逸分析、栈上分配、同步消除、标量替换
  7. ESP8266+RF433模块结合制作网络遥控器示例
  8. 3CX电话系统中的媒体服务器模式(Media Server Modes)
  9. 分布式文件存储--MongoDB
  10. P2P网贷平台改造规划希望各位给点意见