搜索
bottom↓
回复: 77

51也玩电容触摸,哈哈

[复制链接]

出0入0汤圆

发表于 2011-7-16 04:45:11 | 显示全部楼层 |阅读模式
废话少说,先上效果视频
http://v.youku.com/v_show/id_XMjg1MjcyMDMy.html

http://v.youku.com/v_show/id_XMjg1MjgzMzY4.html

再来张效果pp


(原文件名:触摸.jpg)

单片机选用stc12c5A60s2,1T的就可以,下面是原理图


(原文件名:原理图.jpg)

点击此处下载 ourdev_658261IV6PGT.pdf(文件大小:565K) (原文件名:核心板原理图.pdf)
程序贴出来,顺便工程一并上传上来
#include <reg52.H>
/*
P0.0为触摸按键
*/
sfr P0M1 = 0x93; //  
sfr P0M0 = 0x94; //
sbit TOUCH=P0^0;
sbit LED=P3^3;
void delay(void)
{
volatile int i=3553;
while(i--);
}
void main(void)
{
        P0M1=0X01;        //配置P0为开漏输出
        P0M0=0X01;        //配置P0为开漏输出

   while(1)
   {
              TOUCH=0;
                 delay();
   TMOD=0X00;         
   TH0=0;
   TL0=0;
   TR0=1;
           TOUCH=1;
           while(!TOUCH);
           TR0=0;
           delay();
                if(TL0>16||TL0<13)
                P1=~P1;
   }
}

点击此处下载 ourdev_658262VN5K05.rar(文件大小:19K) (原文件名:cool toutch.rar)
原理和stm8-discovery小板一样,拉低P0.0口,由于存在分布电容,P0.0口靠1兆上拉电阻上拉到TTL所认为的高电平,这段时间长短即是判断电容大小的依据,既然知道了时间长短,也就知道了按键是否按下。

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入8汤圆

发表于 2011-7-16 07:23:39 | 显示全部楼层
不过看起来一直在闪啊,能不能当按键用的

出0入0汤圆

 楼主| 发表于 2011-7-16 07:24:24 | 显示全部楼层
回复【1楼】lindabell 欧海
-----------------------------------------------------------------------

有效才闪的,呵呵,不闪就坏了

出0入0汤圆

发表于 2011-7-16 08:23:04 | 显示全部楼层
牛人啊。 只有 不敢想的。 没有不敢做的

出0入0汤圆

发表于 2011-7-16 08:24:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-16 08:33:20 | 显示全部楼层
我还以为是电容触摸屏呢

出0入0汤圆

发表于 2011-7-16 08:38:47 | 显示全部楼层
论价格比不上stm8,论性能跟stm8没法比。
从去年年底宏晶就开始供货不行,直至现在还没法恢复,看来也差不多了。

出0入0汤圆

发表于 2011-7-16 09:01:24 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-7-16 09:01:36 | 显示全部楼层
回复【6楼】2233223 雪之爱
-----------------------------------------------------------------------

stm8的价格确实很低,我的这块小板里边用了stm8s103f2p6 1.8元/pcs   4k flash 1k ram

出0入0汤圆

发表于 2011-7-16 09:32:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-16 09:40:47 | 显示全部楼层
额,我还以为是电容屏呢

出200入2554汤圆

发表于 2011-7-16 09:46:02 | 显示全部楼层
好贴留名!这就去试试

出0入0汤圆

发表于 2011-7-16 09:50:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-16 10:23:43 | 显示全部楼层
没看明白

出0入0汤圆

发表于 2011-7-16 10:47:25 | 显示全部楼层
mark
有空试试

出0入0汤圆

 楼主| 发表于 2011-7-16 11:12:03 | 显示全部楼层
回复【13楼】lwg998
-----------------------------------------------------------------------

就是一个电容触摸的按键,avr的snail touch也有这样的功能,一些高档显示器的按键也有电容触摸功能的,出元件寿命外没有磨损寿命问题

出0入0汤圆

发表于 2011-7-16 23:50:27 | 显示全部楼层
有空试试

出0入0汤圆

发表于 2011-7-18 09:42:33 | 显示全部楼层
STM8好用么?

出0入0汤圆

发表于 2011-7-18 11:12:58 | 显示全部楼层
这个挺好玩的啊,我还以为是屏呢

出0入0汤圆

 楼主| 发表于 2011-7-18 12:40:29 | 显示全部楼层
回复【17楼】hfut0801
-----------------------------------------------------------------------

除了寄存器有点小恶心外,价格还是非常合适的,stm8s103f3   8K 1K ram    也就2元,淘宝上有卖的

出0入0汤圆

发表于 2011-7-18 12:47:52 | 显示全部楼层
回头也试试

