目录

一、独立按键的介绍

1.按键介绍

2.按键原理图

3.按键抖动

4.按键的消抖

二、独立按键控制LED指示灯亮灭

三、按键实验视频

总结


一、独立按键的介绍

1.按键介绍

轻触按键,相当于一种电子开关,按下使开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通断开。

2.按键原理图

K1、K2、K3、K4一公共端接GND,另一端分别接单片机I/O口的P3^0到P3^3,因为单片机4组I/O口P0—P3都是高电平有效,当按键按下时,将I/O口拉到低电平使按键有效。

3.按键抖动

对于机械开关,当机械触电断开闭合时,由于机械触电的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动,单片机会检测出来。

当没有按键按下时,电平为高电平,按下时,为0(由于机械触电,会弹逐渐稳定为0),机械开关抖动时间为5—10ms(不同开关时间不同),经过手松开的时间,若松开按键,经过5—10ms时间会逐渐回高电平。

4.按键的消抖

(1)硬件消抖

加一个电路,把电线通过电路,经过触发器之类的操作进行电路过滤。

(2)软件消抖

检测按键按下时,延时时间,再继续操作,松手也同样道理。

二、独立按键控制LED指示灯亮灭

当按下k1时,LED小灯D1亮起,松开按键时D1灭掉;

当按下k2时,   LED小灯全都亮起,再次按下时全都灭掉;

当按下k3时,LED小灯向右移位,按下k4时LED小灯向左移位;

有兴趣的小伙伴可以尝试一下将LED小灯亮灭做成二进制递增的形式。

代码示例:

