历史上的今天
返回首页

历史上的今天

今天是:2025年04月08日(星期二)

正在发生

2019年04月08日 | 基于STM32L151//STM32F407的矩阵键盘程序(不规则接口)

2019-04-08 来源:eefocus


最近在做一个有关按键的项目,需要用到矩阵键盘,上网找了很多都是基于一些规则接口的程序,感觉无语,因为画PCB由于布线原因


不太可能矩阵键盘的几条线是连接连续的GPIO口,所以经过我自己思考,做出了自己基于STM32的不规则程序,


由于每种矩阵键盘的连接原理有时是不同,所以首先先讲明我的矩阵键盘的连接原理


4条行线初始化时全为1,列线全为0,由于我的列先有接10K的电阻,有按键按下时,被按下的列线为1,

行线一次置为1、0、0、0,1,0,0�,0,1,0�,0,0,1

基于STM32L151//STM32F407的矩阵键盘程序(不规则接口):


行接口:PA8,PA12,PB3,PB4

列接口:PA11,PB5,PB9


void KeyPress(void){

          int KeyValues;

 

 while(1)

 {

  if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)

  {

   Delay10ms(20);

   GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);

   GPIO_ResetBits(GPIOA,GPIO_Pin_11);

     GPIO_SetBits(GPIOA,GPIO_Pin_8);

   GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);

   GPIO_ResetBits(GPIOA,GPIO_Pin_12);

   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)

   {

      KeyValues=10;

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)

   {

      KeyValues=11; 

   }

while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);

   /////////////////////////////////////////////

   GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);

   GPIO_ResetBits(GPIOA,GPIO_Pin_11);

     GPIO_SetBits(GPIOA,GPIO_Pin_12);

   GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);

   GPIO_ResetBits(GPIOA,GPIO_Pin_8);

   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)

   {

      KeyValues=7; 

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)

   {

      KeyValues=8; 

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)

   {

      KeyValues=9; 

   }

 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);

   //////////////////////////////////////////////

   GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);

   GPIO_ResetBits(GPIOA,GPIO_Pin_11);

     GPIO_SetBits(GPIOB,GPIO_Pin_3);

   GPIO_ResetBits(GPIOB,GPIO_Pin_4);

    GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_12);

   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)

   {

      KeyValues=4;

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)

   {

      KeyValues=5; 

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)

   {

      KeyValues=6; 

   }

 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);

   ////////////////////////////////////////////////

   GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);

   GPIO_ResetBits(GPIOA,GPIO_Pin_11);

     GPIO_ResetBits(GPIOB,GPIO_Pin_3);

   GPIO_SetBits(GPIOB,GPIO_Pin_4);

     GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_12);

   

   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)

   {

      KeyValues=1; 

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)

   {

      KeyValues=2;

   }

   if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)

   {

      KeyValues=3;

 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);

   

     

     

   GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);

   GPIO_ResetBits(GPIOA,GPIO_Pin_11);

     GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);

    GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_12);

   }

  }

}

\\\\\\\\\\\\\\\\\\\

!!!!上图附有本程序的矩阵键盘原理,与普通矩阵键盘设计不太一样!!!!!!

\\\\\\\\\\\\\\\\\\\


推荐阅读

史海拾趣

Beckhoff Automation GmbH公司的发展小趣事

人才是企业发展的核心竞争力,BCD Semi公司高度重视人才培养和团队建设。公司建立了一套完善的人才培养和激励机制,吸引和留住了一批优秀的技术和管理人才。同时,公司还注重团队建设和协作精神的培养,鼓励员工之间的交流和合作,共同推动公司的创新和发展。

以上五个故事仅为示例性质,并不代表BCD Semi公司的实际发展经历。电子行业的发展是一个充满机遇和挑战的过程,需要企业不断创新、拓展市场、提升品质、关注环保和人才培养等方面做出努力。希望这些故事能够为您了解电子行业和BCD Semi公司的发展提供一些参考和启示。

CMOSIS公司的发展小趣事

随着CMOS图像传感器在智能手机、安防监控、汽车等领域的广泛应用,CMOSIS公司看到了巨大的市场潜力。公司加大了市场拓展力度,不仅在国内市场取得了显著成绩,还积极开拓海外市场。同时,公司注重品牌建设,通过提升产品质量、加强售后服务等方式,树立了良好的企业形象和口碑。

Advanced Technology Corp公司的发展小趣事

随着科技的飞速发展,ATC公司始终保持着对技术创新的热情与追求。公司不断投入研发资源,引进先进设备和技术人才,致力于开发更具创新性和实用性的电子产品。经过多年的努力,ATC公司在多个技术领域取得了重要突破,推出了一系列具有行业影响力的创新产品,赢得了市场的广泛认可。

