这个机制可以使编程思路变成比较简单,是一种面向事件的编程思想的体现。
程序实现过程
导入库
import time
from machine import Pin
定义引脚
led25 = Pin(25,Pin.OUT) #定义25引脚为输出,因为板载的LED灯就接在这个引脚上
sw24 = Pin(24,Pin.IN,Pin.PULL_UP) #定义24引脚为输入,因为板载的按钮就接在这个引脚上
定义按钮回调函数
#按钮中断回调函数----用户按按钮时将LED闪一下
def led_toggle(sw24):
led25.value(0)
time.sleep(0.5)
led25.value(1)
这里定义一个中断处理函数,特别要强调的是函数的参数是前面已经定义好的sw24,一定要有参数。如果没有参数,后面定义的中断映射,在调用的时候,会自动向这个函数发送引脚号,以表明是哪个引脚发生的中断,所以如果没有这个参数,运行时就会报错:
定义定时器回调函数
#定时器回调函数----定时事件发生时,软件模拟在这个引脚上“按一下按钮”
def myTimerCB(timer1s):
tempsw= Pin(24, Pin.OUT) # 先将这个输入引脚临时变成输出,才可以在后面对它进行电平设置
tempsw.value(1) # 设置高电平
tempsw.value(0) # 设置低电平
tempsw= Pin(24, Pin.IN, Pin.PULL_UP) # 函数结束时,再将这个引脚设置为输入模式,以便用户可以用手按。
这里需要说明一下,前面“定义引脚”时,已经将24号引脚定义为输入,这里为什么要重新定义为输出呢。因为,经过我实践,程序只能对“输出型”的引脚设置高、低电平。不能对“输入型”引脚设置高、低电平。
在这段函数内部,我们临时将24号引脚设置为输出,然后让LED灯闪一下后,再将24引脚恢复为输入模式,以便用户按的时候有反应。
设置按钮中断和定时器中断
sw24.irq(led_toggle,Pin.IRQ_RISING) # 定义一个按钮中断
timer1s = machine.Timer() # 初始化定时器实例,设置回调函数和时间间隔
timer1s.init(period=6000, mode=machine.Timer.PERIODIC, callback=myTimerCB) # 定义一个时间定时器
Pin.IRQ_RISING 表示的是上升沿,事件发生在从低电平向高电平变化的那会儿,也就是按钮“抬起”的那一瞬间。当然根据需要,你也可以将这里写成IRQ_FALLING表示事件发生在从高电平向低电平转换的瞬间。
我的一个发现:有中断存在MICROPYTHON主程序就不会结束
正常情况下,我们需要在主程序的最后设置一个while True:循环,里面只有一句话time.sleep(1),以避免主程序执行完毕后就直接退出了。但是,在这个程序里,我并没有写这个循环,主程序也没有退出。反复试验了多次后,也还是这样。
因此,我得出结论,只要有中断存在,则主程序就不需要while循环一直“保活”。请大家一起去试一下,如果不是这样,请麻烦告诉我一下。
完整的程序代码
import time
from machine import Pin
led25 = Pin(25,Pin.OUT) #定义25引脚为输出,因为板载的LED灯就接在这个引脚上
sw24 = Pin(24,Pin.IN,Pin.PULL_UP) #定义24引脚为输入,因为板载的按钮就接在这个引脚上
#按钮中断回调函数----用户按按钮时将LED闪一下
def led_toggle(sw24):
led25.value(0)
time.sleep(0.5)
led25.value(1)
#定时器回调函数----定时事件发生时,软件模拟在这个引脚上“按一下按钮”
def myTimerCB(timer1s):
tempsw= Pin(24, Pin.OUT) # 先将这个输入引脚临时变成输出,才可以在后面对它进行电平设置
tempsw.value(1) # 设置高电平
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/3e12d244f8e37775c260eeae33599962.png)
![img](https://img-blog.csdnimg.cn/img_convert/eac3e6761666b4b08a080d6591043e11.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/e51d057f057e3afe1cf8d45889ac98b6.png)
![img](https://img-blog.csdnimg.cn/img_convert/d155091c5eabd2e39b18e60feaa15889.png)
![img](https://img-blog.csdnimg.cn/img_convert/e93c2b4f1d4f983a8f38d7a7d610fce4.png)
![img](https://img-blog.csdnimg.cn/img_convert/f2c57aa994f66612540fc93729eec09b.png)
![](https://img-blog.csdnimg.cn/img_convert/f21e1c889d27deb31e78f42d1834d617.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!