新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2024-2-21
- 在线时间
- 4 小时
|
1金钱
#include "stm32f10x.h" // Device header
#include "Delay.h"
uint8_t MatrixKey_determine(void);
void MatrixKey_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
uint8_t MatrixKey_GetValue(void)
{
uint8_t Key;
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
Key = MatrixKey_determine();
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
if(MatrixKey_determine())
{
Key = MatrixKey_determine() + 4;
}
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
if(MatrixKey_determine())
{
Key = MatrixKey_determine() + 8;
}
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
if(MatrixKey_determine())
{
Key = MatrixKey_determine() + 12;
}
return Key;
}
uint8_t MatrixKey_determine(void)
{
uint8_t Key = 0;
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) == 0)
{
Delay_ms(10);
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) == 0){Key = 4;}
}
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) == 0)
{
Delay_ms(10);
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) == 0){Key = 3;}
}
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9) == 0)
{
Delay_ms(10);
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9) == 0){Key = 2;}
}
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0)
{
Delay_ms(10);
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0){Key = 1;}
}
return Key;
}
|
|