0%

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

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

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

程序

#include<reg51.h>
sbit K1=P1^4;
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;
sbit K5=P3^5;
void Delay10ms() //声明及定义软件延时函数,延时长10ms
{
unsigned char i, j;

i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
void main()
{
while(1)
{
if(K1==0)
{
Delay10ms(); //软件消抖,下同
if(K1==0)
{
P2=0xf7; //把二进制数11110111赋给控制LED亮灭的特殊寄存器P2
}
}
if(K2==0)
{
Delay10ms();
if(K2==0)
{
P2=0xef; //把二进制数11101111赋给控制LED亮灭的特殊寄存器P2
}
}
if(K3==0)
{
Delay10ms();
if(K3==0)
{
P2=0xdf; //把二进制数11011111赋给控制LED亮灭的特殊寄存器P2
}
}
if(K4==0)
{
Delay10ms();
if(K4==0)
{
P2=0xbf; //把二进制数10111111赋给控制LED亮灭的特殊寄存器P2
}
}
if(K5==0)
{
Delay10ms();
if(K5==0)
{
P2=0x7f; //把二进制数1111111赋给控制LED亮灭的特殊寄存器P2
}
}
}
}

运行结果

按下独立按键K1,只有LEDD4亮;

按下独立按键K2,只有LEDD5亮;

按下独立按键K3,只有LEDD6亮;

按下独立按键K4,只有LEDD7亮;

按下独立按键K5,只有LEDD8亮。

说明

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