历史上的今天
返回首页

历史上的今天

今天是:2025年08月16日(星期六)

正在发生

2019年08月16日 | STM32 学习笔记 一.矩阵键盘

2019-08-16 来源:eefocus

刚刚接触STM32,感觉和arduino完全是两个难度,如果说arduino是乐高积木,那我感觉STM32就跟盖楼一样,哈哈,是真的难,真的极具挑战性,可能是我刚开始学觉得难,到后面熟练了应该会好一些,言归正传,就讲一讲我们学长给我们下的任务矩阵键盘。

学长学姐们做的是九键的矩阵键盘,我们做的是四键的,难度其实相差不大,换汤不换药的类型,原理就是一二号线通高电平,三四号线低电平,然后交换,让一二号低电平,三四号高电平这样就可以确定是哪个按键被按下。

在这里插入图片描述

OK上代码

key.c函数


#include "key.h"

#include "delay.h"

#include "usart.h"


void KEY_Init1(void)

{

RCC->APB2ENR|=1<<3;     

JTAG_Set(SWD_ENABLE);

GPIOB->CRL&=0XFF0FFFFF;  

GPIOB->CRL|=0X00800000;

 // GPIOB->ODR|=1<<5;  

  GPIOB->CRL&=0XF0FFFFFF;   

GPIOB->CRL|=0X08000000;

//GPIOB->ODR|=1<<6;

  GPIOB->CRL&=0X0FFFFFFF;  

GPIOB->CRL|=0X80000000;

//GPIOB->ODR|=1<<7;

GPIOB->CRH&=0XFFFFFFF0;  

GPIOB->CRH|=0X00000003;

GPIOB->ODR|=1<<8;

GPIOB->CRH&=0XFFFFFF0F;   

GPIOB->CRH|=0X00000030;

GPIOB->ODR|=1<<9;

GPIOB->CRH&=0XFFFFF0FF;   

GPIOB->CRH|=0X00000300;

GPIOB->ODR|=1<<10;

key9_Out=1;key8_Out=1;


void KEY_Init2(void)

{

//RCC->APB2ENR|=1<<3;     

//JTAG_Set(SWD_ENABLE);

GPIOB->CRL&=0XFF0FFFFF;

GPIOB->CRL|=0X00300000;

GPIOB->ODR|=1<<5;

  GPIOB->CRL&=0XF0FFFFFF;

GPIOB->CRL|=0X03000000;

GPIOB->ODR|=1<<6;

  GPIOB->CRL&=0X0FFFFFFF;

GPIOB->CRL|=0X30000000;

GPIOB->ODR|=1<<7;

GPIOB->CRH&=0XFFFFFFF0;   

GPIOB->CRH|=0X00000008;

//GPIOB->ODR|=1<<8;

GPIOB->CRH&=0XFFFFFF0F; 

GPIOB->CRH|=0X00000080;

//GPIOB->ODR|=1<<9;

GPIOB->CRH&=0XFFFFF0FF;

GPIOB->CRH|=0X00000800;

  //GPIOB->ODR|=1<<10;

key6_Out=1;key5_Out=1;


u8 KEY_Scan1()

{  

u8 H=0;

GPIOB->ODR&=~(1<<5);

GPIOB->ODR&=~(1<<6);

GPIOB->ODR&=~(1<<7);

KEY_Init1();

if(key5_In==1||key6_In==1)

{

delay_ms(50); 

if(key5_In==1)    

H=1;

if(key6_In==1)   

H=2;

return H*10;

}

else 

return 0;

}

u8 KEY_Scan2()

{  

u8 L=0;

  GPIOB->ODR&=~(1<<8);

GPIOB->ODR&=~(1<<9);

GPIOB->ODR&=~(1<<10);

  KEY_Init2();

  if(key8_In==1||key9_In==1)

{

   delay_ms(50);

if(key8_In==1)    

     L=1;

else if(key9_In==1)    

   L=2;

  return L;

}

else return 0;

}


void KEY_Print(void)

{

   int t=0;

   t= KEY_Scan1()+KEY_Scan2();

if(t!=0)

{

if(t==11)

printf("1rn");

else if(t==12)

printf("2rn");

else if(t==21)

printf("3rn");

else if(t==22)

printf("4rn");

  }


key.h函数


{

#ifndef __KEY_H

#define __KEY_H  

#include "sys.h"


#define KEY1H_PRES 1 

#define KEY2H_PRES 2

#define KEY1L_PRES 1 

#define KEY2L_PRES 2


#define key5_In  PBin(5)    //PB5

#define key6_In  PBin(6)   //PB6 

  //PB7

#define key5_Out  PBout(5)

#define key6_Out  PBout(6)


#define key8_In  PBin(8)   

#define key9_In  PBin(9)    


#define key8_Out  PBout(8)    //PB8

#define key9_Out  PBout(9)    //PB9

 

void KEY_Init1(void);

void KEY_Init2(void);

u8 KEY_Scan1();

u8 KEY_Scan2();

void KEY_Print(void);

#endif

}


#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "led.h" 

#include "key.h"


int main(void)

{    

Stm32_Clock_Init(9);

delay_init(72);      

uart_init(72,9600);

while(1)

{

KEY_Print();

}


当按到键盘不同的按键时,会在串口调试器上反馈不同的结果(1-4)



推荐阅读

史海拾趣

Dino-Lite公司的发展小趣事

Dino-Lite公司自创立之初,就专注于数字显微镜技术的研发与创新。公司研发团队不断探索新技术,将传统显微镜与现代数字技术相结合,成功推出了一系列高性能、易用性强的Dino-Lite数字显微镜产品。这些产品以其高清画质、便捷操作和广泛适用性,迅速赢得了市场的认可。

随着技术的不断进步,Dino-Lite公司不断推出新产品,满足了不同行业对数字显微镜的需求。例如,公司针对医疗领域推出了高分辨率、低光环境下的专业显微镜,为医疗诊断和治疗提供了有力支持;同时,针对教育行业推出了性价比高的入门级产品,让更多的学生和老师能够接触和使用到先进的显微镜技术。

Cristek Interconnects Inc公司的发展小趣事

随着环保意识的日益增强,Cristek Interconnects Inc公司积极响应国家号召,将环保理念融入到企业的生产经营中。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对环保技术的研发力度,推出了一系列环保型电子产品连接器,为行业的可持续发展做出了贡献。

这五个故事只是Cristek Interconnects Inc公司在电子行业发展中的一部分缩影,它们展现了公司在技术创新、质量管理、市场拓展、供应链优化和环保理念践行等方面的努力和成就。这些故事共同构成了Cristek Interconnects Inc公司发展的精彩篇章,也为公司的未来发展奠定了坚实的基础。

CALMIRCO公司的发展小趣事

随着技术实力的不断增强,CALMIRCO公司开始积极拓展国内外市场。公司通过参加国际电子展会、建立海外销售渠道等方式,逐渐将产品推向全球。同时,CALMIRCO公司还注重品牌建设,通过广告宣传、媒体报道等多种渠道提升品牌知名度和美誉度。这些举措使得CALMIRCO公司的产品在市场上获得了广泛认可,公司也因此成为电子行业的佼佼者。

AEM [ American Electronic Materials]公司的发展小趣事

AEM公司起源于美国,其创立之初便致力于电子元器件的研发与生产。在早期,AEM便以其独特的创新理念和先进的技术水平,迅速在电子元器件市场中崭露头角。公司通过不断的技术研发,成功开发出了一系列具有竞争力的电子元器件产品,如高性能的电阻器、电容器等,这些产品广泛应用于通信设备、计算机、消费电子等多个领域。

随着技术的不断进步,AEM逐渐积累了丰富的经验和专业知识,其产品在市场上得到了广泛的认可。同时,AEM还积极拓展海外市场,将产品出口到全球多个国家和地区,进一步提升了公司的国际影响力。

佰宏(BHFUSE)公司的发展小趣事

佰宏公司始终坚持开放合作的理念,与多家知名企业建立了战略合作伙伴关系。例如,与立讯精密、奋达科技等实力企业的合作,不仅为佰宏带来了更多的业务机会,也进一步提升了公司的品牌影响力和市场地位。这些合作不仅带来了经济效益,更为佰宏的长远发展奠定了坚实的基础。

HTC Korea(TAEJIN Technology )公司的发展小趣事

近年来,HTC在VR领域取得了显著的成就。2023年,在美国国际消费性电子展(CES)中,HTC推出了最先进的虚拟实境头戴式显示器VIVE XR Elite,凭借其创新、高规格的设计和巧妙的人体工学设计,赢得了众多国际媒体的赞誉和奖项。此外,HTC还开发了多款VR内容套件和追踪器,为用户提供了更加沉浸式的虚拟体验。这些努力不仅推动了VR产业的发展,也为HTC带来了新的增长点。

问答坊 | AI 解惑

与研祥专家对话,精美大奖等您拿~

具体活动链接地址如下:https://www.eeworld.com.cn/zhuanti/newevoconline/index.asp 好消息! 各位工程师:         大家好!2008年9月17日上午10点到11点30,研祥携蓝宇科技将做客电子工程世界,就嵌入式系统设 ...…

查看全部问答>

中国研制成功新一代“镁基特种电源”,号称全天候电池

中国科学家研制成功具有自主知识产权的新一代电源——镁基特种电源。这种电源不仅可替代锌锰电池、铅酸电池、镉镍电池等传统电源,还能在1500米深海、40000米高空等多种极端状态下正常工作,在工业和国防等领域有着广泛的用途。据新电源研制者、中 ...…

查看全部问答>

keil,如何看debug时候,的idata内容

有memory windows 在address 中输入d:0xf0,发现好像看到的是sfr,而不是高128字节的数据 (因为我已经执行了,所有数据区清零,可是在memory windows看到的依旧是FF???)…

查看全部问答>

SEPIC变换器的电路设计

哪位高人能给一些有关SEPIC变换器的电路设计资料?…

查看全部问答>

eVC 用模拟器如何显示printf的内容

我安装的EVC4+sp4+EVC自带的sdk,好像说要控制台,怎么样才能拥有控制台阿?…

查看全部问答>

选书,请指点一下?

我想学嵌入式,主要用于防盗门系统.但不知道应该选择什么样的书去看!!请指点一下!…

查看全部问答>

深圳市快星半导体电子有限公司是专业生产、开发为一体的企业

深圳市快星半导体电子有限公司是专业生产、开发为一体的企业。产品有全系列贴片(SMD)、直插(DIP),二、三极管、三端稳压管、达林顿管、场效应管、稳压电路、稳压二极管、开关晶体管、可控硅、肖特基、IC集成电路,其产品广泛用于开关电源, ...…

查看全部问答>

测量普通家电电磁辐射

有没有大哥知道测量电磁辐射的电路,模块或者解决方案 …

查看全部问答>

有关upp接收数据的技术问题,急急急!!!!

使用两个DMA接收FPGA的数据,为什么接收到的数据都是从FPGA发的第一个数据开始的????? …

查看全部问答>

有谁做过倒立摆

刚刚学习STM32,准备用它制作一个倒立摆用来对国赛进行准备,有谁知道做倒立摆需要用到的STM32的知识有哪些?比如ADC什么的 …

查看全部问答>