高中生
最后登录1970-1-1
在线时间 小时
注册时间2019-5-5
|
[mw_shl_code=c,true]#include "stm32f10x.h"
#include "key.h"
#include "delay.h"
//////////////////////
u32 Keycode;
u32 KEY_Trg;
u32 KEY_Cont=0;
//////////////////////
/**
* @brief 初始化GPIOB的引脚11到15,分别对应按键1到5
* @param 无
* @retval 无
*/
void KEY_Init(void)
{
GPIO_InitTypeDef GPIOStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB
GPIOStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIOStructure.GPIO_Pin =GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //KEY1-5用到的GPIO口为GPIOB11-15
GPIOStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIOStructure);
}
static uint32_t Change_GPIOCode(void)
{
u32 GPIO_Data;
GPIO_Data=(((GPIOB->IDR)>>11)&0xffff)|(~(KEY1BIT+KEY2BIT+KEY3BIT+KEY4BIT+KEY5BIT));
return GPIO_Data;
}
unsigned char KEY_Read(void)
{
u32 ReadData = Change_GPIOCode()^0XFFFFFFFF; // 异或后,ReadData的位5-31均为0,
KEY_Trg = ReadData & (ReadData ^ KEY_Cont); // 2
KEY_Cont = ReadData;
if(KEY_Cont)
{
delay_ms(10);
ReadData = Change_GPIOCode()^0XFFFFFFFF; // 1
KEY_Trg = ReadData & (ReadData ^ KEY_Cont); // 2
KEY_Cont = ReadData;
if(KEY_Cont)
{
switch(KEY_Cont)
{
case K_1:{Keycode = K_1_S; break;}
case K_2:{Keycode = K_2_S; break;}
case K_3:{Keycode = K_3_S; break;}
case K_4:{Keycode = K_4_S; break;}
case K_5:{Keycode = K_5_S; break;}
default:{Keycode = K_NO; break;}
}
}
}
return Keycode;
}
void KEY_EXIT(void)
{
if(Keycode != K_NO)
{
Keycode = K_NO;
}
}
[/mw_shl_code]
大佬救救我,unsigned char KEY_Read(void),static uint32_t Change_GPIOCode(void)这两个函数干嘛用的?
(~(KEY1BIT+KEY2BIT+KEY3BIT+KEY4BIT+KEY5BIT))这句代码有什么用,前人没打备注完全看不懂啊。
[mw_shl_code=c,true]#ifndef __key_H
#define __key_H
#include "stm32f10x.h"
#define YES 1
#define NO 0
#define T_10mS ((u32)10)
#define T_1S ((u32)1000)
#define T_330mS ((u32)330)
///////////////////////////////
#define KEY1BIT GPIO_Pin_0
#define KEY2BIT GPIO_Pin_1
#define KEY3BIT GPIO_Pin_2
#define KEY4BIT GPIO_Pin_3
#define KEY5BIT GPIO_Pin_4
////////原始码值///////////////
#define K_1 KEY1BIT
#define K_2 KEY2BIT
#define K_3 KEY3BIT
#define K_4 KEY4BIT
#define K_5 KEY5BIT
//////////////////////////////
////////码值重映射////////////
#define K_1_S 0X01
#define K_2_S 0X02
#define K_3_S 0X03
#define K_4_S 0X04
#define K_5_S 0X05
#define K_1_L 0X0B
#define K_2_L 0X0C
#define K_3_L 0X0D
#define K_4_L 0X0E
#define K_5_L 0X0F
#define K_NO 0X00000000
///////////////////////////////////
extern u32 KEY_Trg;
extern u32 KEY_Cont;
extern u32 Keycode;
void KEY_Init(void);
unsigned char KEY_Read(void);
void KEY_EXIT(void);
#endif
[/mw_shl_code]
|
|