废话少说,先上效果视频
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所认为的高电平,这段时间长短即是判断电容大小的依据,既然知道了时间长短,也就知道了按键是否按下。
-----------------------------------------------------------------------
除了寄存器有点小恶心外,价格还是非常合适的,stm8s103f3 8K 1K ram 也就2元,淘宝上有卖的
/***********************************************************************************************
* 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++;
}
}
一周热门 更多>