CanMV K230开发板体验三、实现基础功能1

接上一篇,我们已经下载安装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)

在这里插入图片描述知识储备:

  1. LED蓝灯连接CanMV K230的IO引脚如下(可以看开发板原理图),LED蓝灯对应的GPIO为IO52,从电路可以看到当IO52为高电平时,蓝灯被点亮,等待n秒再次点亮,形成了闪烁。
    在这里插入图片描述大部分GPIO引脚会复用多个功能,因此CanMV K230 提供FPIOA库(Field Programmable Input and Output Array 现场可编程IO阵列)。

  2. 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.代码编程流程图

Created with Raphaël 2.3.0 导入Timer相关模块 定义回调函数和配置定时器中断方式 当定时器产生中断时候自动执行回调函数

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()

注销定时器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值