标题:
单片机按键受干扰问题,如何消除
[打印本页]
作者:
李冬
时间:
2022-9-2 12:00
标题:
单片机按键受干扰问题,如何消除
开关管在工作的时候,测按键上的波形有干扰, 使单片机误认为按键按下。如何消除干扰
636531524234531250.jpg
(18.34 KB, 下载次数: 93)
下载附件
2022-9-2 12:00 上传
作者:
xxxevery
时间:
2022-9-2 14:05
才玩单片机吧,单片机的按键输入都需要采用硬件消抖或软件消抖处理,一般用软件消抖居多,方法也比较多具体自己百度一下吧
作者:
szb314
时间:
2022-9-2 15:58
加一个10k上拉电阻,另外程序里可以处理干扰信号
作者:
帅包
时间:
2022-9-2 16:13
单片机按键口上的限流电阻、上拉电阻、滤波电容呢?一个都没有,这个按键的的走线相当于一个天线在那边被拉低太正常了,如果有其他原因导致无法防止这些元件,也可以用软件滤波啊,就是窄脉冲不认,宽脉冲才认
作者:
coody_sz
时间:
2022-9-2 16:23
如果是有规律的干扰,则多次读键滤除,读键间隔尽量远离干扰的周期。或者,使用小电阻上拉,比如用1K电阻上拉。
找出干扰原因并排除干扰是治本的方法。能干扰到读按键的话,则别的信号会更容易收到干扰。
作者:
npn
时间:
2022-9-2 16:26
#include "STC15.h"
unsigned char key_ms = 0; //按键按住时间毫秒 最大255 按住+1,松开清0
sbit skey = P3^ 2; //按键,低电平按下 (未消抖)
bit key; //按键,低电平按下 (已消抖)
sbit led = P3^3; //LED,低电平点亮
void InitTimer0() {
TMOD = 0x01;
TH0 = 0x0FC;
TL0 = 0x18;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(){
InitTimer0();
while(1){
if(!key){
led = !led;
while(!key);
}
}
}
void Timer0Interrupt() interrupt 1 { //12Mhz@1ms 定时器中断
TH0 = 0xFC;
TL0 = 0x18;
if(skey){ //按键松开
key_ms = 0; //松开清0
} else { //按键按下
if(key_ms != 0xFF){ //没加满
key_ms++; //按住+1
}
}
key = !(key_ms >= 25); //25毫秒消抖,脉冲干扰需小于25毫秒
}
复制代码
作者:
yzwzfyz
时间:
2022-9-2 17:09
线上加阻容过滤一下。
作者:
一事无成
时间:
2022-9-2 18:13
软件消抖或硬件消抖,软件消抖延时再检测,硬件消抖加电容
作者:
XLinliY.Zhang
时间:
2022-9-2 18:14
1、经典104电容
2、判断按钮按下的时间是否达标
作者:
最后一个夏天1
时间:
2022-9-2 19:21
一般是检测到按键按下后给个延时在判断是否真的按下
作者:
starsphere
时间:
2022-9-2 23:27
延时到抖动结束后再检测是否按下,或者是用定时器定时检测按键状态
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1