给你个参考 程序,你看看怎么样
#include <avr/ioh>
#include <util/delayh>
int main(void)
{
PORTB = 0X00; //输出低,LED全部熄灭
DDRB = 0Xff; //PB端口置为输出
PORTD = 0Xc0; //一定要使能上拉电阻,否则会有干扰
DDRD = 0X3F; //K3、K4按键(PD6、PD7)设置为输入端口
while(1)
{
if(!(PIND & (1 << PD6))) //判断按键是否按下
{
_delay_ms(20); //判断按键按下,延时一会再判断是否按下, 以消除干扰
if(!(PIND & (1 << PD6))) // 按键真正按下后,进行相应处理
{
//PORTB = 0X55; // 按键按下,灯亮
while(!(PIND & (1 << PD6)));//等待按键释放
PORTB = 0X55; // 把这句话从上面移到这里,按键释放后,灯才点亮
}
}
if(!(PIND & (1 << PD7))) //判断按键是否按下
{
_delay_ms(20); //判断按键按下,延时一会再判断是否按下, 以消除干扰
if(!(PIND & (1 << PD7))) // 按键真正按下后,进行相应处理
{
//PORTB = 0Xaa; //
while(!(PIND & (1 << PD7))); //
PORTB = 0Xaa; //
}
}
}
}
首先要知道什么是按键抖动,按键有很多种的,比如按一次高低电平变换一次或者按下去是一个电平放开是另一个电平,不管哪种情况,在电平从一个状态转换程另一个状态时,在很短的时间内并不是从0(1)直接变成1(0)这么简单,这中间会有抖动,就是在这两个状态中来回的转变的过程,这个时间普遍被认为是10ms(还是10us?),所以为了消除这个抖动才设计的按键消抖,更具不同的需要,时钟的精度,有很多种消抖的方法,主要的思想都是排除这短暂时间内电平变换的,如果时钟要求不高的话,可以在第一个电平抖动的时候触发一个计数器(计时10ms后),在判断电平状态,如果和之前的相同表示是抖动,电平不变,如果和之前的相反表示按键,这是一个很简单的方法
sbit button P1^0;
if(button == 0) //一旦检测到键值
{
Delay(); //延时20ms,有效滤除按键的抖动
if(button == 0) //再次确定键值是否有效
{
//Do somethinghere!
}
}
用if语句判断一下呗比如
{
if(按键1按下)
{
延时10毫秒;
if(按键1按下)
{
这里写你按键1按下要执行的程序
}
}
}
以上就是关于单片机中按键怎么消抖全部的内容,包括:单片机中按键怎么消抖、各位大神、谁能给解释下如何实现按键消抖(verilog语言实现),最好给发个按键控制数码管显示程序。、若51单片机的P1.0口接了一个独立按键,编写程序完成按键检测程序要求每按下一次P1.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)