贴一个个人使用的按键程序,.C .H 文件,,使用状态机.
个人经常在程序中使用,,,移植比较方便,,把接口函数一改,,,直接拿来使用,,
有按下,长按,连_发,抬起,,四种按键返回值...
不多说,见代码.
点击此处下载 ourdev_468199.rar(文件大小:2K) (原文件名:KEYINPUT.rar)
贴一个使用例子...
KeyTmp = GetKey();
switch(KeyTmp)
{
case KEY_DOWN|KEY3:
//返回键
SysSts = STS_IDLE;
KeyDir = GOTO_FATHER;
break;
case KEY_DOWN|KEY2:
case KEY_LONG|KEY2:
case KEY_LIAN|KEY2:
//...
break;
} 考虑做上 双击 的按键,,,到时候再贴上来大家参考... 谢谢!收下了! 留名 thanks! 正要用。参考下。谢谢! 有复合按键处理吗? thank you! 看看
MARK mark mark,ding 正要用到,参考一下,谢谢了 按键防抖效果如何? 顶~~~~ 飘过!!!!!!!!!!!!!!! MARK 做个记号!! 学习学习 学习ing!! 正好要用 学习 学习中 楼主的防抖效果咋样啊? TKS mark下! 谢谢。。。。下载试试。。。 mark 感谢LZ的分享,已经用上了 mark mark 收下@谢谢 为什么老考虑 按键消抖! 简单的单键程序 100ms周期扫描一次 一点问题都没有 snwuzhisheng 发表于 2012-6-5 09:30 static/image/common/back.gif
为什么老考虑 按键消抖! 简单的单键程序 100ms周期扫描一次 一点问题都没有
你没做过产品吧? 真正的消抖必须得用状态机啊 你以为别人不想简单点啊 yao1 发表于 2012-6-5 09:38 static/image/common/back.gif
你没做过产品吧? 真正的消抖必须得用状态机啊 你以为别人不想简单点啊
{:3_48:} 没像其他人 专门开辟了个 case状态来做消抖 就是100ms扫描一次 当两个周期内都按键了就判断为短按 即200ms内按下按键就判断有按键按下 嘿嘿 不知道这个算消除抖动吗 snwuzhisheng 发表于 2012-6-5 10:04 static/image/common/back.gif
没像其他人 专门开辟了个 case状态来做消抖 就是100ms扫描一次 当两个周期内都按键了就判断为短 ...
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 苦苦追寻啊~~~ yao1 发表于 2012-6-5 11:51 static/image/common/back.gif
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 ...
嗯 好的我现在用时间触发的 任务调度 做四个任务的东西还可以 一般像你们的产品有多少任务哦 mark下! 谢谢楼主! x谢谢楼主 分享了 mark
{:lol:}{:lol:}{:lol:}{:lol:}{:lol:} 初学,正为这问题苦恼 以前是用马老师书了状态机的方法,看看这个怎么样 ddxx谢谢分享 菜鸟学习中,先参考一下
好东西,下了,谢谢! 收下先~~~ 楼猪,双击弄好了没有~~?? 嗯,这个按键程序好早就看到过了,不过我将它改进了,支持组合按键(没办法,按键太少),现在在项目中已经使用。 wuha 发表于 2012-8-29 15:10 static/image/common/back.gif
嗯,这个按键程序好早就看到过了,不过我将它改进了,支持组合按键(没办法,按键太少),现在在项目中已经 ...
哥们,发下共享一下吧! 初学,正要用到,参考一下,谢谢了! 哟西…。。。。。。。 #include"STC12C5620AD.H"
sbitbell =P2^0;
extern unsigned charkeyboard();
void delay()
{
unsigned char i;
for(i=0;i<320;i++);
}
void main(void)
{
switch(keyboard())
{
case 1: bell = 0 ;delay(); delay(); break;
case 2: bell = 0 ;delay(); delay(); delay();break;
case 3: bell = 0 ;delay(); delay(); delay();delay() ; break;
case 4: bell = 0 ;delay(); delay(); delay();delay();delay(); break;
default:break;
}
}
//}
//独立按键 P10-P13
extern unsigned charkeyboard()
{
unsigned char key_number =0 ; // 按键号
unsigned char key_temp = 0; //暂存按键值
static unsigned char key_code = 0; //按键值
static unsigned char key_count = 0; //电平有效次数
static unsigned char key_flag = 0; //按键有效标志位
key_temp = P1&0x0F;
if(key_temp != 0x0F)
{
key_count++;
if(key_count == 10)
{
key_flag = 1;
key_code = key_temp;
}
}
else //松手判断
{
key_count = 0;
if(key_flag==1)
{
key_flag = 0;
switch(key_code)
{
case 0x0e: key_number = 1; break;
case 0x0D: key_number = 2; break;
case 0x0b: key_number = 3; break;
case 0x07: key_number = 4; break;
}
}
}
return(key_number);
}
帮忙看看这个程序有啥问题,感觉都没错,就是不能用 谢谢楼主! ding 请教两个问题。
一,有没有按键检测不到的情况。
二,状态2到状态3是如何转换的。 make................ mark。。。。。 mark mark! 学习一下.... 非常期待双击版。还有弱弱问一下,连发是什么概念啦。。。。{:sad:} 这个要支持!!{:lol:} 谢谢了,先收下 cc1987 发表于 2012-6-7 16:50 static/image/common/back.gif
x谢谢楼主 分享了
请教一个问题:状态2到状态3是如何转换的,谢谢! ···LZ·我将按键扫描放入中断10WS一次松开后 连接加几下哦··是否中断扫描太快 ·LZ·中断扫描中断不知道为何没有保存 ··能帮忙分析不··棘手啊 mark~顶! mark~顶! yao1 发表于 2012-6-5 11:51 static/image/common/back.gif
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 ...
同意,往往有时候最简单的按键倒可靠了。
jsls135 发表于 2013-4-13 01:24 static/image/common/back.gif
非常期待双击版。还有弱弱问一下,连发是什么概念啦。。。。
连发就是电子表里设置时间时按住数会自己快速变 LOVEBABY 发表于 2012-12-8 18:54 static/image/common/back.gif
#include"STC12C5620AD.H"
sbitbell =P2^0;
key_temp = P1&0x0F;
知道这句是什么意思吗?没细看,这条不对
key_temp = P1|0x0F;试试看 mark!! 怎么处理复合按键和不同IO口下的按键处理啊??{:shy:} 先收藏,留着用 正要用。参考下。谢谢! 学习参考!{:titter:} mark 这个要mark一下
页:
[1]