一:开个头
之前学52的时候学过矩阵按键的程序,但是当我第一次拿到32板子写程序的时候还是有一点懵,不过还来理理思路,感觉想一想还是可以写出来的,我这次是没有自己去焊矩阵按键,而是买了一个薄膜按键,省去了焊接的麻烦//手动狗头//
二:操作实物图
![](https://img-blog.csdnimg.cn/20200130181311709.png)
就是这个啦!!!应该可以看出来黄色的线连着的是矩阵按键的行,橙色线连着的事矩阵按键的列,下面解释的时候我会用行和列来说
三:程序思路
1、首先一个大思路,我们用矩阵按键的时候,首先是先确定哪一行,接着是哪一列
(1)我让行作输出,并输出低电平,列作输入,并读取电平,当有按键按下的时候就会有电平变化–>这个是用来判断是哪一行
void KEY_L_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);
// RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE);
//列
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//输入上拉
GPIO_InitStructure.GPIO_Pin=KEY_L0_GPIO_PIN|KEY_L1_GPIO_PIN|KEY_L2_GPIO_PIN|KEY_L3_GPIO_PIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//行
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=KEY_R0_GPIO_PIN|KEY_R1_GPIO_PIN|KEY_R2_GPIO_PIN|KEY_R3_GPIO_PIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA,KEY_R0_GPIO_PIN|KEY_R1_GPIO_PIN|KEY_R2_GPIO_PIN|KEY_R3_GPIO_PIN);
}
(2)下面确定哪一列,因为我们刚刚确定了哪一行,只要确定哪一列,就可以找出按下的位置,这次思路是让列输出并输出高电平,让行作输入并读取电平变化
void KEY_R_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);
// RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE); //列
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=KEY_L0_GPIO_PIN|KEY_L1_GPIO_PIN|KEY_L2_GPIO_PIN|KEY_L3_GPIO_PIN;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,KEY_L0_GPIO_PIN|KEY_L1_GPIO_PIN|KEY_L2_GPIO_PIN|KEY_L3_GPIO_PIN);
//行
GPI