新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2024-2-3
- 在线时间
- 5 小时
|
发表于 2024-2-4 23:37:05
|
显示全部楼层
你好大佬,我把您的key和sys复制到我的工程里面
然后我在key.c里面把初始化改为了GPIOB的1和11引脚
然后硬件按键编码里面改为了俩个
if(!KEY0_IN) ktmp|=1<<KB_KEY0;
if(!KEY1_IN) ktmp|=1<<KB_KEY1;
然后把组合按键的宏定义和
if((Cont==(WKUP_ON+KEY0_ON)) && KEY0_PRESSED) { //WKUP+KEY0组合按键(先按下WKUP再按下KEY0)
Get_Key_State(KB_CLR); //复位状态机,防止本按键对其干扰(本按键与状态机有冲突时请调用此句)
return WKUP_PLUSKEY0_PRES;}
注释掉了
然后下面按模式二也只剩return Get_Key();
在key.h里面
端口和编号那里改成了这样
//按键硬件读端口位置
#define KEY0_IN PBin(1) //按键0输入端口
#define KEY1_IN PBin(11) //按键1输入端口
//硬件实体按键编号,键态字KeyS_Type依此顺序按位组合,每BIT位对应一个实体按键
#define KB_KEY0 0
#define KB_KEY1 1
我的主函数是下面这些 编译提示没有错误,但是就是没反应,我的单片机为stm32f103c8t6,我不知道我改动的地方对不对,想请教一下
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "sys.h"
#include "Key.h"
#include "LED.h"
int main(void)
{
/*模块初始化*/
OLED_Init(); //OLED初始化
vu8 key=0;
KEY_Init(); //初始化与按键连接的硬件接口
while (1)
{
key=Read_A_Key(); //得到键值
switch(key)
{
//常规一般按键测试(按下键就起作用):
case KEY_EVENT(KB_KEY0,PRESS_DOWN): //KEY0按下即有效,控制...
OLED_ShowChar(0, 0, 'A', OLED_8X16);
OLED_Update();
break;
case KEY_EVENT(KB_KEY1,PRESS_DOWN): //KEY1按下即有效,控制...
OLED_ShowChar(0, 0, 'B', OLED_8X16);
OLED_Update();
break;
}
}
}
|
|