资讯详情

stc15f104实现触摸开关

想做一个小控制器,触摸打开,延迟关闭

用普通的触摸开关似乎很难看,而且开关也不方便 固定,把控制板放在外面总是很难吗?

想用触摸开关,网上搜索了很久没找到合适的,stc官方文档上有个电容感应开关

需要占用2个io,一个产生pwm一个用于信号ad判断还需要两个电阻,两个二极管和一个电容。

感觉有点复杂。我试了试,最后只用了一个io嘴,一个电阻和一个电容器

思路是这样的:

一个2M电阻接电源和IO口(我用了p3.3)

一个33p电容接IO口和地。

IO将一根线连接到金属片上触摸。

p3.放置0先放下电容器的电,然后放置高阻态,此时电源会通过电阻给电容器充电,

时间常数2M*33p约66μs,使用定时器统计io当嘴变成高电平时,

如果不需要计时器,担心中断会有误差。

此时可能需要平滑处理以避免干扰。

启动时无人触摸,此时记录充电时间作为基准。

如果有人触摸,则充电时间加长,所以定时检测下这个充电时间,

发现充电时间比基准充电时间长很多(我用了两倍的基准时间来比较),可以认为是有人触摸的。

已投入使用,目前可靠性和抗干扰能力都能满足要求。

void mw(){//主工作循环

unsigned int i; static unsigned int cdsj=0,bzz;///充电时间,标准值 static unsigned char csh=10.//初始化计数 T2H=T2L=0.//计数器2计数值初始化为0 P3M1 |=0x8;//p3.3置开漏状态 P3M0 |=0x8;// P3_3=0;//p3.3输出清0 delay(100); P3M1 |=0x8;//p3.3置高阻状态 P3M0 &=0xf7;// AUXR |= 0x10; /开始计数器2运行 P3_3=1;//p3.输出为1,输入状态 IE1=0;///清除外部中断1的状态 EX1=1.//打开外部中断1 while(EX1)//外部中断未完成循环等待 i=cdsj>>3; cdsj=cdsj-i T2L;//平滑处理 if(csh){ csh--; if(csh==0){///初始10次计数结束,以当前值为标准值 bzz=i i; }; return; }; if(i>bzz){ 满足此条件表明开关被触摸 }; }

标签: 电容触摸stc

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台