历史上的今天

今天是:2024年11月03日(星期日)

2021年11月03日 | 4*4矩阵 ---- 学习笔记

发布者:PositiveEnergy 来源: eefocus关键字:4*4矩阵  独立按键  单片机 手机看文章 扫描二维码
随时随地手机看文章

一、矩阵按键的由来

按键矩阵是由一个个独立按键连接在一起,每一行引出一个管脚,每一列也引出。

二、矩阵按键的扫描原理

逐行扫描:通过高四位轮流输出低电平来对矩阵键盘逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,通过接收到的数据是哪一位为0来判断是那一个按键被按下。


行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全位高电平时,说明有按键按下,通过接收到的数值,判断是哪一列有按键按下,然后在反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样能够确定是哪一个按键按下。

三、矩阵按键变成独立按键

 

四、代码

#include

#include

typedef unsigned char u8;       // 预处理数据类型 无符号

typedef unsigned int  u16;   // 预处理数据类型

 

#define GPIO_GIO P0   // 宏定义 按键断选

#define GPIO_KEY P1   //         按键接口

 

/*// 138译码器管脚定义

sbit LSA = P2^2;

sbit LSB =  P2^3;

sbit LSC =  P2^4;

 */

 

u8 KeyValue;           //  全局变量 存储读到的键值

 

 

// 延迟函数

void delay(u16 i){

    while(i--);

}

 

u8 code smgduan[16]={0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

                                        0x77,0x7c,0x39,0x5e,0x79,0x71};   //共阴

 

/*静态数码管P0口,矩阵P1口*/

void KeyDown(){

     char a =0 ;  // -128到128  初始化a

     GPIO_KEY = 0x0f;         // 对并行串口的定义,高四位为低电平

if(GPIO_KEY != 0x0f){   // 判断按键是否按下

     delay(1000);             // 按键消抖

        if(GPIO_KEY != 0x0f){

// 判断列

            switch(GPIO_KEY){

                case(0x07):KeyValue =0;break;  // 0000 0111

case(0x0b):KeyValue =1;break;  // 0000 1011

case(0x0d):KeyValue =2;break;  // 0000 1101

case(0x0e):KeyValue =3;break;  // 0000 1110

                             }

GPIO_KEY=0xf0;

//判断行

switch(GPIO_KEY){

                case(0x70):KeyValue =KeyValue;break;    // 

case(0xb0):KeyValue =KeyValue+4;break;  // 

case(0xd0):KeyValue =KeyValue+8;break;  // 

case(0xe0):KeyValue =KeyValue+12;break; // 

                             }

while((a<50)&&(GPIO_KEY!=0xf0))  // 强制退出while循环    GPIO_KEY

{

delay(1000); // 延迟10毫秒

a++;

}

                             }

 

                       }

 

                }

 

 

// 数组

/**********************************

数码管显示真值表   共阳

  0 1   2 3 4     5

0xc0  0xf9  0xa4  0xb0  0x99  0x92 

 

  6 7   8 9 a b

0x82  0xf8  0x80  0x90  0x88  0x83

  c d   e f

0xa7  0xa1  0x86  0x8e

*************************************

数码管显示数字的真值表

*/

 

 

 

/*void DigDisplay(){

    u8 i;  //

for(i=0;i<8;i++){

switch(i){

    case(0):

LSA = 0;LSB=0;LSC=0;break;

case(1):

LSA = 1;LSB=0;LSC=0;break;

case(2):

LSA = 0;LSB=1;LSC=0;break;

case(3):

LSA = 1;LSB=1;LSC=0;break;

case(4):

LSA = 0;LSB=0;LSC=1;break;

case(5):

LSA = 1;LSB=0;LSC=1;break;

case(6):

LSA = 0;LSB=1;LSC=1;break;

case(7):

LSA = 1;LSB=1;LSC=1;break;

}

   P0 = smgduan[i];

   delay(100);

   //P0= 0X00;

}

}   */

 

void main(){

P0=~smgduan[0];

     while(1){

KeyDown();

GPIO_GIO =smgduan[KeyValue];

     }

}      

 


显示效果:按矩阵按键s1~s16分别显示数字1~9,字母a~f

关键字:4*4矩阵  独立按键  单片机 引用地址:4*4矩阵 ---- 学习笔记

上一篇:STC89C52之中断系统 ---- 51单片机的核心 自学笔记
下一篇:单片机之89c52独立按键 -----学习笔记

