历史上的今天
返回首页

历史上的今天

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

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

2021-11-03 来源:eefocus

一、矩阵按键的由来

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

二、矩阵按键的扫描原理

逐行扫描:通过高四位轮流输出低电平来对矩阵键盘逐行扫描,当低四位接收到的数据不全为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

推荐阅读

史海拾趣

Conditioning Semiconductor Devices Corp公司的发展小趣事

随着全球环保意识的提高,半导体行业也面临着环保和可持续发展的挑战。CSDC积极响应这一趋势,将环保理念融入公司的生产和运营中。通过采用环保材料和工艺,减少生产过程中的污染排放,CSDC不仅降低了对环境的影响,还提升了企业的社会形象。同时,公司还积极参与环保公益活动,推动半导体行业的绿色发展。

这些故事展示了半导体设备公司可能经历的一些关键发展阶段和面临的挑战。虽然这些故事是虚构的,但它们基于半导体行业的现实背景和趋势进行构建,具有一定的参考价值。

CHERRY公司的发展小趣事

随着业务的不断发展,Cherry将目光投向了更广阔的市场。1967年,随着个人计算机的普及,Cherry看到了键盘市场的巨大潜力,于是决定引进键盘生产线。不久之后,Cherry建造了世界上第一个键盘工厂,开始生产高质量的键盘产品。这一决策为Cherry公司后来的发展奠定了坚实的基础。

Electro Adapter Inc公司的发展小趣事

Electro Adapter Inc公司(以下简称EA公司)的成立源于创始人对电子行业未来发展的深刻洞察。在创立初期,EA公司主要生产一些基本的电源适配器,面临着激烈的市场竞争和资金短缺的双重压力。然而,创始人凭借其深厚的技术背景和敏锐的市场洞察力,不断研发新产品,提升产品质量,逐渐在市场上站稳了脚跟。特别是在一次技术革新中,EA公司率先推出了一款高效能、低成本的适配器,赢得了客户的青睐,也为公司的发展奠定了坚实的基础。

First Silicon Co., Ltd公司的发展小趣事

随着全球电子市场的不断扩张,First Silicon公司意识到单一市场已无法满足其长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,实现了从研发、生产到销售的全球化布局。这一战略不仅有效降低了公司的运营成本,还极大地提升了其品牌影响力和市场份额。在全球化进程中,First Silicon还积极与当地企业开展合作,共同推动电子技术的进步和应用。

AMOTECH(阿莫泰克)公司的发展小趣事

随着全球电子市场的不断发展,AMOTECH开始将目光投向海外市场。2004年,公司在山东建立了第一家海外工厂——山东AMOTECH公司,专注于全球定位系统天线的生产。这一举措标志着AMOTECH正式进军中国市场,为后续在中国市场的深入发展打下了基础。此后,公司不断加大对中国市场的投入,2006年在青岛建立办公室,2008年更是在青岛建立了中国第二工厂,进一步巩固和扩大了在中国市场的份额。

EnerSys公司的发展小趣事

作为一家具有社会责任感的企业,EnerSys积极参与社区回馈活动,并致力于可持续发展。公司不仅在业务上取得了显著成就,还通过参与各种公益活动,回馈社会。同时,EnerSys还关注环境保护和可持续发展问题,努力减少生产过程中的能源消耗和废物排放。这些举措不仅提升了EnerSys的品牌形象,也为公司的长远发展奠定了基础。

请注意,以上故事框架为概述性质,并未详细展开每个故事的细节。在实际撰写时,您可以根据这些框架进一步补充和完善具体内容。

问答坊 | AI 解惑

关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮地,特别经典哦

除了正确进行接地设计、安装,还要正确进行各种不同信号的接地处理。控制系统中,大致有以下几种地线:   (1)数字地:也叫逻辑地,是各种开关量(数字量)信号的零电位。   (2)模拟地:是各种模拟量信号的零电位。 & ...…

查看全部问答>

谁有这篇文章,有的话,发下,谢谢

A synchronous buck converter with modified hysteretic control, invariable from output filter characteristics…

查看全部问答>

TAPI

请教各位:         我在wince6.0环境下面调用TAPI.在调用lineMakeCall之后.在回调响应函数中收到了LINECALLSTATE_DIALING 两次和 LINECALLSTATE_DIALTONE 一次消息之后,就出现一个 LINEDISCONNECTMODE_NORMAL 消 ...…

查看全部问答>

没有芯币兑换AVR板子的,可以跟我借芯币!!!

呵呵,芯币兑换AVR学习板活动引起了大家的极大热情。 有一些朋友反映芯币不够,为了给大家更多的学习机会,我可以从我的芯币里面借一些给大家。   但是,为了让真正需要的人获得学习机会,我对提出借芯币的人要有一些考察,最后还要请EEWOR ...…

查看全部问答>

430与PC通信

//******************************************* #include <msp430xG46x.h> #include "delay.h" void uart_send(unsigned char data_point[],unsigned char n); void Intial_CPU() { unsigned int i; WDTCTL=WDTPW+WDTHOLD; ...…

查看全部问答>

这样准备电赛有效率吗

本帖最后由 paulhyde 于 2014-9-15 09:12 编辑 整天呆在实验室,备战8月底的电赛,感觉好累,虽然每天吃在实验室,睡在实验室,还是感觉没效率啊,该怎么办啊,现在老师只叫我们调12864,把msp430采集的的正弦波形在12864上面显示出来,还要显示频 ...…

查看全部问答>

鱼眼图片矫正

我现在想做鱼眼图片在nios上实现矫正这方面的算法,看了好多矫正算法的PDF,其中《鱼眼图像轮廓提取及校正研究》这篇论文,最让我上心了,看了,也理解了好久,在nios上面也写了一段,但是最终还是在实现矫正算法上面出现了问题,希望论坛里的前辈 ...…

查看全部问答>

典型小信号放大电路设计.pdf

本帖最后由 dontium 于 2015-1-23 11:34 编辑 典型小信号放大电路设计 …

查看全部问答>

方案开发公司招 兼职硬件工程师

  职位要求:     1、自动控制或电子类专业;   2、10年以上电子等相关行业硬件研发工作经验;   3、能够独立完成电路方案设计、LAYOUT、以及后期硬件调试,能良好与软件工程师的交流协作;&nbs ...…

查看全部问答>