咸鱼ZTMR实例—按键用法
在pyboard上,有一个用户按键。MicroPython已经预先定义好了按键的类,按键可以这样使用:
定义按键
sw = pyb.Switch()
读取按键状态
sw()
定义按键回调函数
sw.callback(lambda:pyb.LED(1).toggle())
禁用按键回调函数
sw.callback(None)
更复杂的使用回调函数(按键后翻转LED3)点击测试按键观看效果
import pyb
sw = pyb.Switch()
pyb.LED(3).on()
def f():
pyb.LED(4).toggle()
sw.callback(f)
当然还可以直接当作GPIO使用:
import pyb from Pin
sw=Pin("X17", Pin.IN, Pin.PULL_UP)
sw()
板载中断按键可以理解成外接按键,用法如下
使用方法
调用外中断模块
from pyb import ExtInt
定义中断
from pyb import Pin, ExtInt
pyb.ExtInt(pin, mode, pull, callback) #定义中断
'''
pin
中断使用的GPIO,可以是pin对象或者已经定义GPIO的名称
mode
ExtInt.IRQ_RISING 上升沿
ExtInt.IRQ_FALLING 下降沿
ExtInt.IRQ_RISING_FALLING 上升下降沿
pull
pyb.Pin.PULL_NONE 无
pyb.Pin.PULL_UP 上拉电阻
pyb.Pin.PULL_DOWN 下拉电阻
callback
回调函数
'''
上升沿, 下降沿:上升沿等于是接通的瞬间给个瞬发信号,相当与通电信号。下降沿等于是断开的瞬间给个瞬发信号,相当与断电信号。
上升沿脉冲相当于你按开关,开关一接通的那一瞬间动作,之后就再也没有输入信号;下降沿脉冲则是一按了开关一松手,开关断开的那一瞬间动作,其他时间都没输入信号。
上下拉电阻:上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理,也是将不确定的信号通过一个电阻钳位在低电平。
上拉是对器件输入电流,下拉是输出电流;强弱只是上拉电阻的阻值不同,没有什么严格区分;对于非集电极(或漏极)开路输出型电路(如普通门电路)提供电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。
callback = lambda e: print("0") #定义按键回调
函数 | 说明 |
---|---|
extint.disable() | 禁止中断 |
extint.enable() | 允许中断 |
extint.line() | 返回中断映射的行号 |
extint.swint() | 软件触发中断 |
ExtInt.regs() | 中断寄存器值 |
案例1 按钮在串口工具输出定义字符
# main.py -- put your code here!
from pyb import Pin #引入引脚
from pyb import ExtInt #引入中断
callback = lambda e: print("xianyu") #定义按键回调触发输出"xianyu"
sw2 = ExtInt(Pin('X18'), ExtInt.IRQ_FALLING, Pin.PULL_UP, callback) #点击中断按键返回xianyu
例程2 按钮控制LED
# main.py -- put your code here!
from pyb import Pin #引入引脚
from pyb import ExtInt,LED #引入中断
#控制LED状态 toggle()翻转LED,状态是开,变为关;原来是关,变为开。
callback = lambda e: LED(2).toggle()
#点击按钮返回
sw2 = ExtInt(Pin('X18'), ExtInt.IRQ_FALLING, Pin.PULL_UP, callback)