历史上的今天
返回首页

历史上的今天

今天是:2025年06月22日(星期日)

2018年06月22日 | 单片机读入4*4矩阵键盘

2018-06-22 来源:eefocus

一、什么是矩阵键盘
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4*4和8*8,其中用的最多的是4*4。
网上搜了两张实物图,大家可以看看



看上图就知道,4*4键盘还是很多地方用到的吧^_^

二、矩阵键盘的原理
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具
有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以
得出按键的坐标从而判断按键键值。

原理如同矩阵数列的行列式



三、驱动电路图

按4*4矩阵搭建的按键矩阵还是比较简单的,也有的人为了保证电路的稳定性,加上二极管保护和上拉电阻,但是一般要求不太高的电路就不需要加了,向下面设置的电路那样就可以


四、软件程序设计

根据4*4键盘的原理软件设计程序如下:

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

//函数功能:  

//单片机驱动4*4键盘,读入键盘值并使用数码管静态  

//显示按键键值,若没有数码管用8421码显示LED灯也可以的  

//读入原理:先令单片机端口输出11110000读一次,然后  

//再令单片机输出00001111读一次把两次的值相加,最后  

//获取一个高位和低位分别有0的值即可判断键值,  

//如11101110  

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

#include  

#define uchar unsigned char   

#define uint unsigned int   

  

unsigned char code smg_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  

  

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

//延时函数,在12MHz的晶振频率下  

//大约50us的延时  

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

void delay_50us(uint t)  

{  

 uchar j;  

 for(;t>0;t--)  

        for(j=19;j>0;j--);  

}  

  

void main()  

{  

 uchar key_l,key_h;  

 uchar key;  

 while(1)  

 {  

 P1=0xf0;  

 key_l=P1;          //读P1端口的值  

 key_l=key_l&0xf0;  //令低4位置位为0  

 if(key_l!=0xf0)    //判断是否有按键按下  

 {  

  delay_50us(100);  

  if(key_l!=0xf0)  

  {                 //若有按键按下,则切换高低4位判断键值  

   key_l=P1&0xf0;   //11100000  获取第一次键值  

   key_l=key_l|0x0f;//11101111     

   P1=key_l;        //反过来再读一次,由于人手按下按键的时间虽然短暂,但是  

   key_h=P1;        //对于单片机来说,已经足够长,因此可以正反读取两次值  

   key_h=key_h&0x0f;//00001110  

   key_l=key_l&0xf0;//11100000  

   key=key_h+key_l; //11101110  

  }  

 }  

 switch (key)  

 {  

  case 0xee:P2=smg_d[0];break;  

  case 0xde:P2=smg_d[1];break;  

  case 0xbe:P2=smg_d[2];break;  

  case 0x7e:P2=smg_d[3];break;  

  case 0xed:P2=smg_d[4];break;  

  case 0xdd:P2=smg_d[5];break;  

  case 0xbd:P2=smg_d[6];break;  

  case 0x7d:P2=smg_d[7];break;  

  case 0xeb:P2=smg_d[8];break;  

  case 0xdb:P2=smg_d[9];break;  

  case 0xbb:P2=smg_d[10];break;  

  case 0x7b:P2=smg_d[11];break;  

  case 0xe7:P2=smg_d[12];break;  

  case 0xd7:P2=smg_d[13];break;  

  case 0xb7:P2=smg_d[14];break;  

  case 0x77:P2=smg_d[15];break;  

 }  

 }  

}  


推荐阅读

史海拾趣

Dfx公司的发展小趣事

随着智能家居市场的不断发展,某智能家居企业面临着如何将各种智能设备无缝连接、实现高效协同的挑战。通过引入DFX的设计理念,该企业成功实现了智能家居产品的标准化、模块化和可扩展性设计。这种设计方式使得不同设备之间可以方便地进行连接和通信,提高了系统的整体性能和用户体验。同时,该企业还通过优化生产流程和加强质量控制等手段,确保了产品的稳定性和可靠性。

这些故事虽然基于虚构的情境,但融入了电子行业中常见的实际问题和发展趋势。通过引入DFX的设计理念,这些企业成功解决了面临的挑战,提升了产品竞争力并赢得了市场的认可。

