新手入门
- 积分
- 2
- 金钱
- 2
- 注册时间
- 2021-1-22
- 在线时间
- 6 小时
|
#ifndef _KEYBOARD_H
#define _KEYBOARD_H
#include "sys.h"
void KeyBoard_Init(void);//IO初始化
u8 Read_KeyValue(void); //矩阵按键扫描函数
#endif
#include "stm32f10x.h"
#include "keyboard.h"
#include "delay.h"
//按键初始化函数
/*----------------------------------矩阵键盘初始化-------------------------------
*功能 : 初始化STM32单片机 GPIO /PE0~PE7
*参数传递
*输入: 无
*返回值:无
*/
void KeyBoard_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //使能PORTC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //定义PE0~PE3 为推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE 0,1,2,3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE.0
GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(GPIOE,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
u8 Read_KeyValue(void)
{
u8 KeyValue = 0;
if((GPIO_ReadInputData(GPIOE)&0x0f)!=0x0f)
{
delay_ms(10);
if((GPIO_ReadInputData(GPIOE)&0x0f)!=0x0f)
{
GPIO_SetBits(GPIOE,GPIO_Pin_0);
GPIO_ResetBits(GPIOE,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(GPIOE)&0x0f)
{
case 0x11:KeyValue = 1; break;
case 0x21:KeyValue = 5; break;
case 0x41:KeyValue = 9; break;
case 0x81:KeyValue = 13; break;
}
GPIO_SetBits(GPIOE,GPIO_Pin_1);
GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(GPIOE)&0x0f)
{
case 0x12:KeyValue = 2; break;
case 0x22:KeyValue = 6; break;
case 0x42:KeyValue = 10; break;
case 0x82:KeyValue = 14; break;
}
GPIO_SetBits(GPIOE,GPIO_Pin_2);
GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
switch(GPIO_ReadInputData(GPIOE)&0x0f)
{
case 0x14:KeyValue = 3; break;
case 0x24:KeyValue = 7; break;
case 0x44:KeyValue = 11; break;
case 0x84:KeyValue = 15; break;
}
GPIO_SetBits(GPIOE,GPIO_Pin_3);
GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
switch(GPIO_ReadInputData(GPIOE)&0x0f)
{
case 0x18:KeyValue = 4; break;
case 0x28:KeyValue = 8; break;
case 0x48:KeyValue = 12; break;
case 0x88:KeyValue = 16; break;
}
GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(GPIOE,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
while((GPIO_ReadInputData(GPIOE)&0x0f)!=0x0f);
return KeyValue;
}
}
return -1;
}
本人将一个4*4小键盘接到STM32F工控板的PE0~PE7,按下按键时,用串口调试助手监视了一下,没有任何反应,不知道哪里出了问题,希望各位大侠能给与帮助
|
|