单片机外接键盘电路

发布者:清新时光最新更新时间:2020-02-03 来源: elecfans关键字:单片机  外接键盘电路  人机交互 手机看文章 扫描二维码
随时随地手机看文章

一、原理简介

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


1. 按键的分类

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


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


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


2. 按键的输入原理

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


3. 按键的特点与去抖

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

图1


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


二、电路详解

电路图如图2 所示。

图2


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


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


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

三、程序设计

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

独立按键程序

……

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


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

关键字:单片机  外接键盘电路  人机交互 引用地址:单片机外接键盘电路

上一篇:单片机时钟设计详细教程
下一篇:51单片机定时器与中断的程序设计

推荐阅读最新更新时间:2024-11-09 09:26

汽车芯片国产化率目标 25%!本土车规 MCU 蓄势突围
中国汽车工业协会最新数据显示,2023年,我国新能源车产销突破900万辆,市场占有率超过30%,连续9年位居全球第一,成为引领全球汽车产业转型的重要力量。在新能源汽车市场份额和渗透率不断提高的背景下, 车规级芯片 作为汽车产业核心关键零部件,决定着我国未来汽车市场的走向,是我国迈向汽车强国的关键一步。 为此,我国不断发力,以构建自主可控的 半导体产业 链。近日,有外媒报道称,中国正在敦促国内汽车制造商到2025年将汽车芯片本地采购比例提高到25%,旨在减少对进口芯片的依赖,增强国内半导体产业的竞争力。更有汽车业界关系人士透露,“2025年的目标仅是过渡性的、最终是希望所有车用芯片都能实现当地采购”。 另一方面,于中国车企而
[汽车电子]
汽车芯片国产化率目标 25%!本土车规 <font color='red'>MCU</font> 蓄势突围
基于51单片机老人防跌倒GSM短信报警系统
1、项目简介 选题指导,项目分享: Lighter-z/嵌入式基地 1.1 系统构成 本设计由STC89C52单片机电路+ADXL345加速度传感器电路+按键电路+蜂鸣器报警电路+DS18B20温度传感器电路+LED灯电路+GSM模块电路+电源电路组成。 1.2 系统功能 1、板子竖直放置的时候,蜂鸣器不报警,板子歪倒一定角度,则蜂鸣器鸣叫报警。一段时间约15s未回复正确状态,GSM发送报警信息给手机:Help me!!。 2、如果温度超过38度,蜂鸣器报警,持续温度过高约15s左右,同时短信报警:has a cold 3、设计带有误报警按键,蜂鸣器报警的时候,如果老人认为是误报警,则按键按下,蜂鸣器停止报警,如果持续问题存在还会
[单片机]
51单片机状态机键盘检测
#include reg52.h #define uint unsigned int #define uchar unsigned char sbit key1=P3^2; typedef enum keystate{initstate,affirmstate,singlestate,repeatstate};// typedef enum±íʾ¶¨ÒåÁËÒ»¸öö¾ÙÐ͵ÄÊý¾Ý½á¹¹ ²»¸³ÖµµÄ»° ĬÈÏ {0 1 2 3} // ³õʼ״̬£¬È·ÈÏ״̬£¬µ¥´Î´¥·¢×´Ì¬£¬Á¬Ðø´¥·¢×´Ì¬ typedef enum ledstate{D0,D1,D2,D3,D4,D5
[单片机]
浅析非对称双核MCU基础知识及核间通信
  本文从对比两颗分立MCU与单芯片双核MCU开始(以LPC4350为例),展开介绍了非对称双核MCU的基础知识与重要特点。接下来,重点介绍了核间通信的概念与几种实现方式,尤其是基于消息池的控制/状态通信。然后,对内核互斥、初始化流程等一些重要的细节展开了论述。最后提出了双核任务分工的两种应用模型,并分别举例。   背景与基本概念   在开发MCU应用系统时,如果单颗MCU无法满足系统的要求,一个很普遍的做法就是使用两颗或更多的MCU,把一部分“杂项工作”分配给另一个有“助理”性质的低端MCU来完成。但是,采用两颗MCU,缺点也很明显,尤其是在芯片与PCB成本、系统可靠性及功耗方面都有先天的不足。此外,若采用了不同架构的MCU
[单片机]
浅析非对称双核<font color='red'>MCU</font>基础知识及核间通信
单片机内部结构知多少
01 单片机内部结构分析 我们来思考一个问题,当我们在编程器中把一条指令写进单片机内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即 ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在 89C51 中的 ROM 是一种电可擦除的 ROM,称为 FLASH ROM,刚才我们是用的编程器,在特殊的条件下由外部设备对 ROM 进行写的操作,在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为 ROM。
[单片机]
STC89C52RC单片机额外篇 | 05 - 把NOP指令封装成微秒级延时函数
延时函数是单片机开发中是必不可少的功能函数,在每个工程里都能找到它的踪影。虽然看起来不起眼,但在有些时序控制的场合,使用了一点点延时,往往能解决大问题。特别对于某些模块,往往需要微秒级的延时,例如超声波模块与红外接收器等。 以前我们使用延时函数的时候,基本上类似这样: /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *************************************************
[单片机]
一文看懂汽车芯片产业链中车载MCU分类及应用
百年汽车行业正在经历大变革时代,汽车向电动化、智能化转化是大势所趋,根据海思在2021中国汽车半导体产业大会发布的数据,预计2027年汽车半导体市场总额将接近1000亿美元。而我国作为汽车制造大国,同样对汽车半导体需求旺盛,预计到2025年市场总额将达到137亿美元。 分开来说,电动化方面,汽车电动化最受益的是功率半导体,尤其是IGBT,预计到2025年全球新能源汽车IGBT规模接近40亿美元,中国达22亿美元。 智能化方面,当前汽车智能化处于0-1阶段,自动驾驶、智能座舱等对汽车感知器件、运算能力、数据量需求日益提升,汽车控制芯片、存储芯片、模拟芯片、传感器成长空间广阔。 展望未来,功能集中已然成为汽车芯片行业发展的必然
[嵌入式]
一文看懂汽车芯片产业链中车载<font color='red'>MCU</font>分类及应用
MCU--时间片&分时轮询
1、任务调度 任务调度对于电子类或者自动化类专业小伙伴最早接触一般都是在接触RTOS后了,然而对于计算机相关专业的小伙伴应该在学《计算机操作系统》老师对这一块讲解的非常清楚了,包括一些性能指标的定义与计算等等,不过作者这里仅仅只针对RTOS进行讲解,大家感兴趣可以找一下操作系统的书籍更加深入学习。 大家都知道我们的操作系统可以隐蔽底层实现,为用户提供API接口来供我们的应用程序服务,同时操作系统可以管理多个任务实现CPU的最大利用率,然而对于RTOS提供的最主要功能就是任务的调度来管理多个任务。 任务的调度简单一点的说就是确定任务该怎么执行的一种机制,这种涉及到策略的问题其实都可以归纳为算法问题,从而也就会出现了各种各样的
[单片机]
<font color='red'>MCU</font>--时间片&分时轮询
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved