栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单片机:独立按键---硬件介绍和软件编程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单片机:独立按键---硬件介绍和软件编程

按动按钮,1-2 3-4导通,

延时程序:5-10ms抖动需要延时消除抖动 (软件消抖)

RC电路充放电(硬件消抖)

#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit KEY1=P3^1;//定义特殊位置按键用sbit
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED1=P2^0;
#define KEY1_PRESS  1//只使用一个LED来判断按键K1即可,也可多加几个LED来显示
#define KEY2_PRESS  2
#define KEY3_PRESS  3
#define KEY4_PRESS  4
#define KEY_UNPRESS 0
void delay_time(u16 time_delay)
{
    while(time_delay--);
}

u8 key_scan(u8 mode)//检验按键是否按下的函数
    //mode来选择是否是连续按下还是单次按下
{
    static u8 key=1;//定义变量key通过0/1的值来判断高/低点平
    if(mode)key=1;//1是连续按下,0是单次按下
    if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
    {
        delay_time(1000);//消抖
        key=0;//1进入循环之后改为0跳出循环
        if(KEY1==0)
          return KEY1_PRESS;
        else if(KEY2==0)
          return KEY2_PRESS;
        else if(KEY3==0)
          return KEY3_PRESS;
        else if(KEY4==0)
          return KEY4_PRESS;
    }
    else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)
    {
        key=1;
    }
    return KEY_UNPRESS;
}
void main()
{
    u8 key=0;
    while(1)
    {
        key=key_scan(0);//0是单独按下,1是连续按下
        if(key==KEY1_PRESS)
            LED1=!LED1;//通过KEY1控制LED1
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/916874.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号