欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32笔记(二)(寄存器)——矩阵键盘

程序员文章站 2022-04-01 21:55:43
...

      矩阵键盘是我第一个需要动手焊接东西的实验,是3*3的键盘,焊了一个下午。因为是第一次焊东西,有多处不足,但最后也勉强能用。键盘的电路是组长设计的,希望下一次我能自己独立设计电路。

键盘外观

正面

STM32笔记(二)(寄存器)——矩阵键盘

背面 

                 

STM32笔记(二)(寄存器)——矩阵键盘

      

 外观略显粗糙。。。。

主要代码 

      矩阵键盘最主要的一部分代码就是按键扫描部分,通过一个扫描函数对高低电平进行判断,从而确定按键的位置。用过串口输出案件编号1~9。

key.c代码

void KEY_Init1(void)
{
	RCC->APB2ENR|=1<<3;     
	
	JTAG_Set(SWD_ENABLE);	
	
	GPIOB->CRL&=0X000FFFFF;	//PB5,6,7
	GPIOB->CRL|=0X33300000;  
	
	
	GPIOB->CRH&=0XFFFFF000;	//PB8,9,10
	GPIOB->CRH|=0X00000888; 
	

	GPIOB->ODR|=1<<5;	   	
	GPIOB->ODR|=1<<6;	   
	GPIOB->ODR|=1<<7;	   
	  
		KEY1=1;
		KEY2=1;
		KEY3=1;
} 


void KEY_Init2(void)
{
	
		
	GPIOB->CRL&=0X000FFFFF;	//PB5,6,7
	GPIOB->CRL|=0X88800000;  

	GPIOB->CRH&=0XFFFFF000;	//PB8,9,10 
	GPIOB->CRH|=0X00000333;

	GPIOB->ODR|=1<<8;	   
	GPIOB->ODR|=1<<9;	   	
	GPIOB->ODR|=1<<10;		
	

		KEY4=1;
		KEY5=1;
		KEY6=1;	

} 

u8 KEY_Scan(void)
{	
	u8 a=0,b=0;

	KEY_Init1(); 
	

  if(KEY4_in==1||KEY5_in==1||KEY6_in==1)
	{	
		delay_ms(10);
		if(KEY4_in==1) a=1;
		else if(KEY5_in==1) a=2;
		else if(KEY6_in==1) a=3;	
	}
	else  return 0;

	

  GPIOB->ODR &=~(1<<5);
	GPIOB->ODR &=~(1<<6);
	GPIOB->ODR &=~(1<<7);
	KEY_Init2();
		
		delay_ms(10);
		if(KEY1_in==1) b=1;
		else if(KEY2_in==1) b=2;
		else if(KEY3_in==1) b=3;
		else  return 0;
	
	GPIOB->ODR &=~(1<<8);
	GPIOB->ODR &=~(1<<9);
	GPIOB->ODR &=~(1<<10);
	
	KEY_Init1();

	return ((a-1)*3+b);
}

这一部分也是最主要的代码,u8  KEY_Scan()是扫描函数。

实验结果

STM32笔记(二)(寄存器)——矩阵键盘