矩阵键盘扫描原理详解——单片机

2019-08-16来源: eefocus关键字:矩阵键盘  扫描原理  单片机

键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。

/*  
    功能:矩阵键盘扫面,按键显示键值程序 
    作者:siriuszxn
                                  */
#include "reg51.h"                                                                                                                
#define KEYPORT = P1                                                                                                   

unsigned char i;                                                                                                                                         
unsigned char Keynum;                                                                                                        
unsigned char Line;                                       //行                                                                 
unsigned char Mask;                                                                                                         
unsigned char Col;                                        //列                                                                      
unsigned char ScanCode;                                                                                              

unsigned char code psegs_table[] =                                                                                            {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};                                                                //共阳极数码管0-F                                                                                                                                            

void delay_ms(unsigned int t)                      //ms延时程序                                                                      
{                                                                                                                                       
    unsigned char i;                                                                                                                 
     unsigned int x;                                                                                                                  
     x=t;                                                                                                                              
     while(x--)                                                                                                                        
     {                                                                                                                                          
             for(i=0;i<113;i++);                                                                                                              
     }                                                                                                                                           
}                                                                                                                                        
/* 键盘扫描程序 */                                                                                                                                        
void keyscan()                                                                                                           
{                                                                                                                                   
    while (1)              //循环扫描键盘       
    {                                                                                                                            
       P1 = 0xff;          //开始                                                         
        Line = 1;                                                                                         
        Mask = 0x01;                                                                                         

[1] [2] [3]

关键字:矩阵键盘  扫描原理  单片机

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic471336.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机读入4*4矩阵键盘
下一篇:51单片机之串口通讯应用实例(逻辑分析仪调试)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32矩阵键盘4*4扫描程序(无延时消抖,测试稳定)

直接上源码key.h文件#ifndef __KEY_H#define __KEY_H  #include "sys.h"   #define Read_Lie1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)#define Read_Lie2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)#define Read_Lie3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)#define Read_Lie4 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3
发表于 2019-08-19

ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器

一 矩阵键盘控制蜂鸣器原理: 1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响。1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响。1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 key.h代码: #ifndef __KEY_H #define __KEY_H #include”sys.h” #define ROWPINS GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2 |GPIO_Pin_1
发表于 2019-08-19

ARM开发(6) 基于STM32的矩阵键盘按键触发外部中断

一 矩阵键盘按键触发外部中断引起蜂鸣器鸣叫原理:1.1 本实验实现矩阵键盘某一列按键触发外部中断实现蜂鸣器鸣叫。1.2 实验思路:根据电路图原理,外部中断产生原理。1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 led.h代码: #ifndef  __EXTI_H #define __EXTI_H     #include "sys.h" void EXTIX_Init(void);//外部中断初始化 #endif2.2 led.c代码(IO配置): 
发表于 2019-08-19

基于stm32f103的矩阵键盘

我现在的任务是做一个8*8的矩阵键盘,制PCB版之前,我用电路板搭了一个3*3的矩阵键盘来模拟一下,设置PA0、PA1、PA2为PP输出,设置P3、P4、P5下拉输入。大多数的芯片内部上拉或下拉电阻都是弱上拉或弱下拉,stm32f103的内部也一样,内部上拉或下拉的电阻阻值约为40K,这样可以方便外部调整,但是,在作为一些通讯引脚时,可能会出现上电时数据不稳定的问题,如I2C通讯,解决的办法是在外部在加上一个较强的上拉或下拉即可。具体程序如下:#include <stm32f10x.h>#include "usart.h"void KeyBoard_Init(void)//按键初始化
发表于 2019-08-16

基于 STM32F407 使用 4*4 矩阵键盘

写在前面:这是我第一次开始写博客,可能写的不是很好,也请大家谅解。本人现在大三,以前在学习过程中遇到过各种各样的问题,关于51单片机,STM32单片机,最近在学习ARM11的Tiny6410以后还会更新一些C/C++/Qt等等方面的东西关于写博客这件事,其实 一直想写博客记录下来,但是因为某些原因(懒),so , 没有写。现在开始,以后遇到单片机上或者编程上遇到的问题,并且自己很好地解决了,我就会在这里记录下来。希望通过博客记录我的学习历程并希望我所解决问题的过程能够帮到需要的人,一起加油吧!!!我是在STM32F407开发板上使用的4*4 矩阵键盘下面是我所使用的开发板1、首先介绍一下4*4矩阵键盘扫描原理 
发表于 2019-08-16
基于 STM32F407 使用 4*4 矩阵键盘

基于STM32F407最小系统板三种矩阵键盘实现方法

这里采用的八个端口为PA0-PA7。此处先给出矩阵键盘的原理图:一、八个端口采用开漏输出,配置上拉电阻,实现同51一样的双向IO口功能。//按键初始化函数void KEY_Init(void){   GPIO_InitTypeDef  GPIO_InitStructure;   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
发表于 2019-08-16
基于STM32F407最小系统板三种矩阵键盘实现方法

小广播

何立民专栏

单片机及嵌入式宝典

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

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