独立键盘检测原理以及实际应用

  • 一、键盘的概念
  • 二、独立键盘的检测
  • 三、独立键盘原理图
  • 四、实际应用

一、键盘的概念

键盘:是电子系统中,人机对话的重要组成部分,是人向机器发出指令、输入信息必须的设备

通常来说,键盘有编码键盘和非编码键盘两种。

编码键盘:键盘上闭合键的识别由专门的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘,这种键盘使用方便,所需程序简单,但硬件电路复杂

非编码键盘:是利用软件编程来实别键盘的,在单片机组成的各种系统中,最常用的就是非编码键盘,特点是硬件电路简单

非编码键盘又分为独立键盘和矩阵式键盘。

二、独立键盘的检测


在单片机的外围电路中,常常用到的按键是机械弹性开关,当开关闭合时,线路导通,开关断开时,线路断开。

如图,当按下开关时,原本连在一起的1和2脚,3和4脚被断开,原本没有连在一起的1和3脚,2和4脚被吸和,导通;当松手后自动断开。

自锁式按键:按下时闭合且会自动锁住,只有再次按下时才弹起断开。像我所用的单片机板子上的电源开关就是自锁按键。

单片机检测按键的原理是:单片机I/0口既可以作为输入使用,也可以作为输出使用。当检测按键时,用的是它输入功能,我们把按键一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一高电平,然后让单片机不断检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相关的指令。

按键按下时,触电的电压变化过程:

理想波形:没有按下为高电平,按下之后为低电平,松开之后又为高电平

实际波形:按下之后,存在机械抖动,需要过一段时间才会稳定成低电平,然后,松开时又会产生机械抖动

机械式按键在按下或者释放时,由于机械弹性的影响,通常会伴随有一定的时间触电机械抖动,然后其触电才稳定下来。
在触点抖动期间检测按键的通与断,可能会导致错误,即有可能被认为进行了多次操作,这种情况是不允许出现的。因此在单片机检测键盘是否按下都要加上去抖动操作,按键少时,可采用硬件消抖,按键较多时,采用软件消抖。

编写单片机的键盘检测程序时,一般在检测按下时加入去抖延时(10~20ms即可),检测松手时,就不用加了。

三、独立键盘原理图


单片机控制系统中,如果只需要几个功能键,此时,可以采用独立式按键结构。

独立按键式:

  1. 直接用I/O口线构成单个按键电路,其特点是每个按键单独占用一根I/O口,每个按键的工作不会影响其他I/O口的状态。
  2. 按键电路配置灵活,软件结构简单
  3. 由于每个按键必须占用一个I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用

四、实际应用

设计要求:按下S2,LED1点亮;按下S3,LED2点亮;按下S4,LED3点亮;按下S5,LED4点亮
程序:

#include<reg51.h>  //52单片机头文件sbit S2 = P3^0;     //位定义 S2为标示符 P3^0为地址值
sbit S3 = P3^1;
sbit S4 = P3^2;
sbit S5 = P3^3;sbit Led1 = P1^0;
sbit Led2 = P1^1;
sbit Led3 = P1^2;
sbit Led4 = P1^3;void main()
{while(1)          //通过大循环不断扫描按键状态{if(S2==0)     //这里的循环意思为:如果S2按键没有被按下,那么LED1不得电;如果S2按键被按下,那么LED1得电Led1 = 0;elseLed1 = 1;if(S3==0)Led2 = 0;elseLed2 = 1;if(S4==0)Led3 = 0;elseLed3 = 1;if(S5==0)Led4 = 0;elseLed4 = 1;}
}

效果:

设计要求:第一次按下S5,并松开S5,第一个数码管从0开始变为1;第二次按下S5,并松开S5,第一个数码管从1变为2;依次类推,直到变为9为止,一直循环。

