接上一篇,我们已经下载安装IDE并烧录镜像,前期工作已经完成,我们可以尝试以下基础功能。
LED蓝灯闪烁
'''
实验名称:LED蓝灯闪烁
版本:v1.0
作者:gotit123
实验平台:01科技 CanMV K230
社区:wiki.01studio.cc
'''
from machine import Pin #导入Pin模块
from machine import FPIOA
import time
fpioa = FPIOA()
fpioa.set_function(52,FPIOA.GPIO52)
LED=Pin(52,Pin.OUT) #构建led对象,GPIO52,输出
while True:
LED.value(1) #点亮LED,也可以使用led.on()
time.sleep(1)
LED.value(0)
time.sleep(1)
知识储备:
-
LED蓝灯连接CanMV K230的IO引脚如下(可以看开发板原理图),LED蓝灯对应的GPIO为IO52,从电路可以看到当IO52为高电平时,蓝灯被点亮,等待n秒再次点亮,形成了闪烁。
大部分GPIO引脚会复用多个功能,因此CanMV K230 提供FPIOA库(Field Programmable Input and Output Array 现场可编程IO阵列)。
-
K230的GPIO,也就是常用的I/O(输入输出引脚)、UART(串口)、I2C、SPI、PWM、ADC等功能。能实现各类单片机的GPIO功能,
GPIO引脚图
按键实验
'''
实验名称:按键
版本:v1.0
作者:gotit123
实验平台:01Studio CanMV K230
说明:通过按键改变LED的亮灭状态
'''
from machine import Pin
from machine import FPIOA
import time
#将GPIO52、GPIO21配置为普通GPIO模式
fpioa = FPIOA()
fpioa.set_function(52,FPIOA.GPIO52)
fpioa.set_function(21,FPIOA.GPIO21)
LED=Pin(52,Pin.OUT) #构建LED对象,开始熄灭
KEY=Pin(21,Pin.IN,Pin.PULL_UP) #构建KEY对象
state=0 #LED引脚状态
while True:
if KEY.value()==0: #按键被按下
time.sleep_ms(10) #消除抖动
if KEY.value()==0: #确认按键被按下
state=not state #使用not语句而非~语句
LED.value(state) #LED状态翻转
print('KEY')
while not KEY.value(): #检测按键是否松开
pass
实验结果:
实操图片
知识储备
1.CanMV K230的原理图:
有图可知,按键KEY的一端连接到K230的引脚21,另一端连接到GND。所以按键在没按下时候输入高电平(1),按下时候输入低电平(0)。
2.使用延时程序销抖
消抖延时time模块使用方法
import time
time.sleep(1) # 睡眠1秒
time.sleep_ms(500) # 睡眠500毫秒
time.sleep_us(10) # 睡眠10微妙
start = time.ticks_ms() # 获取毫秒计时器开始值
delta = time.ticks_diff(time.ticks_ms(), start) # 计算从上电开始到当前时间的差值```
常用的方法就是当检测按键值为0时,延时一段时间,大约10ms,再判断按键引脚值仍然是0,是的话说明按键被按下。
如果按住不动呢,以下程序检测,并处理。
while not KEY.value(): #检测按键是否松开
pass
定时器实验
'''
实验名称:定时器
版本:v1.0
作者:01Studio
实验平台:01Studio CanMV K230
说明:通过定时器让LED周期性每秒闪烁1次。
'''
from machine import Pin,Timer
import time
led=Pin(52,Pin.OUT)
Counter = 0
Fun_Num = 0
def fun(tim):
global Counter
Counter = Counter + 1
print(Counter)
led.value(Counter%2)
#使用软件定时器,编号-1
tim = Timer(-1)
tim.init(period=1000, mode=Timer.PERIODIC,callback=fun) #周期为1000ms
while True:
time.sleep(0.01) #避免CPU满跑
串口显示:
实操截图
知识储备
1.代码编程流程图
Timer对象
构造函数
tim = machine.Timer(id)
定时器对象Timer位于machine模块下。
id :定时器编号。(目前只支持软件定时器)
-1 :表示软件定时器。
使用方法
tim.init(mode, freq, period, callback)
定时器初始化。
mode :定时模式。
Timer.ONE_SHOT :只执行一次。
Timer.PERIODIC :周期性执行。
freq :定时器频率,单位Hz,上限取决于IO口,当freq和period同时给出时freq有更高优先级,period会被屏蔽。
period :定时器周期,单位ms。
callback :定时器中断后回调函数。
Timer.deinit()
注销定时器。