极限编程!2条语句实现电容触摸按键驱动,可长期稳定工作

2020-01-18 18:46发布

本帖最后由 abc0010 于 2014-1-9 21:18 编辑

极限编程!2条语句实现电容触摸按键驱动,可以长期稳定工作,不需要消抖延迟,不需要中断处理

之前买模块的时候获得一份编程资料,因为项目忙没看过。。。

直接上代码:

if (key1 != key1_flg)        //键1驱动程序, 每按一次只进入一次
{
        key1_flg = key1;
        KeyProc(1);        //这里是按返回值处理,不属于驱动程序
}


有视频:
http://v.youku.com/v_show/id_XNjU5NDgwMzAw.html

有资料:
电容触摸IC-xaj2013-实用框架.rar (836 Bytes, 下载次数: 94) 2014-1-9 16:07 上传 点击文件名下载附件
C语言编程资料


C语言方面我是个菜鸟,不过我发现,资料 电容触摸IC-xaj2013-实用框架.c 上的GetKey()函数不论放在主程序的什么地方,程序都可以正常工作,不知道对不对。欢迎大家指正。


这是原作者的文档:
/*****************************************************
注意,本程序只是一个框架。不能直接编译。使用者需要一定
的编程基础,然后加进自己的具体功能才能实现相应的功能。

从本框架上可以看出,wxaj2013用于键盘,不需要作消抖延迟
也不需要中断处理。同时又确保按键无重复、无效等操作。让
单片机发挥更大的效率。
*****************************************************/

#include <stdio.h>
#include <reg52.h>

void systeminit(void);
void getkey(void);
void keyproc(char keyreturnval);
void funtion1(void);
void funtion2(void);
....
void otherjob(void);

void main()
{
        systeminit();

        while(1)
        {
                getkey();
                funtion1();
                funtion2();
                ......
                otherjob();
        }
}

//wxaj2013按键处理程序,只需要定义相应的引脚即可
//===============================================
void getkey()
{
        if(key1 != key1_flag)        //只有标志和引脚状态不同时才进入
        {
                key1_flag = key1;        //更新标志, 和引脚同步, 防止多次进入
                KeyProc(1);        //按键处理
        }

        if(key2 != key2_flag)
        {
                key2_flag = key2;
                KeyProc(2);
        }

        if(key3 != key3_flag)
        {
                key3_flag = key3;
                KeyProc(3);
        }

        if(key4 != key4_flag)
        {
                key4_flag = key4;
                KeyProc(4);
        }
}


//按键处理程序, 根据自己的需求补充完整即可
//=========================================
void KeyProc(char keyReturnVal)
{
        switch(keyReturnVal)
        {
                case 1: ... break;
                case 2: ... break;
                ...
                default: break;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
46条回答
jlhgold
1楼-- · 2020-01-19 16:31
 精彩回答 2  元偷偷看……
abc0010
2楼-- · 2020-01-19 20:22
我对这两条语句的感到震惊的理由是:
① 因为我最开始想到上下边沿中断法(上下边沿中断,宝贵的资源啊)
② 我后来想到作扫描端口的时候,也用到了类似的方法(仅仅是类似),但是写法很复杂,没有别人写的清晰
③ 这两条语句放在主函数的任意地方都可以运行
④ 可以用于程序诊断,因为如果一条语句在20ms内不被执行过,那程序一定是有问题或者卡卡的
abc0010
3楼-- · 2020-01-19 22:53
wye11083 发表于 2014-1-9 18:03
关键问题在于,我在想,如果我连续摸这个按钮,按代码,就只会执行一次了。所以我果断不会使用这段代码。 ...

应该不会的,那个芯片我们用过,一直按着是不会反转的。除非按键的速度越过100Hz的时候才有可能有这样的问题
hujyy
4楼-- · 2020-01-20 02:20
把按键功能再拓展下,感觉还好
wye11083
5楼-- · 2020-01-20 07:44
abc0010 发表于 2014-1-9 18:18
应该不会的,那个芯片我们用过,一直按着是不会反转的。除非按键的速度越过100Hz的时候才有可能有这样的 ...

我的意思是我需要触摸多次啊,但我看你代码再摸第二次时就进不去了。
abc0010
6楼-- · 2020-01-20 11:02
 精彩回答 2  元偷偷看……

一周热门 更多>