一、目的
这一节我们来学习如何使用合宙ESP32 C3,连接0.96寸ssd1306屏幕、4x4 矩阵按键模块,进行两个小实验的演示。
二、环境
ESP32 C3开发板(MicroPython v1.19.1 on 2022-06-18)+ I2C 0.96寸ssd1306屏幕模块+ 4x4 矩阵按键模块 + 几根杜邦线 + Win10商业版
ESP32 C3和各个模块接线方法:
三、示例代码1
演示将按下的按键名字显示在屏幕上
from machine import Pin,I2C
from ssd1306 import SSD1306_I2C
from ufont import BMFont
import time
# 创建I2C对象
i2c = I2C(0,scl = Pin(5),sda = Pin(4),freq = 400_000)
# 创建oled屏幕对象
oled = SSD1306_I2C(128,64,i2c,0x3c)
# 定义字库文件
font = BMFont("fonts/unifont-14-12888-16.v3.bmf")
# 创建led对象
led = Pin(12,Pin.OUT) # 板载led D4
# 行定义
R1 = Pin( 2,Pin.OUT)
R2 = Pin( 3,Pin.OUT)
R3 = Pin(10,Pin.OUT)
R4 = Pin( 6,Pin.OUT)
# 列第一
C1 = Pin( 7,Pin.IN,Pin.PULL_UP)
C2 = Pin( 8,Pin.IN,Pin.PULL_UP)
C3 = Pin(18,Pin.IN,Pin.PULL_UP)
C4 = Pin(19,Pin.IN,Pin.PULL_UP)
# 创建按键函数
def Key():
# R1.value(0)
# R2.value(1)
# R3.value(1)
# R4.value(1)
key = 0
bzw = 0
# 第一行
[R1.value(0),R2.value(1),R3.value(1),R4.value(1)]
if(C1.value() == 0 or C2.value() == 0 or C3.value() == 0 or C4.value() == 0):
time.sleep(0.020)
if C1.value() == 0:
bzw = 1
key = 0
while not C1.value():
None
elif C2.value() == 0:
bzw = 1
key = 1
while not C2.value():
None
elif C3.value() == 0:
bzw = 1
key = 2
while not C3.value():
None
elif C4.value() == 0:
bzw = 1
key = 3
while not C4.value():
None
else:
key = 0
bzw = 0
R1.value(1)
# 第二行
[R1.value(1),R2.value(0),R3.value(1),R4.value(1)]
if(C1.value() == 0 or C2.value() == 0 or C3.value() == 0 or C4.value() == 0):
time.sleep(0.020)
if C1.value() == 0:
bzw = 1
key = 4
while not C1.value():
None
elif C2.value() == 0:
bzw = 1
key = 5
while not C2.value():
None
elif C3.value() == 0:
bzw = 1
key = 6
while not C3.value():
None
elif C4.value() == 0:
bzw = 1
key = 7
while not C4.value():
None
else:
key = 0
bzw = 0
R1.value(1)
# 第三行
[R1.value(1),R2.value(1),R3.value(0),R4.value(1)]
if(C1.value() == 0 or C2.value() == 0 or C3.value() == 0 or C4.value() == 0):
time.sleep(0.020)
if C1.value() == 0:
bzw = 1
key = 8
while not C1.value():
None
elif C2.value() == 0:
bzw = 1
key = 9
while not C2.value():
None
elif C3.value() == 0:
bzw = 1
key = 10
while not C3.value():
None
elif C4.value() == 0:
bzw = 1
key = 11
while not C4.value():
None
else:
key = 0
bzw = 0
R1.value(1)
# 第四行
[R1.value(1),R2.value(1),R3.value(1),R4.value(0)]
if(C1.value() == 0 or C2.value() == 0 or C3.value() == 0 or C4.value() == 0):
time.sleep(0.020)
if C1.value() == 0:
bzw = 1
key = 12
while not C1.value():
None
elif C2.value() == 0:
bzw = 1
key = 13
while not C2.value():
None
elif C3.value() == 0:
bzw = 1
key = 14
while not C3.value():
None
elif C4.value() == 0:
bzw = 1
key = 15
while not C4.value():
None
else:
key = 0
bzw = 0
R1.value(1)
if bzw == 1:
bzw = 0
if key == 3:
led.value(not led.value())
print("%d"%key)
font.text(oled,&#