k210基础历程及源码

1、按键点亮一个led

  1. maix.GPIO:该模块提供使用 Maix 板上的 GPIO 引脚的功能。GPIO引脚通常用于数字输入和输出操作,例如读取传感器或控制外部设备。

  2. fpioa_manager.fm:该模块可能是FPIOA管理器的一部分,该管理器负责配置电路板上物理引脚与其各自功能(例如,UART、SPI、I2C、GPIO)

from maix import GPIO
from fpioa_manager import fm
#初始化IO
LED_B = GPIO(GPIO.GPIO0, GPIO.OUT)
KEY = GPIO(GPIO.GPIO1, GPIO.IN)
while True:

    if KEY.value()==0: #按键被按下接地
        LED_B.value(0) #点亮LED,蓝灯
    else:
        LED_B.value(1) #熄灭LED
# 2、外部中断:

```python
from maix import GPIO
from fpioa_manager import fm
import utime

#注册IO,注意高速GPIO口才有中断
fm.register(35, fm.fpioa.GPIO0)
fm.register(16, fm.fpioa.GPIOHS0)

#构建lED和KEY对象
LED_B=GPIO(GPIO.GPIO0,GPIO.OUT,value=1)
KEY=GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)

#LED状态表示
state = 1

#中断回调函数
def fun(KEY):
 global state
 utime.sleep_ms(10) #消除抖动
 if KEY.value()==0: #确认按键被按下
     state = not state
     LED_B.value(state)

#开启中断,下降沿触发
KEY.irq(fun, GPIO.IRQ_FALLING)

3、定时器:

from maix import GPIO
from fpioa_manager import fm
from machine import Timer

#注册IO和构建LED对象
fm.register(35, fm.fpioa.GPIO0)
LED_B = GPIO(GPIO.GPIO0, GPIO.OUT)

#计数变量
Counter=0

#定时器回调函数
def fun(tim):
    global Counter
    Counter = Counter + 1
    print(Counter)
    LED_B.value(Counter%2)#LED循环亮灭。

#定时器0初始化,周期1秒
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1000, callback=fun)

`

  1. Timer.TIMER0:指定要使用的硬件计时器。在本例中,它是 TIMER0,表示微控制器上第一个可用的硬件定时器。

  2. Timer.CHANNEL0:指定要使用的计时器通道。一些定时器具有多个可以独立运行的通道。这里,CHANNEL0表示计时器的第一个通道。

  3. mode=Timer.MODE_PERIODIC:此参数设置定时器的模式。在本例中,它配置为定期操作,这意味着它将以参数指定的定期间隔重复触发事件。period

  4. period=1000:此参数设置计时器的周期(以毫秒为单位)。在您的示例中,它设置为 1000 毫秒或 1 秒。这意味着计时器将每 1 秒触发一次其回调函数 ()。fun

  5. callback=fun:此参数指定计时器触发事件时要调用的函数。每次计时器到期时都会调用该函数。fun

因此,总的来说,这行代码初始化了计时器 0,通道 0 以周期为 1 秒进行周期,并指定了每次计时器到期时要调用的回调函数。`fun``

4、PWM(蜂鸣器):

from machine import Timer,PWM
import time

#PWM通过定时器配置,接到IO9引脚
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
beep = PWM(tim, freq=1, duty=50, pin=9)

#循环发出不同频率响声。
while True:
    beep.freq(200)
    time.sleep(1)

    beep.freq(400)
    time.sleep(1)

    beep.freq(600)
    time.sleep(1)

    beep.freq(800)
    time.sleep(1)

    beep.freq(1000)
    time.sleep(1)
  • tim:指定将用于生成PWM信号的定时器对象()。在本例中,它是我们之前初始化的计时器对象。Timer``tim

  • freq=1:以赫兹 (Hz) 为单位设置 PWM 信号的频率。在这里,它被设置为 1 Hz,这意味着 PWM 信号的频率为每秒 1 个周期。

  • duty=50:将PWM信号的占空比设置为百分比。在本例中,它设置为 50%,这意味着信号将在 50% 的时间内为高电平,其余 50% 的时间为低电平。

  • pin=9:指定输出PWM信号的引脚编号。在本例中,它是引脚 9。

5、串口通信:

from machine import UART,Timer
from fpioa_manager import fm

#映射串口引脚
fm.register(6, fm.fpioa.UART1_RX, force=True)
fm.register(7, fm.fpioa.UART1_TX, force=True)

#初始化串口
uart = UART(UART.UART1, 115200, read_buf_len=4096)
uart.write('Hello 01Studio!')


while True:

    text=uart.read() #读取数据

    if text: #如果读取到了数据
        print(text.decode('utf-8')) #REPL打印
        uart.write('I got'+text.decode('utf-8')) #数据回传

此代码在微控制器的 UART1 上建立 UART 通信,并持续侦听传入数据。让我们分解代码的每个部分:

python

#映射串口引脚 
fm.register(6, fm.fpioa.UART1_RX, force=True) 
fm.register(7, fm.fpioa.UART1_TX, force=True)

这些线路配置用于 UART1 通信的引脚。引脚 6 配置为 UART1 RX(接收),引脚 7 配置为 UART1 TX(发送)。

python

#初始化串口 
uart = UART(UART.UART1, 115200, read_buf_len=4096)
uart.write('Hello 01Studio!')`

