按键模块包含一个 板载的 BOOT0 引脚 和两个 外接的 A1 和 A2 引脚 作为按键输入。按键按下时,GPIO引脚会读取到低电平(0),而未按下时则读取高电平(1)。为了确保稳定的输入信号,本模块采用了BOOT上拉电阻,A1,A2下拉电阻。按键的操作会通过分压电路和开发板GPIO引脚进行处理。
硬件连接电源要求
模块需要通过 3.3V 电源来供电。开发板的 VBUS 引脚输出 1.8V,无法正常识别高电平,因此必须使用 3.3V 电源来保证按键模块能够正常工作。按键引脚
BOOT0:板载引脚,用作按键输入。
A1 和 A2:外接引脚,分别用作蓝色和红色按键输入。
连接方式
按键模块通过分压电阻与开发板GPIO引脚相连接,接线需要按照原理图正确连接。
以下是驱动代码,已更新为支持 BOOT0 和 外接的 A1、A2 引脚:
import time
import board
from digitalio import DigitalInOut, Direction, Pull
# 定义按键值
KEY_NULL = 0
KEY_D0 = 1
KEY_D1 = 2
KEY_D2 = 4
# 定义按键 GPIO 引脚
key0 = DigitalInOut(board.BOOT0) # BOOT0 按键
key1 = DigitalInOut(board.A1) # A1 按键
key2 = DigitalInOut(board.A2) # A2 按键
# 按键初始化
def keyInit():
key0.direction = Direction.INPUT
key0.pull = Pull.UP # BOOT0 使用上拉
key1.direction = Direction.INPUT
key1.pull = Pull.DOWN # A1 使用下拉
key2.direction = Direction.INPUT
key2.pull = Pull.DOWN # A2 使用下拉
# 按键检测
def keyDetect():
key_value = KEY_NULL
if key0.value == 0: # 判断 BOOT0 是否按下
key_value += KEY_D0
if key1.value: # 判断 A1 是否按下
key_value += KEY_D1
if key2.value: # 判断 A2 是否按下
key_value += KEY_D2
return key_value
# 检查按键是否按下
def isKeyPressed():
key_value = keyDetect()
if key_value: # 如果检测到按键被按下
time.sleep(0.01) # 防抖
if key_value == keyDetect(): # 再次确认按键状态
return key_value
return 0 # 没有按键按下
# 主函数:调试检测按键
def main():
keyInit() # 初始化按键
print("开始按键调试,按下按键查看状态...")
while True:
key_value = isKeyPressed() # 获取按键状态
# 打印按键状态
if key_value == KEY_NULL:
print("没有按键按下")
else:
print(f"按下的按键:{key_value}")
time.sleep(0.5) # 每隔0.5秒检查一次
# 启动主函数
main()
引脚连接:确保 BOOT0、A1 和 A2 按键的连接正确。每个按键都通过分压电路与GPIO引脚连接,在按下时通过引脚读取低电平(1),未按下时为高电平(0)。
由于外接按键正负极接反导致无论A1,A2上下拉都是默认输出1,这点错误要避免。
我要赚赏金
