0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机外接键盘电路

GReq_mcu168 来源:未知 作者:胡薇 2018-05-22 11:21 次阅读

一、原理简介

键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人机通信。在设计键盘电路与程序前,我们需要了解键盘和组成键盘的按键的一些知识。

1. 按键的分类

一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。

按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。

全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。

2. 按键的输入原理

在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。因此,键信息输入是与软件结构密切相关的过程。 对于一组键或一个键盘,通过接口电路与单片机相连。单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。

3. 按键的特点与去抖

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图1(a) 所示,抖动时间的长短与开关的机械特性有关,一般为5 ~ 10 ms。从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。( 本学习板采用软件去抖方式)。软件去抖的流程图如图1(b) 所示。

图1

从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间(可调用一个5ms~10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。

二、电路详解

电路图如图2 所示。

图2

从图2 中可知独立式按键采用每个按键单独占用一根I/O 口线结构。当按下和释放按键时,输入到单片机I/O 端口的电平是不一样的,因此可以根据不同端口电平的变化判断是否有按键按下以及是哪一个按键按下。从图2(a) 中可以看出,按键和单片机引脚连接并加了上拉电阻,这样当没有按键按下的时候,I/O 输入的电平是高电平,当有按键按下的时候,I/O 输入的电平是低电平。

虽然独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O 口线,因此,在按键较多时,I/O 口线浪费较大。对于比较复杂的系统或按键比较多的场合,可以用到矩阵键盘,图2(b) 中所示的为4×4的矩阵式键盘,其他矩阵式键盘的设计方法类似。

4×4 的矩阵式键盘由4 根行线和4 根列线交叉构成,按键位于行列的交叉点上,这样就构成了16 个按键。其中交叉点的行列线是不连接的,当按键按下的时候,此交叉点处的行线和列线导通。图2(b) 行线通过上拉电阻接到VCC 上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线在交点导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的每条行线与4 条列线相交,交点的按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,键分析时必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。

值得注意的是本文介绍的矩阵键盘,在传统的矩阵键盘的输出端加了一个四输入与门芯片74HC21。当四路输入有一个为低电平的时候,输出为低电平。将74HC21 的输出端接到单片机的外部中断0(P32 管脚)上,这样在实时性要求较高的情况下,设P00~P03 为全低等待按键触发,当任何一个按键按下的情况下,系统都会进入中断服务程序,提高了键盘响应时间,在系统实时性要求较高的情况下非常实用。本文的全部源程序见www.ele169.com。

三、程序设计

本文设计实例关键程序如下。

独立按键程序

……

#define keyio P0 ( 1)

#define key1 P0_3 ( 2)

……

keyio|=0X0F; ( 3)

if(key1==0) ( 4)

{

delay_nms(20); ( 5)

if(key1==0) ( 6)

{

while(key1==0); ( 7)

return 1; ( 8)

}

}

程序说明:

(1)定义按键管脚。

(2)定义按键连接管脚。

(3)将按键连接管脚输出高电平,从而接收输入。

(4)如果此时管脚所连接按键被按下。

(5)延时一段时间,去抖作业。

(6)如果此时按键仍然被按下,此时按键有效。

(7)等待按键抬起,死循环,如果按键一直按下则一直等待。

(8)返回键值。矩阵键盘程序

……

#define KEYIO P0 ( 1)

……

code ksp[4]={0x7F,0xBF,0xDF,0xEF}; ( 2)

unsigned char keypad_scan() ( 3)

{

char key,i; ( 4)

KEYIO=0xF0; ( 5)

if (KEYIO!=0xF0) ( 6)

{

for(i=0;i<=3;i++) ( 7)

{

delaykey(10); ( 8)

KEYIO=ksp[i]; ( 9)

delaykey(10); ( 10)

if(KEYIO!=ksp[i]) ( 11)

{

delaykey(10); ( 12)

key=KEYIO; ( 13)

while(KEYIO==key); ( 14)

return(key); ( 15)

}

}

}

}

程序说明:

(1)定义矩阵键盘管脚。

(2)将扫描时用到的管脚四种输出电平状态定义成一个数组。

(3)按键扫描程序。

(4)定义两个临时变量key,i。

(5)让键盘管脚的高四位输出高电平,第四位为低电平,为扫描按键准备。

(6)如果此时管脚状态电平发生变化。

(7)将之前定义的数组中的值赋予管脚,开始逐次扫描。

(8)延时一段时间,去抖。

(9)输出扫描按键的电平。

(10)再延时一段时间。

(11)如果此时按键管脚电平依旧不是输出的默认电平,表示有键按下。

(12)延时一段时间,让电平稳定。

(13)读取当前按键管脚电平,即键值。

(14)等待按键抬起,死循环,如果按键一直按下则一直等待。

(15)返回键值。

四、调试要点与实验现象

接好硬件,通过冷启动方式将程序所生成的。hex文件下载到单片机运行后,打开串口调试助手软件,设置好波特率9600,复位单片机,然后按下板上的4×4按键中的任意一个,并注意观串口调试助手上的显示。(见图3),可以观察到在接收窗口有按键的数据显示。

图3 按键通过串口调试助手显示界面

此外,在本文所附的实验程序中,其中与串口通信中调用了发送字符函数与发送字符串函数。在没有仿真器和遇到需要显示一些提示信息的时候,可以采用串口打印的方式,这样不仅直观方便而且不增加其他成本。

五、总结

本文介绍了单片机外接键盘的工作原理并给出了实例,通过该文,我们可以知道一个完善的键盘控制程序应具备以下功能:

(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。

(2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。

(3) 准确输出按键值(或键号),以满足按键功能要求。对于矩阵键盘而言,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。

此外,按键的扫描方式有多种,本文中所述的是程序扫描方式,另外常见的还有定时扫描方式和中断扫描方式,这些方式均可以在本学习板上实现,因此希望读者结合前几讲的知识,自行进行程序的编写与调试。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路
    +关注

    关注

    172

    文章

    5915

    浏览量

    172270
  • 单片机
    +关注

    关注

    6037

    文章

    44558

    浏览量

    635427

原文标题:跟我学51单片机(四):独立-矩阵键盘应用与设计

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何实现基于单片机键盘检测

    键盘单片机与用户交互设备之一,用户通过键盘输入数据或命令到单片机。最简单的键盘仅有一个按键,复杂一些的
    的头像 发表于 10-31 14:39 1949次阅读
    如何实现基于<b class='flag-5'>单片机</b>的<b class='flag-5'>键盘</b>检测

    单片机键盘电路的优化

    单片机的I/O口一般是双向的,既可以做输入,也可以做输出。以51 系列为例, 其P0、P1、P2、P3 均为双向口,且可位操作。单片机键盘电路主要有矩阵扫描和单键
    发表于 05-16 13:19 69次下载

    单片机键盘扫描之状态实现

    单片机键盘扫描之状态实现:在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。而一般的实现方法大概有:1、
    发表于 09-26 10:37 205次下载

    单片机键盘上的应用

    单片机键盘上的应用 键盘担负着向系统发出命令和查询系统工作状态的重任。由于各种单片机所提供的片内外资源不同,所以在进行键盘扩展时其硬件
    发表于 03-29 14:34 39次下载

    PIC单片机键盘电路四例源程序

    PIC单片机键盘电路四例源程序,需要的看看,免积分
    发表于 11-02 10:46 22次下载

    基于单片机键盘接口的设计与实现

    文章详细介绍了基于单片机键盘接口的设计与实现。实际使用结果表明,该键盘接口电路设计简单,键盘处理程序运行稳定可靠,具有推广价值。
    发表于 03-28 17:35 9次下载

    节约单片机端口资源的键盘电路

    I/0 端 口是单片机实现对目标控制的端口,一般小型单片机的 I/0 端口都十分宝贵。文中介绍了一种可节省单片机I/O端口的键盘电路,分析了
    发表于 03-29 10:21 13次下载

    一种新的单片机和AT通用键盘的接口

    本文介绍一种C505CA单片机与AT通用键盘的新的接口电路,该接口电路既能接收AT
    发表于 03-30 17:02 9次下载

    单片机实验--键盘扫描

    单片机实验--键盘扫描
    发表于 12-23 02:00 0次下载

    单片机键盘扫描小实验

    单片机键盘扫描小实验
    发表于 01-04 11:30 0次下载

    单片机控制系统键盘显示电路设计

    单片机控制系统键盘显示电路设计
    发表于 01-23 20:48 24次下载

    单片机汇编键盘扫描程序

    单片机汇编键盘扫描程序
    发表于 10-16 09:34 0次下载

    单片机8x8矩阵键盘原理说明

    本文主要介绍了介绍基于51单片机接矩阵键盘原理以及单片机8x8矩阵键盘原理说明,另外还详细的附上了单片机8x8矩阵
    的头像 发表于 02-24 16:14 2.6w次阅读
    <b class='flag-5'>单片机</b>8x8矩阵<b class='flag-5'>键盘</b>原理说明

    如何设计一个节约单片机端口资源的键盘电路

    键盘电路单片机应用系统最常用的人机接口,往往要占用较多的I/O端口,利用本文介绍的电路,可以最大限度地减少键盘
    的头像 发表于 05-05 12:08 4308次阅读
    如何设计一个节约<b class='flag-5'>单片机</b>端口资源的<b class='flag-5'>键盘</b><b class='flag-5'>电路</b>

    单片机键盘检测与应用

    非编码键盘通常又分为独立键盘和矩阵键盘两大类。所谓独立键盘是指按键在与单片机相连时,每一个按键都与一个
    的头像 发表于 09-18 16:34 5359次阅读