硬汉嵌入式论坛

 找回密码
 立即注册
查看: 521|回复: 1
收起左侧

[GPIO] bsp_key文件使用疑问

[复制链接]

12

主题

38

回帖

74

积分

初级会员

积分
74
发表于 2024-11-28 09:33:08 | 显示全部楼层 |阅读模式
今天在学习硬汉哥的bsp_key的文件时,发现用户手册有部分内容未能理解
KEY_T的结构体中有一个IsKeyDownFunc的函数指针,同时说明文档里也同样说了在初始化里需要对其设置,但是,观察实际代码,并未对函数指针进行操作,同样的在bsp_DetectKey()函数中调用实际为IsKeyDownFunc()的函数

微信图片_20241128092931.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-11-28 15:18:49 | 显示全部楼层
早期是函数指针,现在直接将这个封装成一个API了

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: IsKeyDownFunc
*	功能说明: 判断按键是否按下。单键和组合键区分。单键事件不允许有其他键按下。
*	形    参: 无
*	返 回 值: 返回值1 表示按下(导通),0表示未按下(释放)
*********************************************************************************************************
*/
static uint8_t IsKeyDownFunc(uint8_t _id)
{
	/* 实体单键 */
	if (_id < HARD_KEY_NUM)
	{
		uint8_t i;
		uint8_t count = 0;
		uint8_t save = 255;
		
		/* 判断有几个键按下 */
		for (i = 0; i < HARD_KEY_NUM; i++)
		{
			if (KeyPinActive(i)) 
			{
				count++;
				save = i;
			}
		}
		
		if (count == 1 && save == _id)
		{
			return 1;	/* 只有1个键按下时才有效 */
		}		

		return 0;
	}
	
	/* 组合键 K1K2 */
	if (_id == HARD_KEY_NUM + 0)
	{
		if (KeyPinActive(KID_K1) && KeyPinActive(KID_K2))
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}

	/* 组合键 K2K3 */
	if (_id == HARD_KEY_NUM + 1)
	{
		if (KeyPinActive(KID_K2) && KeyPinActive(KID_K3))
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}

	return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:18 , Processed in 0.038427 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表