最近在做一个有关按键的项目,需要用到矩阵键盘,上网找了很多都是基于一些规则接口的程序,感觉无语,因为画PCB由于布线原因
不太可能矩阵键盘的几条线是连接连续的GPIO口,所以经过我自己思考,做出了自己基于STM32的不规则程序,
由于每种矩阵键盘的连接原理有时是不同,所以首先先讲明我的矩阵键盘的连接原理
4条行线初始化时全为1,列线全为0,由于我的列先有接10K的电阻,有按键按下时,被按下的列线为1,
行线一次置为1、0、0、0 ,1,0,0�,0,1,0�,0,0,1
基于STM32L151//STM32F407的矩阵键盘程序(不规则接口):
行接口:PA8,PA12,PB3,PB4
列接口:PA11,PB5,PB9
void KeyPress(void){
int KeyValues;
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)
{
Delay10ms(20);
GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_12);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)
{
KeyValues=10;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)
{
KeyValues=11;
}
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);
/////////////////////////////////////////////
GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
GPIO_SetBits(GPIOA,GPIO_Pin_12);
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)
{
KeyValues=7;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)
{
KeyValues=8;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)
{
KeyValues=9;
}
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);
//////////////////////////////////////////////
GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
GPIO_SetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_12);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)
{
KeyValues=4;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)
{
KeyValues=5;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)
{
KeyValues=6;
}
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);
////////////////////////////////////////////////
GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_SetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_12);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==1)
{
KeyValues=1;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1)
{
KeyValues=2;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)
{
KeyValues=3;
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1);
GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);
GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_12);
}
}
}
\\\\\\\\\\\\\\\\\\\
!!!!上图附有本程序的矩阵键盘原理,与普通矩阵键盘设计不太一样!!!!!!
\\\\\\\\\\\\\\\\\\\
上一篇:STM32F407实现矩阵键盘程序
下一篇:关于STM32F103型号的矩阵按键的程序书写
推荐阅读最新更新时间:2024-03-16 16:26