avr-arm 发表于 2011-7-16 04:45:11

51也玩电容触摸,哈哈

废话少说,先上效果视频
http://v.youku.com/v_show/id_XMjg1MjcyMDMy.html

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

再来张效果pp

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_658259LYIEXU.jpg
(原文件名:触摸.jpg)

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

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_658260RQPMKC.jpg
(原文件名:原理图.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所认为的高电平,这段时间长短即是判断电容大小的依据,既然知道了时间长短,也就知道了按键是否按下。

lindabell 发表于 2011-7-16 07:23:39

不过看起来一直在闪啊,能不能当按键用的

avr-arm 发表于 2011-7-16 07:24:24

回复【1楼】lindabell 欧海
-----------------------------------------------------------------------

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

milkyway0001 发表于 2011-7-16 08:23:04

牛人啊。 只有 不敢想的。 没有不敢做的

hubeilcsun3 发表于 2011-7-16 08:24:52

mark

my_love 发表于 2011-7-16 08:33:20

我还以为是电容触摸屏呢

2233223 发表于 2011-7-16 08:38:47

论价格比不上stm8,论性能跟stm8没法比。
从去年年底宏晶就开始供货不行,直至现在还没法恢复,看来也差不多了。

newhand1991 发表于 2011-7-16 09:01:24

mark

avr-arm 发表于 2011-7-16 09:01:36

回复【6楼】2233223 雪之爱
-----------------------------------------------------------------------

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

z421868436 发表于 2011-7-16 09:32:40

mark

chemical_life 发表于 2011-7-16 09:40:47

额,我还以为是电容屏呢

t3486784401 发表于 2011-7-16 09:46:02

好贴留名!这就去试试

lqdjdy 发表于 2011-7-16 09:50:00

mark

lwg998 发表于 2011-7-16 10:23:43

没看明白

hongyao 发表于 2011-7-16 10:47:25

mark
有空试试

avr-arm 发表于 2011-7-16 11:12:03

回复【13楼】lwg998
-----------------------------------------------------------------------

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

yanzaihong 发表于 2011-7-16 23:50:27

有空试试

hfut0801 发表于 2011-7-18 09:42:33

STM8好用么?

oxiaohaio 发表于 2011-7-18 11:12:58

这个挺好玩的啊,我还以为是屏呢

avr-arm 发表于 2011-7-18 12:40:29

回复【17楼】hfut0801
-----------------------------------------------------------------------

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

stely 发表于 2011-7-18 12:47:52

回头也试试

jyjmaster 发表于 2011-7-18 12:50:04

mark==

avr-arm 发表于 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 uintunsigned 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++;
   }
}

ICANDO 发表于 2011-7-23 10:25:41

我有一个51的开发板彩色显示屏,但上面没有匹配的端口,需要自己连接和定义

ScorpioTiger 发表于 2011-7-23 10:35:31

楼主很强啊

gongnn 发表于 2011-7-23 11:11:28

回复【6楼】2233223 雪之爱
论价格比不上stm8,论性能跟stm8没法比。
从去年年底宏晶就开始供货不行,直至现在还没法恢复,看来也差不多了。
-----------------------------------------------------------------------

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

hubeilcsun3 发表于 2011-7-23 11:41:45

mark

wolf2222222222 发表于 2011-7-23 11:58:32

什么叫“但是如果一个单片机像AVR那样容易悲剧,还不如51呢,起码很多种 ”,才想学习avr怎么avr就不行了呢。

xiaobendan 发表于 2011-7-23 12:40:57

我记得我回复过这个帖子啊,难道就是消失的23楼?

af00 发表于 2011-7-23 13:02:11

很强

jetimchen 发表于 2011-7-23 13:53:37

顶关注22楼

asunder_love 发表于 2011-7-23 14:14:40

回复【5楼】my love
我还以为是电容触摸屏呢
-----------------------------------------------------------------------

我也以为是……

avr-arm 发表于 2011-7-23 20:58:23

为何没有23楼?



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

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

mdj-fish 发表于 2011-7-24 01:53:07

为何没有23楼?

dianzizhong 发表于 2011-7-24 09:12:10

有新意哦

mdj-fish 发表于 2011-7-24 15:12:56

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

P2++是什么呀?

avr-arm 发表于 2011-7-24 15:49:02

回复【35楼】mdj-fish
-----------------------------------------------------------------------

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

mdj-fish 发表于 2011-7-24 16:02:14

和P2口也没有关系呀?

avr-arm 发表于 2011-7-24 16:33:22

回复【37楼】mdj-fish
-----------------------------------------------------------------------

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

mdj-fish 发表于 2011-7-24 16:35:53

哈哈哈!
抓紧完善一下!。。。
挺好!

mdj-fish 发表于 2011-7-24 16:48:37

if(TL0>16||TL0<13) //检查定时器计数时间,是否引脚电平上升时间发生变化,也相当于引脚所处分布电容发生变化
==================
这个挺精彩!一定费好长时间吧?

avr-arm 发表于 2011-7-24 20:27:29

回复【40楼】mdj-fish
-----------------------------------------------------------------------

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

ssmart 发表于 2011-7-25 11:03:40

mark

yanshengdian 发表于 2011-7-25 14:25:16

送楼主一杯咖啡...

avr-arm 发表于 2011-7-25 19:54:59

触摸按键控制TFT刷图片
工程:点击此处下载 ourdev_661019EGY5T4.rar(文件大小:153K) (原文件名:33.(综合)触摸按键控制TFT.rar)

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

28571840 发表于 2011-7-26 10:49:22

触摸按键如果不是手,是水滴,是一些小虫子,会被误发吗?      请问下按键是不是在有机玻璃的后面,手是电容的另一个极,能否起效呢?

28571840 发表于 2011-7-26 10:58:11

为什么手放在上面,灯光会出现闪耀呢?不稳定?

eryueniao 发表于 2011-7-26 17:15:28

cool

zddxmu 发表于 2011-7-26 17:20:33

if(TL0>16||TL0<13)

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

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

yanshengdian 发表于 2011-7-26 17:29:02

再来标记一次, 明天上班悄悄验证一下.

yanshengdian 发表于 2011-7-27 08:02:46

却发现身边没有1M的电阻..../emotion/em044.gif

miyuecao 发表于 2011-7-27 08:22:27

不错不错,关注~

avr-arm 发表于 2011-7-27 08:51:36

回复【48楼】zddxmu
-----------------------------------------------------------------------

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

master863 发表于 2012-2-26 02:37:10

mark

CK345 发表于 2012-2-26 14:27:40

mark

zzz1367 发表于 2012-2-26 15:24:25

mark

wkman 发表于 2012-2-26 15:50:42

回复【25楼】gongnn 魔法师
回复【6楼】2233223 雪之爱
但是如果一个单片机像avr那样容易悲剧,还不如51呢,起码很多种
-----------------------------------------------------------------------

是的。

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

BDXing6 发表于 2012-2-27 16:54:32

我以为真是电容触摸罗,其实这只能叫感应触摸,真如楼主说的,要感应了周围电场才起作用,而周围电场最强的只怕还是交流电,真的电容触摸不是这样的。也就是说,在空旷地(周边无交流电场)的条件下也起作用的才叫电容触摸。

hefq 发表于 2012-2-27 18:22:01

学习

BXAK 发表于 2012-2-27 20:30:31

回复【45楼】28571840 老实人
-----------------------------------------------------------------------

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

lxa0 发表于 2012-2-28 21:50:30

请讲解一下触摸的原理?

heero 发表于 2012-2-29 10:35:05

牛人啊。 只有 不敢想的。 没有不敢做的

xue_pic 发表于 2012-2-29 10:57:29

我还以为是屏呢

lang1437 发表于 2012-2-29 11:59:34

同楼上!

avr-arm 发表于 2012-3-1 08:46:47

回复【57楼】BDXing6
-----------------------------------------------------------------------

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

xuyapple 发表于 2012-3-1 15:19:23

和杜洋的触摸按键应该是一样的吧?

avr-arm 发表于 2012-3-2 16:33:52

回复【65楼】xuyapple
-----------------------------------------------------------------------

杜洋是谁?

duanpb 发表于 2012-3-2 19:08:11

mark

hengtaimcu2 发表于 2012-7-12 09:34:08

一般不建议这样用不稳定的 受外界干扰 严重 我们都是做产品用的专业处理芯片那样很稳定的 没什么 其他问题的啊

pengbo_88 发表于 2012-7-18 14:37:13

楼主真是牛人a

dengtianliang 发表于 2012-7-18 15:32:20

很厉害。强人啊!
STM8现在应用也应该越来越广了吧。

anta09 发表于 2013-4-25 00:59:21

{:lol:}不错 很谢谢楼主

磊磊映画 发表于 2013-4-25 09:59:16

;楼主高手啊,怎么测电容呢

求实者 发表于 2013-4-25 11:00:24

高手如云。

Lboyve 发表于 2013-4-25 17:44:59

电路和程序都挺简单的。。佩服

rsbook 发表于 2013-4-26 00:43:51

可以试试!

mjh630 发表于 2014-9-5 15:32:22

我用STC15F104W修改 了程序,可是按键不行啊!

damy2008 发表于 2014-9-6 01:54:45

hengtaimcu2 发表于 2012-7-12 09:34
一般不建议这样用不稳定的 受外界干扰 严重 我们都是做产品用的专业处理芯片那样很稳定的 没什么 其 ...


楼主真是牛人a
页: [1]
查看完整版本: 51也玩电容触摸,哈哈