1、按键点亮一个led
-
maix.GPIO
:该模块提供使用 Maix 板上的 GPIO 引脚的功能。GPIO引脚通常用于数字输入和输出操作,例如读取传感器或控制外部设备。 -
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)
`
-
Timer.TIMER0
:指定要使用的硬件计时器。在本例中,它是 TIMER0,表示微控制器上第一个可用的硬件定时器。 -
Timer.CHANNEL0
:指定要使用的计时器通道。一些定时器具有多个可以独立运行的通道。这里,CHANNEL0表示计时器的第一个通道。 -
mode=Timer.MODE_PERIODIC
:此参数设置定时器的模式。在本例中,它配置为定期操作,这意味着它将以参数指定的定期间隔重复触发事件。period
-
period=1000
:此参数设置计时器的周期(以毫秒为单位)。在您的示例中,它设置为 1000 毫秒或 1 秒。这意味着计时器将每 1 秒触发一次其回调函数 ()。fun
-
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()