“端口扩展”的版本间的差异

来自Labplus盛思维基百科
跳转至: 导航搜索
MicroPython示例
MicroPython示例
第32行: 第32行:
 
from microbit import *
 
from microbit import *
  
def readExtendedPort(pin):   #读端口拓展引脚
+
def extIOInit(pin, mode):
  reg=bytearray([0x00])      #0x00为读输入引脚指令
+
    i2c.write(0x20, bytearray([3]))
  i2c.write(0x20, reg)      
+
    mode_old=i2c.read(0x20, 1)
  dat=i2c.read(0x20, 4)
+
    mode_new = 0
  return (dat[0] & (2**pin))>>pin      #返回的8bit数据对应IO8~IO0状态,0代表低电平,1代表高电平
+
    if mode == 1:
 +
        mode_new = mode_old[0] | (1 << pin)
 +
    elif mode == 0:
 +
        mome_new = mode_old[0] | (~(1 << pin))
 +
    cfg= bytearray([0x03,mode_new])
 +
    i2c.write(0x20, cfg)
  
display.off()
+
def readExtendedIO(pin):
cfg=bytearray([0x03, 0x00])            
+
    reg=bytearray([0])
i2c.write(0x20,cfg)               #配置引脚的配置寄存器0x03,8个IO引脚设为输出模式,从机地址为0x20
+
    i2c.write(0x20, reg)
 +
    dat=i2c.read(0x20, 4)
 +
    return (dat[0] >> pin) & 0x01
  
while True:
+
def writeExtendedIO(pin, output):
  print(readExtendedPort(1))      #读端口1引脚
+
    reg=bytearray([1])
  cfg = bytearray([0x01, 0x00])     
+
     i2c.write(0x20, reg)
  i2c.write(0x20,cfg)             #配置输出引脚寄存器0x01,8个IO引脚设为输出低电平
+
    stat_old=i2c.read(0x20, 3)
  sleep(1000)
+
    stat_new = 0
  cfg = bytearray([0x01, 0xFF])     #配置输出引脚寄存器0x01,8个IO引脚设为输出高电平
+
    if output == 1:
  i2c.write(0x20,cfg)
+
        stat_new = stat_old[0] | (1 << pin)
  sleep(1000)
+
    elif output == 0:
 +
        stat_new = stat_old[0] & (~(1 << pin))
 +
    cfg = bytearray([0x01, stat_new])
 +
    i2c.write(0x20,cfg)
  
  
 +
extIOInit(0,0)  #pin io0 set output mode
 +
extIOInit(1,0)  #pin io1 set output mode
 +
extIOInit(6,1)  #pin io6 set input mode
 +
while True:
 +
    buttonVal = readExtendedIO(6)
 +
    if buttonVal == 0:
 +
        writeExtendedIO(0, 1)
 +
        writeExtendedIO(1, 1)
 +
    elif buttonVal == 1:
 +
        writeExtendedIO(0, 0)
 +
        writeExtendedIO(1, 0)
 +
    sleep(100)
 
</pre>
 
</pre>
  
 
=== 图形化示例 ===
 
=== 图形化示例 ===

2018年3月19日 (一) 17:27的版本

黑色传感器最终版12.20-41.png

概述

当主控的引脚不够用时,可用该模块通过I2C接口拓展I/O口,最大支持8个I/O引脚拓展。

技术参数

  • 工作电压:VCC 3.3-5V
  • I2C数字信号通讯
  • 最大支持8个I/O端口拓展
  • 模块尺寸:24x46x7.5mm

引脚定义

VCC 电源
SDA I2C数据
SCL I2C时钟
GND

使用教程

详细的寄存器操作和指令说明,可查阅芯片手册点击下载


连接示意图

Arduino示例

MicroPython示例

from microbit import *

def extIOInit(pin, mode):
    i2c.write(0x20, bytearray([3]))
    mode_old=i2c.read(0x20, 1)
    mode_new = 0
    if mode == 1:
        mode_new = mode_old[0] | (1 << pin)
    elif mode == 0:
        mome_new = mode_old[0] | (~(1 << pin))
    cfg= bytearray([0x03,mode_new])
    i2c.write(0x20, cfg)

def readExtendedIO(pin):
    reg=bytearray([0])
    i2c.write(0x20, reg)
    dat=i2c.read(0x20, 4)
    return (dat[0] >> pin) & 0x01

def writeExtendedIO(pin, output):
    reg=bytearray([1])
    i2c.write(0x20, reg)
    stat_old=i2c.read(0x20, 3)
    stat_new = 0
    if output == 1:
        stat_new = stat_old[0] | (1 << pin)
    elif output == 0:
        stat_new = stat_old[0] & (~(1 << pin))
    cfg = bytearray([0x01, stat_new])
    i2c.write(0x20,cfg)


extIOInit(0,0)  #pin io0 set output mode
extIOInit(1,0)  #pin io1 set output mode
extIOInit(6,1)  #pin io6 set input mode
while True:
    buttonVal = readExtendedIO(6)
    if buttonVal == 0:
        writeExtendedIO(0, 1)
        writeExtendedIO(1, 1)
    elif buttonVal == 1:
        writeExtendedIO(0, 0)
        writeExtendedIO(1, 0)
    sleep(100)

图形化示例