初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2020-8-1
- 在线时间
- 24 小时
|
1金钱
求改写代码使其适用于矩阵键盘原理图 stm32f10 精英版
鄙人刚自学stm32 矩阵键盘代码迷惑了一下午没搞懂 求哪位大佬能改写下面的代码 矩阵键盘原理图下方给出 感激不尽!!
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); // 开启GPIOG时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 设置为上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 时钟50MHz
GPIO_Init(GPIOG,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//D4~D7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOG, &GPIO_InitStructure);
//初始化管脚电平
GPIO_SetBits(GPIOG, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(GPIOG, GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
//-----------------------------------------------------------------
// u8 Key_Scan(void)
//-----------------------------------------------------------------
//
u8 KeyScanS(void)
{
u8 shu=16;
if((GPIO_ReadInputData(GPIOG) & 0x0f) != 0x0f )
{
delay_ms(10);
if((GPIO_ReadInputData(GPIOG) & 0x0f) != 0x0f )
{
GPIO_SetBits(GPIOG, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6);
GPIO_ResetBits(GPIOG, GPIO_Pin_7);
switch(GPIO_ReadInputData(GPIOG) & 0x0f)
{
case 0x07: shu=0; break;
case 0x0b: shu=1; break;
case 0x0d: shu=2; break;
case 0x0e: shu=3; break;
}
GPIO_SetBits(GPIOG, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_7);
GPIO_ResetBits(GPIOG, GPIO_Pin_6);
switch(GPIO_ReadInputData(GPIOG) & 0x0f)
{
case 0x07: shu=4; break;
case 0x0b: shu=5; break;
case 0x0d: shu=6; break;
case 0x0e: shu=7; break;
}
GPIO_SetBits(GPIOG, GPIO_Pin_4 | GPIO_Pin_6| GPIO_Pin_7);
GPIO_ResetBits(GPIOG, GPIO_Pin_5);
switch(GPIO_ReadInputData(GPIOG) & 0x0f)
{
case 0x07: shu=8; break;
case 0x0b: shu=9; break;
case 0x0d: shu=10; break;
case 0x0e: shu=11; break;
}
GPIO_SetBits(GPIOG, GPIO_Pin_7 | GPIO_Pin_5| GPIO_Pin_6);
GPIO_ResetBits(GPIOG, GPIO_Pin_4);
switch(GPIO_ReadInputData(GPIOG) & 0x0f)
{
case 0x07: shu=12; break;
case 0x0b: shu=13; break;
case 0x0d: shu=14; break;
case 0x0e: shu=15; break;
}
GPIO_SetBits(GPIOG, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3);
GPIO_ResetBits(GPIOG, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7);
while(((GPIO_ReadInputData(GPIOG) & 0x0f) != 0x0f));
//return shu;
}
}
return shu;
//return 0;
}
//-----------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------
|
|