STM32筆記(二)(暫存器)——矩陣鍵盤
阿新 • • 發佈:2019-02-11
矩陣鍵盤是我第一個需要動手焊接東西的實驗,是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()是掃描函式。