这部分初始化 UART 通信。

  • UART.UART1:指定 UART1 将用于通信。
  • 115200:将波特率设置为每秒 115200 位。
  • read_buf_len=4096:将读取缓冲区的长度设置为 4096 字节。

初始化UART通信后,它将“Hello 01Studio!”写入UART1 TX引脚。

while True:  
    text=uart.read() #读取数据     
        if text: #如果读取到了数据         
        print(text.decode('utf-8')) #REPL打印         uart.write('I got'+text.decode('utf-8')) #数据回传`

这部分持续侦听传入数据:

  • text=uart.read():从 UART 读取数据。如果有可用的数据,则将其存储在变量中。text
  • if text::检查是否已接收数据。
  • print(text.decode('utf-8')):以 UTF-8 编码打印接收到的数据。
  • uart.write('I got'+text.decode('utf-8')):通过 UART1 发送回响应,确认已收到数据。

6、线程:

import _thread #导入线程模块
import time

#线程函数
def func(name):
    while True:
        print("hello {}".format(name))
        time.sleep(1)
_thread.start_new_thread(func,("1",)) #开启线程1,参数必须是元组
_thread.start_new_thread(func,("2",)) #开启线程2,参数必须是元组

while True:
    pass
  • 这定义了一个名为的函数,该函数将名称作为参数。在函数内部,它运行一个无限循环,打印“hello”,然后打印提供的名称,然后使用 休眠 1 秒钟。func``time.sleep(1)

  • 这些行同时启动两个线程。

    • _thread.start_new_thread(func, ("1",))在新线程中使用参数启动函数。func``"1"

    • _thread.start_new_thread(func, ("2",))在新线程中使用参数启动函数的另一个实例。func``"2"

因此,总的来说,此代码创建了两个并发运行该函数的线程,每个线程具有不同的名称参数,然后主线程无限期地保持活动状态。func

7、lcd显示屏:

import lcd,image,utime

lcd.init() #初始化LCD
lcd.clear(lcd.WHITE) #清屏白色

#显示字符
lcd.draw_string(110, 120, "Hello 01Studio!",lcd.BLACK, lcd.WHITE) #显示字符

utime.sleep(3) #延时2秒

lcd.rotation(1) #由于图像默认是240*320,因此顺时钟旋转90°。

#显示图像,必须先将01Studio.bmp文件发送到开发板才能正常运行
#发送方法:IDE菜单栏 -- 工具 --保存文件到开发板
lcd.display(image.Image("01Studio.bmp"))
  • lcd:这可能是指提供控制显示方法的 LCD 对象或实例。

  • .rotation(1):此方法调用设置显示器的旋转。参数通常表示顺时针旋转 90 度。1

9、电阻触摸屏:

from machine import I2C
from fpioa_manager import fm
from maix import GPIO
import lcd, image
import touchscreen as ts

#按键KEY用于清屏
fm.register(16, fm.fpioa.GPIO1, force=True)
btn_clear = GPIO(GPIO.GPIO1, GPIO.IN)

#触摸使用I2C控制(NS2009)
i2c = I2C(I2C.I2C0, freq=400000, scl=30, sda=31)

#触摸屏初始化
ts.init(i2c)
#ts.calibrate() #触摸校准

#LCD初始化
lcd.init()
lcd.clear()

#新建图像和触摸屏相关参数变量
img = image.Image()
status_last = ts.STATUS_IDLE
x_last = 0
y_last = 0
draw = False

while True:

    #获取触摸屏状态
    (status,x,y) = ts.read()
    print(status, x, y)

    #画图
    if draw:
        img.draw_line((x_last, y_last, x, y))

    #更新最后坐标
    x_last = x
    y_last = y

    #根据触摸屏状态判断是否继续执行画图功能
    if status_last!=status:
        if (status==ts.STATUS_PRESS or status == ts.STATUS_MOVE):
            draw = True
        else: #松开
            draw = False
        status_last = status

    #LCD显示
    lcd.display(img)

    #按键KEY按下清屏
    if btn_clear.value() == 0:
        img.clear()
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

week_泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值