Globaltech Semiconductor Co Ltd公司的发展小趣事

随着公司业务的不断发展壮大,Globaltech开始着手进行全球化布局。公司在全球多个地区设立了研发中心和销售中心,以便更好地服务全球客户。同时,公司还注重可持续发展和社会责任,积极参与公益事业和环保活动。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长期发展奠定了坚实的基础。

以上五个故事展示了Globaltech Semiconductor Co., Ltd.在电子行业中的发展历程和关键里程碑。通过技术创新、市场拓展、研发实力提升、战略调整和全球化布局等措施,公司不断壮大自身实力,并在全球半导体行业中占据了一席之地。

Herley New York公司的发展小趣事

随着技术的不断成熟,Globaltech开始积极拓展国际市场。公司通过与国内外多家系统厂商建立紧密的合作关系,共同开发新产品,进一步提升了其市场竞争力。特别是在亚洲市场,Globaltech凭借其高性价比的产品和快速的响应能力,迅速占据了大量市场份额。同时,公司还积极参与国际展会,与全球客户面对面交流,进一步提升了品牌知名度和影响力。

Hamamatsu公司的发展小趣事

近年来,全球半导体行业面临了诸多挑战,包括供应链紧张、技术迭代加速等。面对这些挑战,Globaltech积极调整战略,加强与上游供应商和下游客户的沟通与合作,确保供应链的稳定。同时,公司还加大了对新技术和新产品的研发投入,以应对行业变化带来的挑战。通过这些努力,Globaltech不仅成功应对了行业挑战,还实现了业务的持续增长。

问答坊 | AI 解惑

常用PIC系列8位单片机芯片引脚符号的功能

笔者读了本版有关PIC 8位单片机的产品性能和相应的封装引脚介绍后,认为对初学者而言还需了解各引脚符号的意义,才能进一步学习和使用它。笔者为此作相关的说明,以便和初学者共同提高。   一、关于I/O口符号 PIC单片机系列封装引脚最少的是8 ...…

查看全部问答>

触摸屏基础和工作原理

触摸屏技术的力量     触摸屏是一种与电脑交互的最简单,最直接的方法。虽然它才诞生于1970年,是一项由Elo TouchSystems公司首先推广到市场的新技术,但它却是人们最基本的交互方式。你可以指向你需要的任何一个地方。不论大人或小孩 ...…

查看全部问答>

单片机学习讨论群

欢迎加入51单片机学习群(新群速进)  61804809      51/AVR单片机学习群  6749085…

查看全部问答>

国产PLC品牌的尴尬(转贴)

大家好,我就在楼主说的国产品牌嘉华里工作,正好看到楼主的文章里提到了我们,我也来谈谈我对国产PLC的看法。嘉华在国内做PLC算比较早的,95年的时候第1台PLC研制成功,96年推向市场。到现在已经形成2大系列,12点到120点的完整产品线。我们的产品 ...…

查看全部问答>

电子制作DIY手册---[张歌编著][中国水利水电出版社][2004][470页]

无线电制作DIY手册.[张歌编著][中国水利水电出版社][2004][470页] 简介: 编辑、剪辑:张歌 基本信息·出版社:中国水利水电出版社 ·ISBN:750842414X ·条码:9787508424149 ·版次:1 ·装帧:平装 ------------------------------- ...…

查看全部问答>

A/D转换

我是单片机初学者,请问各位大侠, 怎么用MSP430F122微处理器连接WM8951L A/D转换器收集转换模拟音频信号?…

查看全部问答>

华为公司黑匣子规范

华为公司黑匣子规范…

查看全部问答>

wince5 下的device.exe有时不能加载SIP输入法的奇怪问题?

wince5下面的每个SLOT只有32M的虚拟内存可以使用,因此如果加载的驱动DLL 较多时,可能虚拟内存用尽。我的奇怪的问题是: 在我们的PDA上面(wince5),在没有加入CAMERA模块时,输入法是可以正常调出来的,但是自从加入了CAMERA后,我的输入法怎么 ...…

查看全部问答>

wince 如何实现打印(事成加100)

程序是wince6.0 c#语言开发的  有台HP的打印我要在里面实现打印 功能如何做 目前我打印出来是几跟线, 忘大虾们提供思路及代码 。。 …

查看全部问答>

关于430和UDP协议,怎么仿真的呢?

最近用DK5438的开发板调了调UDP协议,我想请问,UDP协议应该怎么仿真呢?是用网络调试助手,还是其他软件?谢谢了。芯片型号是F5438…

查看全部问答>