搜索
bottom↓
回复: 46

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

  [复制链接]

出0入0汤圆

发表于 2014-1-9 16:12:16 | 显示全部楼层 |阅读模式
本帖最后由 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

有资料:


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;
        }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-1-9 16:18:17 | 显示全部楼层
触摸IC是用的什么型号?

出0入0汤圆

 楼主| 发表于 2014-1-9 16:21:19 | 显示全部楼层
wxaj2013, 是一个开关型触摸IC,当时的项目是86盒开关,也想着怎样做键盘,别人送的资料却没去看。。。

出0入0汤圆

发表于 2014-1-9 16:26:33 | 显示全部楼层
如果不用触摸IC,2条语句实现电容触摸,那就是神了。用触摸IC就算不上什么极限了。

出0入0汤圆

发表于 2014-1-9 16:39:11 | 显示全部楼层
菜鸟,路过感觉很牛

出0入0汤圆

发表于 2014-1-9 17:38:03 | 显示全部楼层
我想可能是消抖动已经被触摸芯片处理了吧

出0入442汤圆

发表于 2014-1-9 18:03:36 | 显示全部楼层
guer 发表于 2014-1-9 16:26
如果不用触摸IC,2条语句实现电容触摸,那就是神了。用触摸IC就算不上什么极限了。 ...

关键问题在于,我在想,如果我连续摸这个按钮,按代码,就只会执行一次了。所以我果断不会使用这段代码。

出0入0汤圆

发表于 2014-1-9 18:13:12 | 显示全部楼层
还以为是io呢,原来是有ic的!so easy!

出0入0汤圆

 楼主| 发表于 2014-1-9 18:14:15 | 显示全部楼层
我对这两条语句的感到震惊的理由是:
① 因为我最开始想到上下边沿中断法(上下边沿中断,宝贵的资源啊)
② 我后来想到作扫描端口的时候,也用到了类似的方法(仅仅是类似),但是写法很复杂,没有别人写的清晰
③ 这两条语句放在主函数的任意地方都可以运行
④ 可以用于程序诊断,因为如果一条语句在20ms内不被执行过,那程序一定是有问题或者卡卡的

出0入0汤圆

 楼主| 发表于 2014-1-9 18:18:20 | 显示全部楼层
wye11083 发表于 2014-1-9 18:03
关键问题在于,我在想,如果我连续摸这个按钮,按代码,就只会执行一次了。所以我果断不会使用这段代码。 ...

应该不会的,那个芯片我们用过,一直按着是不会反转的。除非按键的速度越过100Hz的时候才有可能有这样的问题

出0入0汤圆

发表于 2014-1-9 18:34:24 | 显示全部楼层
把按键功能再拓展下,感觉还好

出0入442汤圆

发表于 2014-1-9 19:51:17 | 显示全部楼层
abc0010 发表于 2014-1-9 18:18
应该不会的,那个芯片我们用过,一直按着是不会反转的。除非按键的速度越过100Hz的时候才有可能有这样的 ...

我的意思是我需要触摸多次啊,但我看你代码再摸第二次时就进不去了。

出0入0汤圆

 楼主| 发表于 2014-1-9 20:55:49 | 显示全部楼层
wye11083 发表于 2014-1-9 19:51
我的意思是我需要触摸多次啊,但我看你代码再摸第二次时就进不去了。

嗯,是视频发布者的疏忽,应该配音的。 是这样的,那个键盘是按一下相应的端口就反转一下,所以驱动程序才这么写的。这两行程序就相当于双边沿触发,这也是我喜欢这两行程序的原因。我是少见多怪,让大家见笑了

出0入0汤圆

 楼主| 发表于 2014-1-9 20:57:04 | 显示全部楼层
就相当于开关,按一下输出高电平,再按一下就输出低电平

出0入4汤圆

发表于 2014-1-9 21:10:24 | 显示全部楼层
guer 发表于 2014-1-9 16:26
如果不用触摸IC,2条语句实现电容触摸,那就是神了。用触摸IC就算不上什么极限了。 ...

不能同意更多

出0入0汤圆

 楼主| 发表于 2014-1-9 21:13:28 | 显示全部楼层

这是原作者的文档:

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

从本框架上可以看出,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;
        }
}

出0入0汤圆

发表于 2014-1-9 21:13:37 | 显示全部楼层
還沒有玩過觸摸屏,以後一定要試一試!

出0入8汤圆

发表于 2014-1-9 21:16:30 | 显示全部楼层
IC都给你做好了工作了,当然用的程序少了
LZ标题党

出0入0汤圆

发表于 2014-1-9 22:37:47 | 显示全部楼层
搞个定时炸弹,还用触摸按钮,不怕炸死自己呢。

出0入0汤圆

 楼主| 发表于 2014-1-10 08:46:11 | 显示全部楼层
lindabell 发表于 2014-1-9 21:16
IC都给你做好了工作了,当然用的程序少了
LZ标题党

不是这样的,事实上我们见到的很多键盘不论是PS2接口的,或者USB接口的,或者1进1出的点动键盘,触摸的也好不触摸的也罢,都很少用这样的写法。哪个不是长篇大论的驱动?也许我们看到别人这样写时,第一反应是这是假的,第二反应是这个我之前也这样用过,没什么大不了的。。。。。我的本意是:我看到自以为惊奇的代码然后拿出来和大家分享,代码不是我写的,我承认自己菜,自己孤陋寡闻,但是我觉得这样的写法和处理方法很棒!!!

出0入0汤圆

发表于 2014-1-10 08:59:27 | 显示全部楼层
abc0010 发表于 2014-1-10 08:46
不是这样的,事实上我们见到的很多键盘不论是PS2接口的,或者USB接口的,或者1进1出的点动键盘,触摸的也 ...

