标题: 一种基于定时中断的按键检测程序 [打印本页]
作者: jiujiu 时间: 2014-12-20 18:31
标题: 一种基于定时中断的按键检测程序
零 该程序产生的背景
话说2012年,小白菜要做一个三相电压电流组合表,这个仪表需要进行数据输入(小白菜以前的项目也有输入,但是小白菜没有仔细的研究过),并且给出的时间很长,小白菜有时间来做一些“研究处理”。拿着以前写的按键检测程序,感觉漏洞百出,于是想着趁着有时间把这部分做出来,于是便用了一个星期(实际是5天,双休思密达)专门写了这部分程序。
一 小白菜的应用需求
小白菜的仪表仅需要单短击(简称单击)和单长击(简称长击),单短击要在按键松开后才进行识别,单长击要在达到设定的时间阀值时进行识别(这时按键未松开)。
不需要考虑的情况如下,不需要连击(可以做为多次短击)、不需要多键同时击、暂时不需要考虑输入数字时长按某键,数字快速自加或自减。
该检测程序要满目不依赖于任何一种单片机,也不依赖按键连接方式,如独立式,矩阵式(当然你要用按键扫描芯片那就……你要用AD式键盘,我……好吧,你赢了~),能够独立存在。
二 按键过程分析
1 按键小思考
正常的按键过程(不考虑非法的按键状态)如图2.1.1。
图2.1.1 正常按键状态示意图
单击和长击只是时间上的区分而已,但是其识别时稍有区别,单击是在按键松开时进行识别的,长击是在按键闭合时进行识别的。见图2.1.2。
图2.1.2 长短击按键状态示意图
2 各种可能出现的按键情况
合法情况不再赘述。下面把非法(仅在本应用中非法)的情况列一下。
(1) 人为或干扰引起的单击时间过短(主要为防干扰)。
(2) 单击时间过长(与(1)对应,凡事有短就有长,要有度嘛~)。
(3) 按下了多个键(与我的应用需要相悖,所以非法)。这里有可能是同时按的,也有可能是异步按下的。
(4) 快速多次按同一个键。这种情况可以归结到(1)。
(5) 我觉得没有了,元芳,你怎么看??
一种基于定时器按键检测程序(已测试).rar
(527.02 KB, 下载次数: 260)
作者: jiujiu 时间: 2014-12-20 18:32
AppStdin.C文件:
作者: jiujiu 时间: 2014-12-20 18:32
AppStdin.H文件:
作者: jiujiu 时间: 2014-12-20 18:34
TypeRedefine.H文件:
作者: jiujiu 时间: 2014-12-20 18:34
Config.H文件:
- /*
- ********************************************************************************
- * 开发环境 : Keil4
- * 文件名 : Config.H
- * 程序员 : 3htech
- * 开发时间 : 2012-06-06
- * 描述 : 所有头文件的总集合
- * 生存条件 : 自由存在。
- *-------------------------------------------------------------------------------
- * 修 改 :
- * 日 期 :
- * 描 述 :
- *-------------------------------------------------------------------------------
- ********************************************************************************
- */
- //------------------------------ 文件开关 ------------------------------//
- // 防止文件包含时多次编本文件,与本文件结尾处的endif对应。
- #ifndef _CONFIG_H_
- #define _CONFIG_H_
- //----------------------------------------------------------------------------//
- //------------------------------ 系统头文件包含 ------------------------------//
- #include<intrins.h>
- #include <stdio.H>
- #include <stdlib.H>
- #include <math.H>
- //----------------------------- 自定义头文件包含 -----------------------------//
- // 单片机头文件
- //=============================//
- #include "ATT703x.H"
- // 公共层
- //=============================//
- #include "TypeRedefine.H"
- // 应用层
- //=============================//
- // 芯片驱动
- //=============================//
- // 总线驱动
- //=============================//
- //------------------------------ 文件开关 ------------------------------//
- // 防止文件包含时多次编本文件,与本文件开头处的 #ifndef 对应。
- #endif
- //----------------------------------------------------------------------------//
- //------------------------------ 文件结束 ------------------------------//
复制代码
作者: 51hei电控2112312 时间: 2014-12-24 20:25
GOOD!!!
作者: wangyifan 时间: 2015-2-23 21:17
不错,下载来慢慢研究,谢谢!
作者: 西点钟灵毓秀 时间: 2015-7-27 18:20


号东西呀!!!
不知道会不会用到了
作者: bhjyqjs 时间: 2018-2-9 15:43
不错,很有研究价值
作者: changchang12345 时间: 2018-8-8 17:10
不错 很值得研究
作者: mozid9 时间: 2018-10-16 14:42
谢谢楼主分享!!
作者: PCB_PCB 时间: 2018-11-5 15:44
向楼主学习,注译很清楚
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |