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所认为的高电平,这段时间长短即是判断电容大小的依据,既然知道了时间长短,也就知道了按键是否按下。 不过看起来一直在闪啊,能不能当按键用的 回复【1楼】lindabell 欧海
-----------------------------------------------------------------------
有效才闪的,呵呵,不闪就坏了 牛人啊。 只有 不敢想的。 没有不敢做的 mark 我还以为是电容触摸屏呢 论价格比不上stm8,论性能跟stm8没法比。
从去年年底宏晶就开始供货不行,直至现在还没法恢复,看来也差不多了。 mark 回复【6楼】2233223 雪之爱
-----------------------------------------------------------------------
stm8的价格确实很低,我的这块小板里边用了stm8s103f2p6 1.8元/pcs 4k flash 1k ram mark 额,我还以为是电容屏呢 好贴留名!这就去试试 mark 没看明白 mark
有空试试 回复【13楼】lwg998
-----------------------------------------------------------------------
就是一个电容触摸的按键,avr的snail touch也有这样的功能,一些高档显示器的按键也有电容触摸功能的,出元件寿命外没有磨损寿命问题 有空试试 STM8好用么? 这个挺好玩的啊,我还以为是屏呢 回复【17楼】hfut0801
-----------------------------------------------------------------------
除了寄存器有点小恶心外,价格还是非常合适的,stm8s103f3 8K 1K ram 也就2元,淘宝上有卖的 回头也试试 mark== 整理了程序,添加注释,更容易懂
/***********************************************************************************************
* 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++;
}
} 我有一个51的开发板彩色显示屏,但上面没有匹配的端口,需要自己连接和定义 楼主很强啊 回复【6楼】2233223 雪之爱
论价格比不上stm8,论性能跟stm8没法比。
从去年年底宏晶就开始供货不行,直至现在还没法恢复,看来也差不多了。
-----------------------------------------------------------------------
但是如果一个单片机像AVR那样容易悲剧,还不如51呢,起码很多种 mark 什么叫“但是如果一个单片机像AVR那样容易悲剧,还不如51呢,起码很多种 ”,才想学习avr怎么avr就不行了呢。 我记得我回复过这个帖子啊,难道就是消失的23楼? 很强 顶关注22楼 回复【5楼】my love
我还以为是电容触摸屏呢
-----------------------------------------------------------------------
我也以为是…… 为何没有23楼?
回复【25楼】gongnn 魔法师
-----------------------------------------------------------------------
市场决定一切,51用好了还是杠杠猛的,不担心哪天没货了 为何没有23楼? 有新意哦 -函数功能:主函数
-入口参数:无
-出口参数:无
---------------------------------------------------------------------------------------*/
void main(void)
{
while(1)
{
if(Cool_Touch()==1)
P2++;
}
}
P2++是什么呀? 回复【35楼】mdj-fish
-----------------------------------------------------------------------
P2++就是P2口自加,效果和P2=i++;一样,51单片机的 和P2口也没有关系呀? 回复【37楼】mdj-fish
-----------------------------------------------------------------------
我错了,顶楼的视频其实是P1=~P1的,后来整理的程序没上视频 哈哈哈!
抓紧完善一下!。。。
挺好! if(TL0>16||TL0<13) //检查定时器计数时间,是否引脚电平上升时间发生变化,也相当于引脚所处分布电容发生变化
==================
这个挺精彩!一定费好长时间吧? 回复【40楼】mdj-fish
-----------------------------------------------------------------------
真正电平上升时间只有几十us,很容易检测出来的,整体函数运行时间也很短,完全可以当作一个普通按键检测函数来对待 mark 送楼主一杯咖啡... 触摸按键控制TFT刷图片
工程:点击此处下载 ourdev_661019EGY5T4.rar(文件大小:153K) (原文件名:33.(综合)触摸按键控制TFT.rar)
视频:http://v.youku.com/v_show/id_XMjg4MzQ4MzQ4.html 触摸按键如果不是手,是水滴,是一些小虫子,会被误发吗? 请问下按键是不是在有机玻璃的后面,手是电容的另一个极,能否起效呢? 为什么手放在上面,灯光会出现闪耀呢?不稳定? cool if(TL0>16||TL0<13)
--------------------------------------
奇怪,怎么还有TL0<13。电容触摸,不都是触摸时 充电时间变长吗 再来标记一次, 明天上班悄悄验证一下. 却发现身边没有1M的电阻..../emotion/em044.gif 不错不错,关注~ 回复【48楼】zddxmu
-----------------------------------------------------------------------
本该没有这句的,但此处不是这么简单考虑,因为在人体触摸按键同时,人体相当于电容一个极,当这个极足够大的时候,会从空中感应电磁波,比如50Hz,用手碰功放机或者低音炮的输入,会听到杂音,就是这个道理.
所以正常情况是变大,时间变长,我在串口输出TL0的值统计的时候发现也有不少变小的情形,这就是人体干扰了.
我在视频里演示有用螺丝刀碰Cool Touch区域的动作,并未误触发,说明变小情形前提是这个"导体"足够大才行.如果把这句去掉,没准抗干扰性更好.
我用手机在单片机Cool Touch处拨号打电话,不会出现误触发,效果很不错 mark mark mark 回复【25楼】gongnn 魔法师
回复【6楼】2233223 雪之爱
但是如果一个单片机像avr那样容易悲剧,还不如51呢,起码很多种
-----------------------------------------------------------------------
是的。
独门暗器就怕断货,呵呵。支持51,(不一定是stc)。。。 我以为真是电容触摸罗,其实这只能叫感应触摸,真如楼主说的,要感应了周围电场才起作用,而周围电场最强的只怕还是交流电,真的电容触摸不是这样的。也就是说,在空旷地(周边无交流电场)的条件下也起作用的才叫电容触摸。 学习 回复【45楼】28571840 老实人
-----------------------------------------------------------------------
像水滴、一些小虫子之类,不会被误发,
加隔层的话不能太厚(用STC实验 1平方cm的金属片 1mm隔层就没作用了,隔层可以帖透明胶布、电线绝缘胶布之类) 请讲解一下触摸的原理? 牛人啊。 只有 不敢想的。 没有不敢做的 我还以为是屏呢 同楼上! 回复【57楼】BDXing6
-----------------------------------------------------------------------
这个检测的不是交流电变化,而是分布电容的变化
如果按您所说,用AD采集貌似都可以??那就改名“干扰感应”了
我做的在空旷地和用电池、usb都测试过,一样灵敏 和杜洋的触摸按键应该是一样的吧? 回复【65楼】xuyapple
-----------------------------------------------------------------------
杜洋是谁? mark 一般不建议这样用不稳定的 受外界干扰 严重 我们都是做产品用的专业处理芯片那样很稳定的 没什么 其他问题的啊 楼主真是牛人a
很厉害。强人啊!
STM8现在应用也应该越来越广了吧。 {:lol:}不错 很谢谢楼主 ;楼主高手啊,怎么测电容呢 高手如云。 电路和程序都挺简单的。。佩服 可以试试! 我用STC15F104W修改 了程序,可是按键不行啊! hengtaimcu2 发表于 2012-7-12 09:34
一般不建议这样用不稳定的 受外界干扰 严重 我们都是做产品用的专业处理芯片那样很稳定的 没什么 其 ...
楼主真是牛人a
页:
[1]