基于Raspberry Pi 3实现矩阵键盘输入数字并在LCD屏显示的问题求助
解决方案
以下是修改后可实现连续数字输入并显示到2004LCD的完整代码:
#!/usr/bin/python3 import time import sys import signal # 原有的库路径导入保留 sys.path.insert(1,"C:/Users/Administrator/Desktop/Raspberry_Pi/Library/pad4pi-1.1.5") sys.path.insert(2,"C:/Users/Administrator/Desktop/Raspberry_Pi/Library/adafruit-circuitpython-pca9685-3.3.8") sys.path.insert(3,"C:/Users/Administrator/Desktop/Raspberry_Pi/Library/rpi-lcd-0.0.2") from rpi_lcd import LCD from pad4pi import rpi_gpio # 初始化LCD lcd = LCD() # 4x4键盘定义 KEYPAD = [ ["1", "2", "3", "A"], ["4", "5", "6", "B"], ["7", "8", "9", "C"], ["*", "0", "#", "D"] ] ROW_PINS = [4,17,18,27] # BCM编号 COL_PINS = [22,23,24,25] # BCM编号 # 初始化键盘 factory = rpi_gpio.KeypadFactory() keypad = factory.create_keypad(keypad=KEYPAD, row_pins=ROW_PINS, col_pins=COL_PINS) # 输入缓存,存储连续输入的字符 input_buffer = "" def handle_key_press(key): global input_buffer print(f"按下按键: {key}") # 判断按键类型 if key.isdigit(): # 数字按键追加到缓存,最多存20个字符适配LCD单行宽度 if len(input_buffer) < 20: input_buffer += key elif key == "#": # 按下#键清空输入 input_buffer = "" elif key == "*": # 按下*键可自定义确认逻辑,比如提交输入的金额 print(f"确认输入: {input_buffer}") # 这里可以加你自己的业务逻辑 # 更新LCD显示 lcd.clear() lcd.text("当前输入:", 1) lcd.text(input_buffer, 2) # 输入内容显示在第二行 # 注册按键回调 keypad.registerKeyPressHandler(handle_key_press) # 退出信号处理,清理资源 def exit_handler(signum, frame): lcd.clear() keypad.cleanup() print("程序退出") sys.exit(0) signal.signal(signal.SIGINT, exit_handler) # 主循环保持程序运行 if __name__ == "__main__": lcd.text("请输入数字:", 1) while True: time.sleep(0.1)
关键改动说明
- 新增全局
input_buffer变量存储连续输入的数字串,解决原代码只能存储单个按键的问题 - 按键回调函数中区分数字键和功能键,可自定义
#清空、*确认等操作,你可以根据业务需求修改功能键对应的逻辑 - 每次按键触发后自动更新LCD内容,原代码中频繁清屏的逻辑已经移除
- 增加了程序退出时的资源清理逻辑,按下Ctrl+C退出时会自动清屏并释放GPIO资源,避免后续运行出现GPIO占用报错
内容的提问来源于stack exchange,提问作者Dogamo
相关产品推荐
相关产品推荐

