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

发布者:温馨时光最新更新时间: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]
关键字:矩阵键盘  扫描原理  单片机 引用地址:矩阵键盘扫描原理详解——单片机

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

推荐阅读最新更新时间:2024-11-08 18:11

超低功耗MCU助力便携式医疗设备
价格合理的先进个人医疗设备的大量涌现,正在改变着整个保健行业,消费者可以在家中或旅途中监测自身的生命体征和其他关键指标,而无需劳命伤财地亲自到医院看病。根据Gartner公司的调查,便携式消费类医疗设备,如血糖检测仪、血压计、胰岛素泵和心率检测器等是医疗设备市场中增长最快的部分。Databeans公司最近所做的一项医疗半导体报告也指出,未来五年家用医疗设备市场将有9%的增长(复合年增长率,CAGR)。   个人医疗设备市场的迅速增长源于多种因素:老年人需要经常性地进行健康体检、传统医疗服务费用高昂、消费者逐渐意识到保健设备的益处、个人医疗设备可以方便地在网上或零售店里买到、半导体技术的不断进步,使得这些消费类保健设备日益成熟
[工业控制]
超低功耗<font color='red'>MCU</font>助力便携式医疗设备
英飞凌下一代汽车MCU将于2023年底提供样品
12月1日消息,英飞凌表示下一代Aurix微控制器将使用嵌入式非易失性存储器,特别是电阻式随机存取存储器(RRAM),而不是嵌入式闪存(eFlash),并将在台积电的28纳米节点上制造。 据悉,基于台积电28nm eFlash技术的Autrix TC4x系列微控制器的样品已经交付给主要客户,但基于台积公司28nm RRAM技术的首批样品将于2023年底提供给客户。 英飞凌表示,Autrix TCPx系列微控制器专为ADAS设计,并提供新的E/E架构和价格合理的AI应用。
[汽车电子]
转动惯量测量电路与实现
  转动惯量是质量特性参数测量的重要部分,在多个领域从产品的设计、生产和控制系统中都起着举足轻重的作用,直接关系到产品设计成败和产品的质量。从航空工业对飞机 转动惯量 的测量到汽车工业对转动部件惯量的测量,无不体现着其测量的重要性。本文以实验室某回转机械传动系统为研究模型,采用单片机作为核心控制器件,重点研究了转动惯量测量过程的硬件和软件设计。   1 被测系统结构简介   研究的回转机械传动系统结构如图1所示。   试验设备清单如下所述:   变频器一台:输入规格为AC 3PH 380~460 V,50/60 Hz;输出规格为AC0~240 V 1.7 kVA 4.5 A;   变频范围:2~200 Hz。   
[单片机]
转动惯量测量电路与实现
单片机C语言程序设计:定时器控制交通指示灯
/* 名称:定时器控制交通指示灯 说明:东西向绿灯亮 5s 后,黄灯闪烁,闪烁 5 次亮红灯, 红灯亮后,南北向由红灯变成绿灯,5s 后南北向黄灯闪烁, 闪烁 5 次后亮红灯,东西向绿灯亮,如此往复。 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0; //东西向指示灯 sbit YELLOW_A=P0^1; sbit GREEN_A=P0^2; sbit RED_B=P0^3; //南北向指示灯 sbit YELLOW_B=P0^4; sbit
[单片机]
<font color='red'>单片机</font>C语言程序设计:定时器控制交通指示灯
stm单片机红外编码程序
上回书说到,ht6621,可以通过hs0038进行解码,但由于只可以通过遥控器进行控制,觉得不爽,而且项目中,也不允许用遥控器,所以就决定弄个单片机来做个编码。上回书说了,pt6221可以进行编码,于是百度,去找数据手册,就有了日志里的编码方式,然后,用示波器打了一下波形,看了一下,真是和手册上说的一样,于是傻了吧唧,的按照手册上说的时序,写了一个只是电平变化的程序。写完后,把红外二极管,接到管脚上一试,结果接收木有反映,但按下红外遥控器就有反映,拿手机照相机看,也都有光。于是我陷入了纠结。开始是以为红外二极管的波长不对,于是跑到了鞍山西道,分别找了4家,买了各式各样不同的红外二极管。本以为会好了,但回来一试,还是一样 。于是我一狠
[单片机]
基于MSP430单片机的彩色TFT液晶显示模块的应用
现代显示技术的基本特点是将各种非电置的信息,如声、光、热、力、数、气氛等的信息源通过一定的传感器、处理器进行感知和处理,传输给显示装置,再由显示装置进行处理、转换,最后经由显示器件转换为人类视觉可识别的信息。在显示的过程中,TFT彩色液晶显示模块可以提供更大的信息量。而触摸屏是一种使电子设备改头换面的设备,它赋予电子设备以崭新的面貌,是极富吸引力的全新多媒体交互设备。 总体设计 任何一种基于微控制器的系统设计都包含了硬件设计和软件设计两个大的方面。硬件设计主要根据系统的功能要求选择不同的器件和芯片完成电路的搭建:软件设计是根据硬件的设计编写驱动代码和控制代码来完成特定的功能。硬件设计与软件设计结合起来才是一个完整的系统设计
[单片机]
基于MSP430<font color='red'>单片机</font>的彩色TFT液晶显示模块的应用
单片机与PC机电话远程通信系统
1.引言    随着通信技术的不断发展,计算机网络系统通信是当今技术发展的一个重要的方向,然而在网络系统中利用现有电话网作为通信信道则是最经济、最方便和最可靠的方法。当前现代电话通信网已经进入程控交换时代,技术比较先进,速度快,容量大,因此采用电话通信网建立数据通信系统确实具有其独特的优越性。   利用单片机系统采集灌区水位、水流量,实现无人职守和科学的管理水资源具有实际意义,特别对少雨缺水地区更具有应用价值。 2.系统硬件设计    本系统采用了MODEM将前端单片机采集的数据通过电话网远程传输到中心站PC机,并实现一对多点通信(站点数、通信距离均不限),后台PC机通过拨号的方式对各站点进行数据接收并实时存储记录、查询
[网络通信]
MCS-51系列单片机在SDH系统中的应用
同步数字序列SDH(Synchronous Digital Hierarchy)是一种全新的传输网体制,自从90年代初出现以来,SDH以其各方面的优越性迅速成为通信网络的骨干网络。目前世界各国大多以SDH作为通信的骨干网络。在我国,干线网络也基本采用了SDH网络。 SDH系统与原有PDH(Plesinchronous Digital Hiearchy)系统相比,最突出的优点就是具有强大的网络管理能力。在SDH的帧结构的各个层次中,都提供了丰富的开销字节,以实现对不同层次信号的全面管理。 1. SDH系统介绍 清华大学电子工程系自主开发了SDH大规模专用集成电路套片,它包括高阶复用芯片MXH0155-2,实现从VC4信
[单片机]
MCS-51系列<font color='red'>单片机</font>在SDH系统中的应用
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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