出0入0汤圆

发表于 2011-7-18 12:50:04 | 显示全部楼层
mark==

出0入0汤圆

 楼主| 发表于 2011-7-23 09:32:18 | 显示全部楼层
整理了程序,添加注释,更容易懂
/***********************************************************************************************
*                                            Cool51
*                                         Cool51开发板例程
*
*  文件名称:main.c
*  摘    要:触摸按键实验,实验前请将Cool51核心板的"P0.0EN"处短路帽去掉,Cool51核心板左上角既是
*            电容触摸,实验需使用STC12C5A60S2单片机
*  作    者:苑臣芒
*
*  当前版本:1.1
*  完成日期:2011/07/023
*  版权所有:Rays_ele - Copyright (C) 2011
*
*************************************************************************************************/

/********引用的头文件*******/
#include<reg52.h> //开发51单片机必须包含的头文件,该文件定义了89c52单片机内部寄存器的地址

/***********宏定义**********/
#define uchar unsigned char
#define uint  unsigned int

/********硬件接口定义*******/
sbit TOUCH=P0^0;  //P0.0为触摸按键
sbit LED=P3^3;

/******特殊寄存器声明*******/
sfr P0M1 = 0x93;    //  
sfr P0M0 = 0x94;    // 两个寄存器控制P0口开漏状态,详见STC12C5A60S2手册

/*--------------------------------------------------------------------------------------
-函数名称:void Delay_ms(uint ms)
----------------------------------------------------------------------------------------
-函数功能:当晶振是11.0592Mhz时,函数延时大约是ms为单位的
-入口参数:uint ms 延时长度,比如需要延时100ms,则ms=100
-出口参数:无
---------------------------------------------------------------------------------------*/
void Delay_ms(uint ms)
{
   uchar t;
   while(ms--)
   {
   t=120;
   while(t--);
   }
}

/*--------------------------------------------------------------------------------------
-函数名称:bit Cool_Touch(void)
----------------------------------------------------------------------------------------
-函数功能:触摸按键,P0.0口,stc12c5A60S2,晶振是11.0592Mhz-12兆,使用定时器0资源
-入口参数:无
-出口参数:按键按下返回1,无按键返回0,此函数不阻塞
---------------------------------------------------------------------------------------*/
bit Cool_Touch(void)
{
uchar i=1;
        P0M1=0X01;        //配置P0为开漏输出
        P0M0=0X01;        //配置P0为开漏输出
    TOUCH=0;         //拉低TOUCH口
    Delay_ms(50);//延时一定时间,等待其一定为低
    TMOD = 0x02;//初始化定时器0为8位定时器,开始计数         
    TH0=0;                //初始化TH0为0
    TL0=0;                //初始化TH0为0
    TR0=1;                //启动定时器
        TOUCH=1;        //释放TOUCH口,此时TOUCH会慢慢升高电平
        while((!TOUCH)&&i++);//等待电平升高到单片机所认为的高电平,i控制溢出
        TR0=0;                //停止计数器
        if(TL0>16||TL0<13) //检查定时器计数时间,是否引脚电平上升时间发生变化,也相当于引脚所处分布电容发生变化
                return 1;
        else
                return 0;
}

/*--------------------------------------------------------------------------------------
-函数名称:void main(void)
----------------------------------------------------------------------------------------
-函数功能:主函数
-入口参数:无
-出口参数:无
---------------------------------------------------------------------------------------*/
void main(void)
{
   while(1)
   {
           if(Cool_Touch()==1)   
        P2++;
   }
}

出0入0汤圆

发表于 2011-7-23 10:25:41 | 显示全部楼层
我有一个51的开发板彩色显示屏,但上面没有匹配的端口,需要自己连接和定义

出0入0汤圆

发表于 2011-7-23 10:35:31 | 显示全部楼层
楼主很强啊

出0入0汤圆

发表于 2011-7-23 11:11:28 | 显示全部楼层
回复【6楼】2233223 雪之爱
论价格比不上stm8,论性能跟stm8没法比。
从去年年底宏晶就开始供货不行,直至现在还没法恢复,看来也差不多了。
-----------------------------------------------------------------------

但是如果一个单片机像AVR那样容易悲剧,还不如51呢,起码很多种

出0入0汤圆

发表于 2011-7-23 11:41:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-23 11:58:32 | 显示全部楼层
什么叫“但是如果一个单片机像AVR那样容易悲剧,还不如51呢,起码很多种 ”,才想学习avr怎么avr就不行了呢。

出0入0汤圆

发表于 2011-7-23 12:40:57 | 显示全部楼层
我记得我回复过这个帖子啊,难道就是消失的23楼?

出0入0汤圆

发表于 2011-7-23 13:02:11 | 显示全部楼层
很强

