1.原理:
1.按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。
2.由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时 也不会一下
子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。
3.为了确保 CPU 对按键的一次闭合仅作一次处理,必须进行消抖。
2.电路原理图:
3.程序说明:
本程序使用两个独立按键控制LED和蜂鸣器
第一次按下点亮/蜂鸣器发声,第二次按下灯熄灭/蜂鸣器停止
4.源程序:
#include <reg51.h>
#define K1_PRES 1
#define K2_PRES 2
sbit LED = P2 ^ 0;
sbit BEEP = P1 ^ 5;
sbit k1 = P3 ^ 0;
sbit k2 = P3 ^ 1;
/*延时函数*/
void delay(unsigned int i)
{
while(i--);
}
/*按键检测函数*/
int KEY_Scan(int mode)
{
static int key_up = 1; //按键按松开标志
if(mode)key_up = 1; //支持连按
if(key_up && (k1 == 0 || k2 == 0))
{
delay(10);//去抖动
key_up = 0;
if(k1 == 0)
{
return K1_PRES;
}
else if(k2 == 0)
{
return K2_PRES;
}
}
else if(k1 == 1 && k2 == 1)
{
key_up = 1;
}
return 0;// 无按键按下
}
/*主函数*/
void main()
{
int key;
while(1)
{
key = KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case K1_PRES: //控制蜂鸣器
while(1)
{
BEEP = ~BEEP;
delay(10);
if(KEY_Scan(0) == 1)
{
break;
}
}
break;
case K2_PRES: //控制LED1翻转
LED = !LED;
break;
}
}
else delay(10);
}
}
5.开发板运行结果:
51单片机独立按键演示视频
以上就是51单片机的独立按键实验了
想要了解更多的单片机实验,请查看我的51单片机专栏。