1. 程式人生 > >STM32筆記(二)(暫存器)——矩陣鍵盤

STM32筆記(二)(暫存器)——矩陣鍵盤

      矩陣鍵盤是我第一個需要動手焊接東西的實驗,是3*3的鍵盤,焊了一個下午。因為是第一次焊東西,有多處不足,但最後也勉強能用。鍵盤的電路是組長設計的,希望下一次我能自己獨立設計電路。

鍵盤外觀

正面

背面 

 外觀略顯粗糙。。。。

主要程式碼 

      矩陣鍵盤最主要的一部分程式碼就是按鍵掃描部分,通過一個掃描函式對高低電平進行判斷,從而確定按鍵的位置。用過串列埠輸出案件編號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()是掃描函式。

實驗結果