出0入0汤圆

发表于 2011-7-23 13:53:37 | 显示全部楼层
顶  关注22楼

出0入0汤圆

发表于 2011-7-23 14:14:40 | 显示全部楼层
回复【5楼】my love  
我还以为是电容触摸屏呢
-----------------------------------------------------------------------

我也以为是……

出0入0汤圆

 楼主| 发表于 2011-7-23 20:58:23 | 显示全部楼层
为何没有23楼?



回复【25楼】gongnn 魔法师
-----------------------------------------------------------------------

市场决定一切,51用好了还是杠杠猛的,不担心哪天没货了

出0入0汤圆

发表于 2011-7-24 01:53:07 | 显示全部楼层
为何没有23楼?

出0入0汤圆

发表于 2011-7-24 09:12:10 | 显示全部楼层
有新意哦

出0入0汤圆

发表于 2011-7-24 15:12:56 | 显示全部楼层
-函数功能:主函数
-入口参数:无
-出口参数:无
---------------------------------------------------------------------------------------*/
void main(void)
{
   while(1)
   {
    if(Cool_Touch()==1)   
P2++;
   }
}

P2++是什么呀?

出0入0汤圆

 楼主| 发表于 2011-7-24 15:49:02 | 显示全部楼层
回复【35楼】mdj-fish
-----------------------------------------------------------------------

P2++就是P2口自加,效果和P2=i++;一样,51单片机的

出0入0汤圆

发表于 2011-7-24 16:02:14 | 显示全部楼层
和P2口也没有关系呀?

出0入0汤圆

 楼主| 发表于 2011-7-24 16:33:22 | 显示全部楼层
回复【37楼】mdj-fish
-----------------------------------------------------------------------

我错了,顶楼的视频其实是P1=~P1的,后来整理的程序没上视频

出0入0汤圆

发表于 2011-7-24 16:35:53 | 显示全部楼层
哈哈哈!
抓紧完善一下!。。。
挺好!

出0入0汤圆

发表于 2011-7-24 16:48:37 | 显示全部楼层
if(TL0>16||TL0<13) //检查定时器计数时间,是否引脚电平上升时间发生变化,也相当于引脚所处分布电容发生变化
==================
这个挺精彩!  一定费好长时间吧?

出0入0汤圆

 楼主| 发表于 2011-7-24 20:27:29 | 显示全部楼层
回复【40楼】mdj-fish
-----------------------------------------------------------------------

真正电平上升时间只有几十us,很容易检测出来的,整体函数运行时间也很短,完全可以当作一个普通按键检测函数来对待

出0入0汤圆

发表于 2011-7-25 11:03:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-25 14:25:16 | 显示全部楼层
送楼主一杯咖啡...

出0入0汤圆

 楼主| 发表于 2011-7-25 19:54:59 | 显示全部楼层
触摸按键控制TFT刷图片
工程:点击此处下载 ourdev_661019EGY5T4.rar(文件大小:153K) (原文件名:33.(综合)触摸按键控制TFT.rar)

视频:http://v.youku.com/v_show/id_XMjg4MzQ4MzQ4.html

出0入0汤圆

发表于 2011-7-26 10:49:22 | 显示全部楼层
触摸按键如果不是手,是水滴,是一些小虫子,会被误发吗?      请问下按键是不是在有机玻璃的后面,手是电容的另一个极,能否起效呢?

出0入0汤圆

发表于 2011-7-26 10:58:11 | 显示全部楼层
为什么手放在上面,灯光会出现闪耀呢?不稳定?

出0入0汤圆

发表于 2011-7-26 17:15:28 | 显示全部楼层
cool

出0入0汤圆

发表于 2011-7-26 17:20:33 | 显示全部楼层
if(TL0>16||TL0<13)

--------------------------------------

奇怪,怎么还有TL0<13。电容触摸,不都是触摸时 充电时间变长吗

出0入0汤圆

发表于 2011-7-26 17:29:02 | 显示全部楼层
再来标记一次, 明天上班悄悄验证一下.

出0入0汤圆

发表于 2011-7-27 08:02:46 | 显示全部楼层
却发现身边没有1M的电阻...

出0入0汤圆

发表于 2011-7-27 08:22:27 | 显示全部楼层
不错不错,关注~

出0入0汤圆

 楼主| 发表于 2011-7-27 08:51:36 | 显示全部楼层
回复【48楼】zddxmu
-----------------------------------------------------------------------