/******************** ********************** 项目名称:独立按键控制LED灯开关*** 项目效果:当按下k1时,LED小灯D1亮起,松开按键时D1灭掉;当按下k2时,LED小灯全都亮起,再次按下时全都灭掉;当按下k3时,LED小灯向右移位,按下k4时LED小灯向左移位*** 连线方式:无*** 注意事项:无
********************* *******************/
#include "reg52.h"
#include "intrins.h"//用u8,u16代替方便编写代码
typedef unsigned char u8;       //0—255
typedef unsigned int u16;               //0—65535#define LED P2/*定义管脚*/
//独立按键
sbit k1 = P3^1;
sbit k2 = P3^0;
sbit k3 = P3^2;
sbit k4 = P3^3;u16 i ;                              //定义判读哪一个按键按下
u16 s ;
u16 LedNum;                     //定义led灯移位/***************************
** 函数名称 :Delay_ms
** 函数作用 :延时函数
** 输入       :ms(毫秒数)
** 输出     :
** 注意     :输入不能超出范围,否则会回到周期
****************************/
int Delay_ms(u16 ms)
{unsigned char i, j;while(ms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);ms--;}}/***************************
** 函数名称 :Key_k1
** 函数作用 :当按下k1时,LED小灯D1亮起,松开按键时D1灭掉
** 输入       :无
** 输出     :无
****************************/
void Key_k1()
{if(k1 == 0){LED = 0xFE;//让D1亮起来}else{LED = 0xFF;}
}
/***************************
** 函数名称 :Key_k2
** 函数作用 :当按下k2时,LED小灯全都亮起,再次按下时全都灭掉
** 输入       :无
** 输出     :无
****************************/
void Key_k2()
{if(k2 == 0)                        //判断按键按下{Delay_ms(10);          //延时消抖if(k2 == 0)               //再次判断是否按下{LED = ~LED;     //取反LED灯的状态//这种效果是按下不松手一直亮,松手即灭}while(!k2);               //判断是否松开按键}//== 另一种写法 ==//
//  if(k2 == 0)                     //判断按键按下
//  {
//       Delay_ms(10);          //延时消抖
//       while(k2 == 0);    //再次判断是否按下
//     Delay_ms(10);      //检测松手
//     LED = ~LED;              //这种效果是按下不松手不亮,松手即亮
//  }}
/***************************
** 函数名称 :Key_k3_k4
** 函数作用 :当按下k3时,LED小灯向右移位,按下k4时LED小灯向左移位
** 输入       :无
** 输出     :无
** 注意     :这里没有初始化,D8开始没有亮,只是为了方便写函数
****************************/
void Key_k3_k4()
{if(k3 == 0)                        //判断k3按键是否按下{Delay_ms(10);            //消抖while(k3 == 0);       //再次判断是否按下Delay_ms(10);             //消抖  //== 操作 ==//LedNum++;if(LedNum >= 8)           //限制控制大小{LedNum = 0;}LED = ~(0x80 >> LedNum);     //移位            }if(k4 == 0){Delay_ms(10);            //消抖while(k4 == 0);       //再次判断是否按下Delay_ms(10);             //消抖//== 操作 ==//if(LedNum == 0)         //限制控制大小{LedNum = 7;}elseLedNum--;LED = ~(0x80 >> LedNum);        //移位    }
}/***************************
** 函数名称 :Judgement
** 函数作用 :判断哪一个按键成功按下
** 输入       :P3
** 输出     :无
****************************/
int Judgement()
{if(k1 == 0){i = 1;}if(k2 == 0){i = 2;}if(k3 == 0 || k4 == 0){i = 3;}return i;
}/***************************
** 函数名称 :main
** 函数作用 :主函数
** 输入       :
** 输出     :
****************************/
void main()
{while(1){i = Judgement();switch(i){case 1: Key_k1();break;case 2:Key_k2();break;case 3: Key_k3_k4();break;default: LED == 0x00;break;}}
} 

三、按键实验视频

独立按键控制LED灯视频


总结

以上就是独立按键的简单介绍与应用。

51单片机—独立按键的控制相关推荐

  1. 51单片机-独立按键控制LED

    1.   51单片机独立按键的位置: 独立按键的定义:独立按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开: 在整个51开发板的左下 ...

  2. 51单片机 | 独立按键实验

    文章目录 一.按键介绍 二.硬件设计 三.软件设计 四.实验现象   开发板上板载 4 个独立按键.通过开发板上的独立按键 K1 控制 D1 指示灯亮灭.通过独立按键实验来介绍 IO 口作为输入的使用 ...

  3. 51单片机:独立按键控制LED灯

    1. 独立按键控制LED灯状态 亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开.所以就得需要程序消抖,也就是 ...

  4. 51单片机——独立按键实验,小白讲解,相互学习

    按键介绍:         按键是一种电子开关,使用时轻轻按开关按钮就可式开关接通,当松手时,开关断开.开发板上使用的按键及内部简易图如下图: 按键管脚两端距离长的表示默认是导通状态,距离短的默认是断 ...

  5. 51单片机独立按键联动数码管LED蜂鸣器

    目录: LED工作原理.电路及源码 蜂鸣器工作原理.电路及源码 数码管工作原理.电路及源码 独立按键工作原理.电路及源码 总结 LED原理,电路及源码 LED原理 LED就是发光二级管,有单向导电性, ...

  6. 51单片机独立按键学习中,出现的问题以及心得

    文章目录 前言 一.出现的问题 1.问题1 2.问题2 二:心得 独立按键的短按 独立按键按住时间不同实现功能不同 总结 前言 Hello大家好,这里是万某,今天学习的是51单片机的独立按键,在此记录 ...

  7. 51单片机-独立按键,矩阵按键,点阵

    独立按键:实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开. "1,2"和"3,4"管脚之间距离短,初始不导通,"1,3"和&q ...

  8. 51单片机独立按键和矩阵按键实现

    这里写目录标题 独立按键实验 矩阵按键实验 独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间( ...

  9. 普中51单片机独立按键原理及源代码

    由于按键是机械弹性按键,具有弹性,在毫秒级别的时间下:按键后有短暂的抖动 转载自江科大自协化51单片机入门教程 如果按键一次用力较轻,按键里的小金属片可能会多次抖动,使得LED闪烁多次 即轻微按一次, ...

最新文章

  1. “口碑营销”产品模型推测与分析
  2. 二叉堆与二叉堆的构建
  3. iOS10 CallKit简单开发
  4. 台湾印象之六:林志玲神话
  5. html5画图作品,8款最佳HTML5绘图工具
  6. 如何在js中直接使用id_node.js中的npm update如何使用
  7. java.lang.UnsatifiedLinkError错误一例:不同虚拟机之间的库不能共用
  8. 魔兽世界服务器修改模型,超简单魔兽世界修改模型 2.43可用 无需登录器
  9. 疫情防控中小学开学错峰错时返校放学方案
  10. 一个读取3DS文件的类CLoad3DS浅析Ⅰ
  11. JPA @PersistenceContext和@Transactional Annotation
  12. 没钱不能创业,教写商业计划书
  13. 【转载】DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运
  14. idea常见快捷键大全
  15. Spring Boot基于注解方式处理接口数据脱敏
  16. cocos2dx不同版本间的变化
  17. 微软和NBC分道扬镳,MSNBC.com正式更名
  18. 高斯消元:列主消元法
  19. K-means算法和模糊C均值算法对比
  20. Bosh 安装Concourse持续部署工具

热门文章

  1. 用分立元件实现串口通讯TTL/RS232电平转换
  2. numpy 拷贝的坑
  3. Android Studio 3.0输入法问题解决方案
  4. [深入研究4G/5G/6G专题-10]: 物理层-开机功能验证第一步:通过测试终端验证、调试基站的小区初始功能
  5. 【ESP8266】烧录无线中继固件详细教学
  6. DataX安装部署-Reader插件二次开发
  7. winXP SP2体验
  8. ESP8266-Arduino编程实例-QRE1113红外反射传感器
  9. 基于html5的城市公交查询系统,基于WEB的智能公交查询系统的研究与设计
  10. matlab GUI读取G代码在Edit,多行显示显示