楼主,能否把你用的那个触摸芯片的手册传上来啊,还有这个芯片什么价格,灵敏度怎么样?

出0入0汤圆

发表于 2014-1-10 09:25:44 | 显示全部楼层
云里雾里key1哪来的也不说

出0入0汤圆

 楼主| 发表于 2014-1-10 09:32:35 | 显示全部楼层
xyz2008 发表于 2014-1-10 08:59
楼主,能否把你用的那个触摸芯片的手册传上来啊,还有这个芯片什么价格,灵敏度怎么样? ...

这个资料是之前拿到的,现在应该更新了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-1-10 10:36:47 | 显示全部楼层
abc0010 发表于 2014-1-10 09:32
这个资料是之前拿到的,现在应该更新了

有这个芯片供应商的电话吗,或者公司的名称

出0入0汤圆

发表于 2014-1-10 10:46:11 | 显示全部楼层
guer 发表于 2014-1-9 16:26
如果不用触摸IC,2条语句实现电容触摸,那就是神了。用触摸IC就算不上什么极限了。 ...

吓我一跳,我也以为不用触摸IC的。。。

出0入0汤圆

发表于 2014-1-10 10:50:35 | 显示全部楼层

出0入8汤圆

发表于 2014-1-10 11:05:13 | 显示全部楼层
我也以为不用触摸IC呢。

出0入0汤圆

 楼主| 发表于 2014-1-10 14:42:12 | 显示全部楼层
kebaojun305 发表于 2014-1-10 11:05
我也以为不用触摸IC呢。

这样子哦,我以为加了“驱动”两字就能消除误解的。。。难怪lindabell 兄说我标题党。。。,我还是觉得用芯片也不一定每个人都这样写的,至少在我们论坛上没见过按键驱动这样写过。。。。

出0入0汤圆

 楼主| 发表于 2014-1-10 14:43:55 | 显示全部楼层
xyz2008 发表于 2014-1-10 10:36
有这个芯片供应商的电话吗,或者公司的名称

我是到淘宝上搜wxaj2013找到,当时只有一家淘宝代理

出0入8汤圆

发表于 2014-1-10 14:49:08 | 显示全部楼层
俺们这边都是用合泰的MCU  来做触摸。

出0入0汤圆

 楼主| 发表于 2014-1-10 15:37:02 | 显示全部楼层
kebaojun305 发表于 2014-1-10 14:49
俺们这边都是用合泰的MCU  来做触摸。

直接用单片机做需要很多编程方面的细节,那是高手级别了。之前找方案的时候论坛上的朋友也帮忙推荐了不少,了解过。。。

出0入8汤圆

发表于 2014-1-10 17:38:52 | 显示全部楼层
本帖最后由 kebaojun305 于 2014-1-10 17:40 编辑
abc0010 发表于 2014-1-10 15:37
直接用单片机做需要很多编程方面的细节,那是高手级别了。之前找方案的时候论坛上的朋友也帮忙推荐了不少 ...


你错了 合泰有官方触摸库   直接调用就行,就和普通的按键一样用   库里已经做了 抗干扰,环境影响等

出0入0汤圆

发表于 2014-1-10 18:06:24 | 显示全部楼层
我错了,我以为没用专用IC的

出0入0汤圆

发表于 2014-1-10 22:09:16 | 显示全部楼层
用普通IO做出这种效果就好了

出0入0汤圆

发表于 2014-3-5 11:13:07 | 显示全部楼层
专用IC也不错,

出0入0汤圆

发表于 2014-3-5 11:19:29 | 显示全部楼层
我是来看两条语句 的

出0入0汤圆

发表于 2014-3-17 16:33:26 | 显示全部楼层
这算啥……我老板才是最牛的,他只需一句话,6个字就能实现一个产品的复杂功能……不信,你且听着……

他对我说:把这个搞一下

我加班几天,产品就出来了

出0入0汤圆

发表于 2014-11-2 04:39:45 | 显示全部楼层
本帖最后由 Earthman 于 2014-11-2 04:41 编辑

MARK,不知道比起stm8之类的软件方案有多少优势

出0入10汤圆

发表于 2014-11-2 08:44:31 来自手机 | 显示全部楼层
触摸没玩过,如果是按键的话,这个程序功能不是按下去和释放都会执行一遍功能么

出0入0汤圆

发表于 2014-11-3 08:46:01 | 显示全部楼层
学习,谢谢分享

出0入0汤圆

发表于 2014-11-4 22:31:12 来自手机 | 显示全部楼层
学习了,mark

出0入0汤圆

发表于 2014-11-5 11:48:56 | 显示全部楼层
牛啊,mark好好学习下!

出0入0汤圆

发表于 2014-11-5 11:53:41 | 显示全部楼层
触摸IC完成了所有的工作,2条语句只是调用。

出0入0汤圆

发表于 2014-11-5 12:08:08 | 显示全部楼层
我以为不用触摸ic弄出来的,那就牛逼了

出0入0汤圆

发表于 2016-1-20 17:44:36 | 显示全部楼层
单看标题真是吓死人

内容一看,跟没看是一样的

外部触摸IC,自带去抖,按一次反转一次-----------------当然你的程序能用了

对于其它场合,啥都用不上

出0入0汤圆

发表于 2016-1-20 23:30:28 | 显示全部楼层
很实用的列子、、、谢谢

出0入0汤圆

发表于 2016-1-21 01:08:48 | 显示全部楼层
arduino里就是这种框架

setup()
{}

loop()
{}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 09:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表