Please help
The following is stmSTM32L476 4x4 matrix keyboard working principle
< div class = "aw - list - img >
< div class = "aw - list - img >
< div class = "aw - list - img >
< div class = "aw - list - img >
Below is my code, please help(happy New Year to everyone)
```c
#include "stm32l476xx.h"
#include "keypad.h"
void Keypad_Init() {
//激活GPIOC 时钟
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOCEN;
// Output
GPIOC->MODER &= ~(GPIO_MODER_MODE0 | GPIO_MODER_MODE1 | GPIO_MODER_MODE2 | GPIO_MODER_MODE3); // 设置00 到 PC 0,1,2,3
GPIOC->MODER |= (GPIO_MODER_MODE0_0 | GPIO_MODER_MODE1_0 | GPIO_MODER_MODE2_0 | GPIO_MODER_MODE3_0); // 设置01 到 PC 0,1,2,3
// Input
GPIOC->MODER &= ~(GPIO_MODER_MODE4 | GPIO_MODER_MODE10 | GPIO_MODER_MODE11 | GPIO_MODER_MODE12); // 设置00到 PC 4,10,11,12
// GPIO Output Type: Output push-pull (0, reset), Output open drain (1)
// Open-drain (need high impendance to avoid the short circuit)
GPIOC->OTYPER |= (GPIO_IDR_ID0 | GPIO_IDR_ID1 | GPIO_IDR_ID2 | GPIO_IDR_ID3); //设置1 到PC 0,1,2,3 选择 open train 模式
}
unsigned char keypad_scan() {
unsigned char row, col;
unsigned char key;
unsigned char keymap[4][4] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
/* 这里我做的是 4x4 键盘
R1 1 2 3 A
R2 4 5 6 B
R3 7 8 9 C
R4 * 0 # D
C1 C2 C3 C4
*/
// 设置 outputmask 为 1111
uint32_t outputMask = GPIO_ODR_OD0 | GPIO_ODR_OD1 | GPIO_ODR_OD2 | GPIO_ODR_OD3;
// 设置 intputmask 为 1111
uint32_t inputMask = GPIO_IDR_ID4 | GPIO_IDR_ID10 | GPIO_IDR_ID11 | GPIO_IDR_ID12;
// output 数组
uint32_t outputArray[4] = { GPIO_ODR_OD0 , GPIO_ODR_OD1 , GPIO_ODR_OD2 , GPIO_ODR_OD3 };
// intput 数组
uint32_t inputArray[4] = { GPIO_IDR_ID4 , GPIO_IDR_ID10 , GPIO_IDR_ID11 , GPIO_IDR_ID12 };
waitms(3); // 延迟
while( (GPIOC->IDR & inputMask) == inputMask) {;} // 等待按键 不确定这样对不对
for(col = 0; col < 4; col++) { // 检测纵列
waitms(3); // 延迟
for(row = 0; row < 4; rol++) { // 检测横排
}
}
}
return 0xFF; //如果没有按键 返回0xFF
}
// 延迟fuction
void waitms(unsigned int ms) {
int i, j;
for(i = 0; i < ms; i++) {
for(j=0; j < 4000; j++);
}
}
```
0 Answer
No answer yet
这家伙很懒,什么都没留下...