0%

51单片机程序(独立按键)

简单记录一下(#/。\#)。

单片机: STC89C52
开发板: HC6800-MS

程序

#include<reg51.h>

sbit K5=P3^5;
sbit D8=P2^7;

void Delay10ms() //延时10ms
{
unsigned char i,j;
i=20;
j=113;
do
{
while(--j);
}
while(--i);
}

void main()
{
int Key=0; //定义一个标志位,变量Key的值置0,表示按键处于松开状态
while(1)
{
if(K5==0&&Key==0) //判断按键是否被按下
{
Delay10ms(); //延时消抖
Key=1; //把标志位置1,防止程序循环执行
if(K5==0) //再次判断按键状态,排除干扰
{
D8=~D8;
}
}
else if(K5==1)
{
Key=0; //当按键没有被按下时,重置标志位
}
}
}

运行结果

按下独立按键K5,LEDD8亮;再次按下K5D8灭。

说明

开发板上的按键由于机械触点的弹性作用,当按下按键时机械触点并不会立刻稳定闭合,松开按键时机械触点也不会立刻稳定断开,因此在按下或松开按键的瞬间(在大约10ms内)电位会有一定的波动(或者叫做抖动);软件消抖就是当检测到按键状态发生变化后,先延时大约10ms待电位稳定后,再进行一次检测,如果仍然保持闭合状态的电位,则确认为按键真正被按下。