1. 键盘的焊接
键盘正面
键盘背面
键盘原理图:
3*3的矩阵键盘共计三行三列,所以共计需要六个阵脚,每一行/每一列连接相应的一个阵脚。
制作注意事项:
要注意开关的四个针脚,了解清楚哪两个针脚之间是连通的。
四角按键开关原理可以参考博客: 四脚按键开关_四脚按键开关引脚图_四脚按键开关接线图_Surferqing_的博客-CSDN博客_四脚按键开关原理图
2. 线路连接
6个针脚分别连接PA2~PA7。
键盘判断原理:
先扫瞄行,而后扫描列。当扫描行时,按下按钮,对应的行的电平就会发生变化,而后再变化端口的状态,扫描列,而后综合行和列的状态得出那个按键被按下。
3. 代码书写
//key.h
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
u8 KEY_Init(void);
#endif
//test.c
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "stm32f10x.h"
u8 key_scan()
{
int i=0,j=0;
RCC->APB2ENR|=1<<2; //使能PORTA时钟(设置时钟时1的位移量时每种时钟是固定的)
GPIOA->CRL&=0X000000FF; //清除之前设置
GPIOA->CRL|=0X33388800; //设置模式(由右往左分别对应着PA0~PA7,且每一位对应着四位配置,故为16进制)
GPIOA->ODR|=1<<2; //引脚PA2(1为上拉输入,0为下拉输入)
GPIOA->ODR|=1<<3; //引脚PA3
GPIOA->ODR|=1<<4; //引脚PA4
PAout(5)=0;//(设置输出电平)
PAout(6)=0;
PAout(7)=0;
if(PAin(2)==0||PAin(3)==0||PAin(4)==0)//检验行
{
delay_ms(10);//防止抖动
if(PAin(2)==0)
i=1;
else if(PAin(3)==0)
i=2;
else if(PAin(4)==0)
i=3;
}
else
return 0;
GPIOA->CRL&=0X000000FF; //清除之前设置
GPIOA->CRL|=0X88833300; //等同之前操作(交换两组端口的输入输出顺序)
GPIOA->ODR|=1<<5; //引脚PA5
GPIOA->ODR|=1<<6; //引脚PA6
GPIOA->ODR|=1<<7; //引脚PA7
PAout(2)=0;//设置输出点平
PAout(3)=0;
PAout(4)=0;
if(PAin(5)==0||PAin(6)==0||PAin(7)==0)//检验列
{
delay_ms(10);//防止抖动
if(PAin(5)==0)
j=1;
else if(PAin(6)==0)
j=2;
else if(PAin(7)==0)
j=3;
}
else
return 0;
if(i==1)
{
if(j==1)
return 1;
if(j==2)
return 4;
if(j==3)
return 7;
}
else if(i==2)
{
if(j==1)
return 2;
if(j==2)
return 5;
if(j==3)
return 8;
}
else if(i==3)
{
if(j==1)
return 3;
if(j==2)
return 6;
if(j==3)
return 9;
}
else
return 0;
}
int main(void)
{
int h=0;
Stm32_Clock_Init(9);//系统时钟初始化
delay_init(72); //延时初始化
uart_init (72,9600); //串口初始化
while(1)//死循环,使系统能够完成多次操作
{
h=key_scan();//获取返回值
switch(h)
{
case 1:
printf("1\r\n"); delay_ms(300); //在对行和列判断完后输出相对应的结果,延时的目的是避免按一次四角开关出现多次结果)
break;
case 2:
printf("2\r\n"); delay_ms(300);
break;
case 3:
printf("3\r\n"); delay_ms(300);
break;
case 4:
printf("4\r\n"); delay_ms(300);
break;
case 5:
printf("5\r\n"); delay_ms(300);
break;
case 6:
printf("6\r\n"); delay_ms(300);
break;
case 7:
printf("7\r\n"); delay_ms(300);
break;
case 8:
printf("8\r\n"); delay_ms(300);
break;
case 9:
printf("9\r\n"); delay_ms(300);
break;
default:
break;
}
}
}
4.结果
文章来源:https://www.toymoban.com/news/detail-510967.html
文章来源地址https://www.toymoban.com/news/detail-510967.html
到了这里,关于STM32学习笔记——3*3矩阵键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!