#include <reg52.h>          //52单片机头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit S5 = P3^3;     //位定义 S5标识符 P3^4地址符
sbit WE = P2^7;
sbit DU = P2^6;uchar num;
uchar code table[] = {  //显示0~f的码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};void delay(uint z)      //延时函数
{uint x,y;for(x = z;x>0;x--)for(y = 144;y>0;y--);
}void main()              //主函数
{WE = 1;                //打开位选锁存器P0 = 0xfe;            //点亮第一个数码管WE = 0;              //关闭位选锁存器 让数据锁存while(1)             //大循环{ if(S5 == 0)         {delay(20);         //按键消抖if(S5 == 0){num++;if(num == 10)num = 0;while(!S5);     //松手检测}}DU = 1;                //打开段选锁存器P0 = table[num];      //num从第一个数开始亮DU = 0;               //关闭段选,锁存数据}
}

设计要求:按下S4按键,第一个数码管的数码管的数从0开始加1,;按下S3按键第一个数码管的数就开始减1

#include <reg52.h>          //52单片机头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit S5 = P3^3;     //位定义 S5标识符 P3^4地址符
sbit S4 = P3^2;     //位定义 S5标识符 P3^4地址符sbit WE = P2^7;
sbit DU = P2^6;uchar num;
uchar code table[] = {  //显示0~f的码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};void delay(uint z)      //延时函数
{uint x,y;for(x = z;x>0;x--)for(y = 144;y>0;y--);
}void main()              //主函数
{WE = 1;                //打开位选锁存器P0 = 0xfe;            //点亮第一个数码管WE = 0;              //关闭位选锁存器 让数据锁存while(1)             //大循环{ if(S5 == 0)         {delay(20);         //按键消抖if(S5 == 0){num++;if(num == 10)num = 0;while(!S5);     //松手检测}}if(S4 == 0)       {delay(20);         //按键消抖if(S4 == 0){if(num > 0)num--;while(!S4);     //松手检测}}DU = 1;                //打开段选锁存器P0 = table[num];      //num从第一个数开始亮DU = 0;               //关闭段选,锁存数据}
}

51单片机小白零基础教程——独立键盘检测原理以及实际应用相关推荐

  1. 51单片机小白零基础教程——点亮第一个小灯以及流水灯(附原理图、代码详细讲解)

    点亮第一个小灯以及流水灯 一.LED灯电路图分析 (1)LED灯的描述 (2)LED灯在电路图中的分析 (3)主控电路分析 二.如何利用Keil uVision4创建一个程序 三.Stc-isp烧录软 ...

  2. vue2+vue3小白零基础教程—vue2篇,全网2021最详细教程

    vue教程 提示:Vue3系列请参考Vue2+Vue3小白零基础教程-vue3篇文章,本文为vue2篇. 1. Vue核心 1.1 Vue简介 1.1.1 Vue是什么 一套用于构建用户界面的渐进式J ...

  3. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

  4. 51单片机(五)独立键盘检测与矩阵键盘检测

    独立键盘检测与矩阵键盘检测 一.独立键盘检测 1.工作原理 2.举例 2.1 位定义 2.2 数码管显示 3.3 按键 2.4 中断服务函数 2.5 完整程序 二.矩阵键盘检测 1.工作原理 2.程序 ...

  5. 《网络安全》零基础教程-适合小白科普

    <网络安全>零基础教程 目录 目录 <网络安全>零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻 ...

  6. B站百万播放量Java零基础教程视频(适合Java 0基础,Java初学入门),史上最细Java零基础教学视频

    是否还在为学习Java如何入门而烦恼? 是否还在为Java软件如何安装而烦恼? 是否还在找寻着适合零基础的Java视频教程? 动力节点教学总监老杜159集课堂实录Java零基础视频教程,从初学者角度出 ...

  7. 保姆级的HTML零基础教程少见吧?这是第一节(1)

    作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者.15-16年曾在网上直播,带领一批程序小白走上程序员之路.欢迎各位小白加我咨询我相关信息,迷茫的你会找到 ...

  8. 51单片机的键盘检测原理

    一.独立键盘检测 1.按键的检测原理 单片机的I/O口既可以作为输出也可以作为输入使用,检测按键时用的是输入功能.把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一个高电平, ...

  9. ROS机器人入门课程《ROS理论与实践》零基础教程(推荐课程)

    ROS的入门,对于纯小白的我来说很是痛苦,尤其是听完古月老师的21讲之后,更是浇灭了学习的兴趣,当时还在考虑要不要他的买课,还是算了,反正也听不懂,,,!!! 在一番挣扎之后,发现了赵虚左老师的课程, ...

  10. OpenMV零基础教程

    一.资料导航 "工欲善其事,必先利其器".在正式学习OpenMV之前,你必须知道一条或几条OpenMV的学习途径.这里推荐星瞳科技的中文官网教程,这个教程里面包括了OpenMV I ...

最新文章

  1. Mcad学习笔记之序列化(2进制和Soap序列化)
  2. CCNA学习心得(一)
  3. 前端学习(2484):发表更新
  4. 垃圾回收算法与垃圾回收器
  5. UVA11219 How old are you?【日期】
  6. Python爬虫实战(2) 爬取中国土壤数据库部分数据
  7. 初识Vocaloid3
  8. WEB版的即时聊天工具
  9. jdbc sql拼接字符串
  10. Java目前主流框架
  11. 黑马java idea (据说是完整的)网盘
  12. 金融计量学第一次实验:eviews做多元线性回归分析
  13. 接近开关NPN和PNP区别
  14. 怎样理解python是解释型语言
  15. 隔壁小王的shell命令1
  16. SQL日期时间转为字符串
  17. Google Map 开发笔记——基础篇(Javascript )
  18. linux实用的磁盘大文件及大文件夹查找命令
  19. css多图标在一张图内如何正确显示它们
  20. 社区发现-Fast Unfolding

热门文章

  1. Android 自定义锁屏_分享一款MIUI10精致主题,多种时间样式可选,可自定义字体颜色...
  2. 五项python小游戏代码测试
  3. python新手快速入门教程-10 分钟快速入门 Python3的教程
  4. 怎样恢复内存卡的视频文件?(图文操作解析)
  5. PRCS-1011 PRCS-1014
  6. 支付宝没有优势了,五大银行宣布今起手机银行转账汇款免收手续费
  7. 4种解决json日期格式问题的办法
  8. 【论文翻译】知识图谱论文中英对照翻译----(KnowLife:a versatile approach ... )
  9. MVC5局部视图的调用
  10. 17track包裹单个物流轨迹抓取(一)