标题:
STM32 4X4矩形键盘代码
[打印本页]
作者:
LHM
时间:
2019-7-25 09:58
标题:
STM32 4X4矩形键盘代码
有空做了一个4X4的矩阵键盘
单片机源程序如下:
#include "key.h"
#include "Systick.h"
uint8_t Key_Number=0,column=0;
//行做输出低电平,列读取电平
void KEY_L_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APBxPeriphClockCmd (RCC_APB2Periph_GPIOx,ENABLE);
//列
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Pin=KEY_L0_GPIO_PIN;
GPIO_Init(KEY_L0_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_L1_GPIO_PIN;
GPIO_Init(KEY_L1_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_L2_GPIO_PIN;
GPIO_Init(KEY_L2_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_L3_GPIO_PIN;
GPIO_Init(KEY_L3_PORN,&GPIO_InitStructure);
//行
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=KEY_R0_PIN;
GPIO_Init(KEY_R0_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_R1_PIN;
GPIO_Init(KEY_R1_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_R2_PIN;
GPIO_Init(KEY_R2_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_R3_PIN;
GPIO_Init(KEY_R3_PORN,&GPIO_InitStructure);
}
//列做输出高电平,行读取电平
void KEY_R_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APBxPeriphClockCmd (RCC_APB2Periph_GPIOx,ENABLE);
//列
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=KEY_L0_GPIO_PIN;
GPIO_Init(KEY_L0_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_L1_GPIO_PIN;
GPIO_Init(KEY_L1_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_L2_GPIO_PIN;
GPIO_Init(KEY_L2_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_L3_GPIO_PIN;
GPIO_Init(KEY_L3_PORN,&GPIO_InitStructure);
//行
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Pin=KEY_R0_PIN;
GPIO_Init(KEY_R0_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_R1_PIN;
GPIO_Init(KEY_R1_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_R2_PIN;
GPIO_Init(KEY_R2_PORN,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=KEY_R3_PIN;
GPIO_Init(KEY_R3_PORN,&GPIO_InitStructure);
}
void Keyboard_Scanning (void)
{
KEY_L_Init(); //行做输出低电平,列读取电平
L_KEY_R0; //各行输出低电平
L_KEY_R1;
L_KEY_R2;
L_KEY_R3;
if(KEY_L0==0)column=1; //如果第一列读到低电平
if(KEY_L1==0)column=2; //如果第二列读到低电平
if(KEY_L2==0)column=3; //如果第三列读到低电平
if(KEY_L3==0)column=4; //如果第四列读到低电平
if(column==1) //如果第一列读到低电平
{
KEY_R_Init(); //列做输出高电平,行读取电平
H_KEY_L0; //第一列输出高电平
SysTick_Delay_us(5);
if(KEY_R0==1)Key_Number=1; //第一行
if(KEY_R1==1)Key_Number=2; //第二行
if(KEY_R2==1)Key_Number=3; //第三行
if(KEY_R3==1)Key_Number=4; //第四行
}
if(column==2) //如果第二列读到低电平
{
KEY_R_Init();
H_KEY_L1; //第二列输出高电平
SysTick_Delay_us(5);
if(KEY_R0==1)Key_Number=5;
if(KEY_R1==1)Key_Number=6;
if(KEY_R2==1)Key_Number=7;
if(KEY_R3==1)Key_Number=8;
}
if(column==3) //如果第三列读到低电平
{
KEY_R_Init();
H_KEY_L2; //第三列输出高电平
SysTick_Delay_us(5);
if(KEY_R0==1)Key_Number=9;
if(KEY_R1==1)Key_Number=10;
if(KEY_R2==1)Key_Number=11;
if(KEY_R3==1)Key_Number=12;
}
if(column==4) //如果第四列读到低电平
{
KEY_R_Init();
H_KEY_L3; //第四列输出高电平
SysTick_Delay_us(5);
if(KEY_R0==1)Key_Number=13;
if(KEY_R1==1)Key_Number=14;
if(KEY_R2==1)Key_Number=15;
if(KEY_R3==1)Key_Number=16;
}
column=0; //列标记清零
}
复制代码
所有资料51hei提供下载:
4x4矩形键盘.7z
(182.31 KB, 下载次数: 22)
2019-7-25 16:35 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-7-25 16:35
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1