import time
from machine import Pin
# 仿真启动等待,避免初始化异常
time.sleep(0.1)
print("===== 程序启动成功!接线引脚100%匹配 =====")
# ========== 1. 严格匹配你接线的LED引脚初始化 ==========
# 红色LED:正极接GP13,负极接GND
led_red = Pin(13, Pin.OUT, value=0)
# 蓝色LED:正极接GP2,负极接GND
led_blue = Pin(2, Pin.OUT, value=0)
# ========== 2. 严格匹配你接线的按键引脚初始化 ==========
# 红色按键:一端接GP16,一端接GND,开启内部上拉电阻
key_red = Pin(16, Pin.IN, Pin.PULL_UP)
# 蓝色按键:一端接GP28,一端接3V3,开启内部下拉电阻
key_blue = Pin(28, Pin.IN, Pin.PULL_DOWN)
# ========== 3. 按键消抖全局变量 ==========
last_red_time = 0
last_blue_time = 0
DEBOUNCE_MS = 200 # 200ms消抖,避免误触发
# ========== 4. 中断服务函数 ==========
# 红色按键中断:按下按键电平从高变低,下降沿触发
def irq_red_handler(pin):
global last_red_time
current_time = time.ticks_ms()
# 消抖判断,只有间隔超过200ms才响应
if time.ticks_diff(current_time, last_red_time) > DEBOUNCE_MS:
led_red.toggle() # 翻转红灯亮灭状态
print(f"✅ 红色按键按下!红灯状态已翻转,当前电平:{key_red.value()}")
last_red_time = current_time
# 蓝色按键中断:按下按键电平从低变高,上升沿触发
def irq_blue_handler(pin):
global last_blue_time
current_time = time.ticks_ms()
if time.ticks_diff(current_time, last_blue_time) > DEBOUNCE_MS:
led_blue.toggle() # 翻转蓝灯亮灭状态
print(f"✅ 蓝色按键按下!蓝灯状态已翻转,当前电平:{key_blue.value()}")
last_blue_time = current_time
# ========== 5. 绑定中断(完全符合作业要求的触发方式) ==========
key_red.irq(trigger=Pin.IRQ_FALLING, handler=irq_red_handler)
key_blue.irq(trigger=Pin.IRQ_RISING, handler=irq_blue_handler)
# ========== 6. 主循环(保持程序运行,持续响应中断) ==========
print("===== 等待按键按下 =====")
while True:
# 循环里只做低功耗延时,不阻塞中断
time.sleep_ms(100)