一、4*3鍵盤模塊實物分析
說明:
1、橫著4排,豎著3列,加起來共7組,所以對外引出7根線。
2、根據排針終端引腳又可分兩類。即橫排和豎列對應的引腳。
二、代碼編寫構想:
1、使用7個gpio輸入中斷,檢測7個引腳的輸入狀態。
2、當橫排和豎排引腳對應的io引腳,同時處于一致狀態時,即判斷按鍵被按下。
1、gpio初始化....
2、對按鍵中斷的處理
static uint8_t keyval=0;
/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{uint8_t row=0,column=0;if(0!=keyval) return;//橫排四組狀態編號。if(GPIO_Pin==GPIO_PIN_x){row=0x40;//第四排}else if(GPIO_Pin==GPIO_PIN_y){row=0x30;//第三排}else if(GPIO_Pin==GPIO_PIN_z){row=0x20;//第二排}else if(GPIO_Pin==GPIO_PIN_w){row=0x10;//第一排}//豎排三組狀態編號if(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOx,GPIO_PIN_a)){column=0x03;//第三列}else if(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOx,GPIO_PIN_b)){column=0x02;//第二列}else if(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOx,GPIO_PIN_c)){column=0x01;//第一列}if(0!=row&&0!=column){keyval=row|column;//判斷按鍵是否按下的狀態//printf("key val:%02x\r\n",keyval);}
}
//對按鍵按下后的檢測處理與判斷
char get_key_ch(void)
{char ch=0;if(0!=keyval){if(0x11==keyval)ch='1';else if(0x12==keyval) ch='2';else if(0x13==keyval) ch='3';else if(0x21==keyval) ch='4';else if(0x22==keyval) ch='5';else if(0x23==keyval) ch='6';else if(0x31==keyval) ch='7';else if(0x32==keyval) ch='8';else if(0x33==keyval) ch='9';else if(0x41==keyval) ch='*';else if(0x42==keyval) ch='0';else if(0x43==keyval) ch='#';keyval=0;}return ch;
}