推荐阅读

        新浪数码讯 11月2日下午消息,在今年CES美国消费电子展期间,90分曾展示出一款自动跟随旅行箱Puppy1。现在这款智能跟随旅行箱将在双11期间发售。  据90分官方称,经过一年的测试和研发,量产版的Puppy1在箱体结构和设计上进行了优化,操控稳定性方面也有了极大提升。  Puppy1是一款20寸登机箱,箱体采用德国拜耳的聚碳酸酯材质,手拉...
南方电网公司始终坚持推进核心技术创新和商业模式创新,提早布局区块链技术在能源领域的应用。 在珠海,广东电网公司珠海供电局开展了基于区块链技术的绿证交易平台试点示范。在深圳,南网电动汽车公司于今年1月31日开出全国首份充电电费区块链电子发票,截至昨日,已累计开具5000余张。 据了解,在国内外能源领域中,区块链技术多用于解决可再生能...
德国慕尼黑法院于今年9月30日裁决联想侵犯了诺基亚的EP1433316专利,并下达了禁止令以及产品召回和损害赔偿。对于慕尼黑法院的裁决,联想随后提起了上诉。据路透社最新消息,德国一家上诉法院于当地时间周一解除了诺基亚赢得的禁止令。联想表示:“在上诉中无法维持原判决的可能性很大,上诉法院已批准其暂缓执行慕尼黑法院裁决的请求。”对此,诺基亚表示...
WFE等待事件(Wait For Event)指令。ARM架构下,有一个全局的事件寄存器(Event Register),系统中的每一个CPU核在这个寄存器上都有对应的位。当当前CPU执行WFE指令的时候,如果事件寄存器对应当前CPU的位没有被设置(也就是0),则当前CPU核会进入低功耗模式,会被挂起,不会再执行其它操作;而如果事件寄存器对应当前CPU的位被设置了(也就是1),...

史海拾趣

问答坊 | AI 解惑

键盘设计参考资料

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 键盘设计参考资料  …

查看全部问答∨

FPGA控制网卡芯片数据收发如何判断接到的是命令还是数据

我用FPGA控制网卡芯片做一个数据收发的东西,但是怎样让FPGA开始发送数据呢?具体就是, FPGA接收到命令就开始发数据,接收到数据就存储,可是怎样判断接到的是命令还是数据呢?…

查看全部问答∨

想学好单片机编程我该学什么?

我现在的项目是单片机的,而我以前都没学过任何有关单片机的知识,现在边学边做,我想请教下大家,我想把单片机学好,我该学习些什么,我觉得硬件方面暂时不想学,我想深入点学习,有哪些方面的书是必看的呢?有什么好书推荐没?…

查看全部问答∨

帮忙看一下这段代码有什么错误,用evc编辑的

这段代码实现添加add和编辑edit功能,编译通过了,但功能无法实现。谢谢帮忙看下! bool CFinal92Dlg::AddCAR(REC_CAR car) {    CString str;    SYSTEMTIME systime;    FileTimeToSystemTime(&(car.ftday) ...…

查看全部问答∨

关于makefile的一个问题

当依赖关系中没有指明依赖文件时,make工具如何决定是否执行依赖关系中的命令? 比如: all:makedir makedir: mkdir out 当make工具检查目标文件makedir的依赖关系时,发现此依赖关系中没有指时依赖文件.那么make工具到底是继续,还是报错? …

查看全部问答∨

Createfile,readfile,writefile,还有deviceiocontrol中的缓冲区到底是什么意思啊?

驱动开发时,我看了很多遍,还是不明白。其实以前文件操作时也用过,就是写文件,读文件。但是用于驱动时我就搞不明白了,这些缓冲和驱动缓冲有什么关系?如:USB驱动中,这些缓冲和端点缓冲是什么关系,这些缓冲起什么作用? 谢谢高人们啊!!!…

查看全部问答∨

CAB安装问题

安装CAB之后,如何在系统的“删除程序”中看不到所安装的软件。…

查看全部问答∨

仿真时外扩存储器的问题

请教EEWORLD的工程师:听别人说,在用仿真器调试2407时要外扩存储器,否则就不能进行仿真,不知道是什么原因?哪里有这方面的资料可查?!望清楚的工程师赐教!!…

查看全部问答∨

编译linux内核出现的错误

小弟初学arm,按照书上的一些介绍做好了linux内核配置,在make zImage时,出现下面问题:不知道是什么原因,请高手帮忙解答一下。。。 warning: (NETFILTER_XT_MATCH_REALM) selects NET_CLS_ROUTE which has unmet direct dependencies (NET & ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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