51单片机独立按键

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单片机专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值