CTC [Compact Technology Corp.]公司的发展小趣事

随着业务的发展,CTC公司意识到全球化布局的重要性。公司开始在全球范围内寻找合适的合作伙伴和投资机会,以拓展自身的业务范围和市场影响力。同时,CTC公司还加强了对国际市场的调研和分析,以更好地适应不同地区的市场需求和文化差异。这一全球布局策略使得CTC公司的竞争力得到了进一步提升。

Bedford Opto公司的发展小趣事

Bedford Opto公司在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,致力于减少生产过程中的污染和能耗。同时,公司还积极参与公益事业,为社会做出积极贡献。

Custom Connector Corporation公司的发展小趣事

CCC深知产品质量对于企业生存和发展的重要性。因此,公司始终将质量管理放在首位,建立了严格的质量检测体系和售后服务体系。从原材料采购到产品生产、再到售后服务,CCC都严格按照质量标准进行操作,确保每一件产品都符合客户的要求。这种对质量的执着追求让CCC赢得了客户的信赖和口碑相传。

驰芯微(CHIPWISE)公司的发展小趣事

驰芯微公司自2014年成立以来,就立志于打破国外芯片厂商在车规级芯片领域的垄断。初创时期,公司面临着资金短缺、技术壁垒高和市场竞争激烈的挑战。然而,驰芯微团队凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列车规级智能传感和控制芯片,并逐渐在行业中崭露头角。经过数年的努力,驰芯微已经成为国内车规级芯片领域的领军者,其产品广泛应用于各类前装量产车型。

Carling Technologies公司的发展小趣事

在发展过程中,Carling Technologies还通过收购其他企业来增强自身实力。例如,公司收购了Maretron品牌,将其纳入旗下,并充分利用其在船舶监控和控制解决方案方面的优势,为前沿产品和解决方案的持续开发提供支持。这种收购与品牌整合的策略不仅丰富了公司的产品线,也扩大了其在特定市场的影响力。

问答坊 | AI 解惑

TI锂离子电池充电器具备过压保护及热过载保护稳压特性

日前,德州仪器(TI)宣布推出一款新型1A bqTINY单体锂离子电池线性充电器,该产品增强了热过载保护稳压(thermal fold-back regulation)以及低压降电源管理功能。对于多种通过电池充电底座或AC适配器进行充电的应用来说,该款新型3x3毫米器件将使充电 ...…

查看全部问答>

主题:能猜中图中是什么芯片的就是高手

能猜中图中是什么芯片的就是高手 …

查看全部问答>

光通訊主動元組件導論5/8

光通訊主動元組件導論 05光接收— 檢光器.ppt …

查看全部问答>

宏晶单片机网站两天上不去了,怎么回事

我想下个资料昨天没上去今天又没上去,怎么搞的难道。。。。宏晶有什么事啦么?   什么有图有真像,上图哈   [ 本帖最后由 ddllxxrr 于 2011-8-2 14:11 编辑 ]…

查看全部问答>

谁有触摸板原理图,例程

我用的校园网,TI的网站上不去,谁能上去?分享下相关资料,不胜感激!!!…

查看全部问答>

有关上拉电阻的计算

我想问个问题,比如说以80c51单片机,要在P0端口接一三八译码器,又因为P0口是开漏的,所以要接一上拉电阻,又因为P0口的拉电流为250uA,三八译码器的高电平输入电流为最大为20uA,根据以上条件如何计算上拉电阻的取值范围…

查看全部问答>

中断程序的问题

请教各位下面这段程序在向量表的初始化和赋值中有什么作用呢?当中断发生时,CPU是怎么判段是哪中断,如何自动进入中断程序的呢?希望高人指教,谢谢 void InitPieVectTable(void){ int16 i; Uint32 *Source = (void *) &PieVect ...…

查看全部问答>

MC9S12XET100MAl代码

飞思卡尔 XEP100MAL  ADC程序…

查看全部问答>

cpld出售

epm1207能卖多少钱?完整的开发办…

查看全部问答>