本该没有这句的,但此处不是这么简单考虑,因为在人体触摸按键同时,人体相当于电容一个极,当这个极足够大的时候,会从空中感应电磁波,比如50Hz,用手碰功放机或者低音炮的输入,会听到杂音,就是这个道理.
所以正常情况是变大,时间变长,我在串口输出TL0的值统计的时候发现也有不少变小的情形,这就是人体干扰了.
我在视频里演示有用螺丝刀碰Cool Touch区域的动作,并未误触发,说明变小情形前提是这个"导体"足够大才行.如果把这句去掉,没准抗干扰性更好.
我用手机在单片机Cool Touch处拨号打电话,不会出现误触发,效果很不错

出0入0汤圆

发表于 2012-2-26 02:37:10 | 显示全部楼层
mark

出0入85汤圆

发表于 2012-2-26 14:27:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-26 15:24:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-26 15:50:42 | 显示全部楼层
回复【25楼】gongnn 魔法师
回复【6楼】2233223 雪之爱
但是如果一个单片机像avr那样容易悲剧,还不如51呢,起码很多种
-----------------------------------------------------------------------

是的。

独门暗器就怕断货,呵呵。支持51,(不一定是stc)。。。

出0入0汤圆

发表于 2012-2-27 16:54:32 | 显示全部楼层
我以为真是电容触摸罗,其实这只能叫感应触摸,真如楼主说的,要感应了周围电场才起作用,而周围电场最强的只怕还是交流电,真的电容触摸不是这样的。也就是说,在空旷地(周边无交流电场)的条件下也起作用的才叫电容触摸。

出0入0汤圆

发表于 2012-2-27 18:22:01 | 显示全部楼层
学习

出0入0汤圆

发表于 2012-2-27 20:30:31 | 显示全部楼层
回复【45楼】28571840 老实人
-----------------------------------------------------------------------

像水滴、一些小虫子之类,不会被误发,
加隔层的话不能太厚(用STC实验 1平方cm的金属片 1mm隔层就没作用了,隔层可以帖透明胶布、电线绝缘胶布之类)

出0入0汤圆

发表于 2012-2-28 21:50:30 | 显示全部楼层
请讲解一下触摸的原理?

出0入0汤圆

发表于 2012-2-29 10:35:05 | 显示全部楼层
牛人啊。 只有 不敢想的。 没有不敢做的

出0入0汤圆

发表于 2012-2-29 10:57:29 | 显示全部楼层
我还以为是屏呢

出0入0汤圆

发表于 2012-2-29 11:59:34 | 显示全部楼层
同楼上!

出0入0汤圆

 楼主| 发表于 2012-3-1 08:46:47 | 显示全部楼层
回复【57楼】BDXing6
-----------------------------------------------------------------------

这个检测的不是交流电变化,而是分布电容的变化
如果按您所说,用AD采集貌似都可以??那就改名“干扰感应”了
我做的在空旷地和用电池、usb都测试过,一样灵敏

出90入0汤圆

发表于 2012-3-1 15:19:23 | 显示全部楼层
和杜洋的触摸按键应该是一样的吧?

出0入0汤圆

 楼主| 发表于 2012-3-2 16:33:52 | 显示全部楼层
回复【65楼】xuyapple
-----------------------------------------------------------------------

杜洋是谁?

出0入0汤圆

发表于 2012-3-2 19:08:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-7-12 09:34:08 | 显示全部楼层
一般不建议这样用  不稳定的 受外界干扰 严重 我们都是做产品  用的专业处理芯片  那样很稳定的 没什么 其他问题的啊

出0入0汤圆

发表于 2012-7-18 14:37:13 | 显示全部楼层
楼主真是牛人a

出0入0汤圆

发表于 2012-7-18 15:32:20 | 显示全部楼层
很厉害。强人啊!
STM8现在应用也应该越来越广了吧。

出0入0汤圆

发表于 2013-4-25 00:59:21 | 显示全部楼层
不错 很谢谢楼主

出0入0汤圆

发表于 2013-4-25 09:59:16 | 显示全部楼层
;楼主高手啊,怎么测电容呢

出0入0汤圆

发表于 2013-4-25 11:00:24 | 显示全部楼层
高手如云。

出0入0汤圆

发表于 2013-4-25 17:44:59 | 显示全部楼层
电路和程序都挺简单的。。佩服

出0入0汤圆

发表于 2013-4-26 00:43:51 来自手机 | 显示全部楼层
可以试试!

出0入0汤圆

发表于 2014-9-5 15:32:22 | 显示全部楼层
我用STC15F104W修改 了程序,可是按键不行啊!

出0入0汤圆

发表于 2014-9-6 01:54:45 | 显示全部楼层
hengtaimcu2 发表于 2012-7-12 09:34
一般不建议这样用  不稳定的 受外界干扰 严重 我们都是做产品  用的专业处理芯片  那样很稳定的 没什么 其 ...


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

本版积分规则

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

GMT+8, 2024-7-23 10:32

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

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