【Mixly编程新手速成】:独家1602液晶屏时钟计数器制作秘籍
发布时间: 2024-12-21 20:27:02 阅读量: 8 订阅数: 12
![【Mixly编程新手速成】:独家1602液晶屏时钟计数器制作秘籍](https://res.cloudinary.com/rsc/image/upload/b_rgb:FFFFFF,c_pad,dpr_2.625,f_auto,h_214,q_auto,w_380/c_pad,h_214,w_380/R7588605-01?pgw=1)
# 摘要
本论文旨在介绍Mixly编程环境与1602液晶屏的基本操作,并通过时钟计数器的逻辑设计与实践优化,探索其在教育和DIY项目中的应用潜力。首先,本文概述了Mixly编程环境的搭建及其基础编程概念,随后详述了1602液晶屏的工作原理及在Mixly中的操作方法。接着,文章深入探讨了时钟计数器的设计逻辑,包括时间显示和计数功能的实现。实践与优化章节介绍了硬件组装和程序调试,同时提出了用户体验优化的策略。最后,本文讨论了通过学习资源的利用和创新设计思路进一步拓展项目应用的可能性。整体而言,本文旨在为教育者和爱好者提供一套完整的Mixly编程与1602液晶屏操作指南,鼓励创新并推动技术教育的发展。
# 关键字
Mixly编程;1602液晶屏;时钟计数器;硬件组装;用户体验;教育创新
参考资源链接:[Mixly编程1602液晶屏显示的时钟计数器程序图.docx](https://wenku.csdn.net/doc/645aef4795996c03ac2a3dc4?spm=1055.2635.3001.10343)
# 1. Mixly编程与1602液晶屏简介
## 1.1 Mixly编程简介
Mixly是一个基于块的图形化编程环境,它允许用户像操作积木一样组合代码块,从而简化了编程过程。它为那些对传统文本编程不熟悉的初学者和教育工作者提供了一个直观的界面,同时也具备足够的灵活性来满足专业人士的需求。Mixly特别适用于Arduino和ESP8266等硬件平台,通过直观的图形块,用户可以轻松地进行硬件编程和控制。
## 1.2 1602液晶屏简介
1602液晶屏是一种被广泛使用的字符型LCD显示屏,它可以显示16个字符,共2行。这种显示屏以其简洁、清晰的文本输出而受到青睐,非常适合于展示小型文本信息,例如时间、计数值或简单的状态信息。在许多DIY项目和教学中,1602液晶屏是显示输出的首选设备。
# 2. Mixly编程基础
### 2.1 Mixly编程环境搭建
#### 2.1.1 安装Mixly软件
在开始我们的编程之旅之前,首先需要安装Mixly这款优秀的基于Scratch3.0开发的图形化编程环境。Mixly提供了一个简单易用的界面,让编程学习变得直观,特别适合初学者快速上手。
以下是Mixly的安装步骤:
1. 访问Mixly的官方网站或者下载页面。
2. 选择适合您操作系统的版本进行下载。Mixly支持Windows、macOS和Linux操作系统。
3. 下载完成后,运行安装程序。对于Windows用户,双击下载的安装文件并按照向导指示完成安装。对于macOS或Linux用户,可能需要执行特定的安装命令。
4. 安装完成后,找到Mixly快捷方式并启动程序。
安装完成后,您可以在桌面找到Mixly图标,双击启动Mixly主界面。
#### 2.1.2 熟悉Mixly界面和功能模块
启动Mixly之后,我们将看到一个包括多个功能模块的界面。Mixly界面主要分为以下几个部分:
- **代码区域**:这是编程的主要工作区域,所有的编程逻辑都在这里通过拖拽代码块来实现。
- **菜单栏**:包含了项目管理、编辑、查看、帮助等多个选项,可以帮助我们进行项目设置和获得帮助信息。
- **功能块库**:包含了编程中用到的所有功能块,这些功能块按类别分为不同的板块,例如变量、控制、逻辑等。
让我们开始通过一系列的实际操作来熟悉这些功能块。首先,我们可以尝试将“设置变量”和“输出文本”功能块拖拽到代码区域来创建一个简单的程序。选中“设置变量”功能块,在弹出的对话框中输入变量名,例如`score`,并选择数据类型,比如`整数`。然后,用“输出文本”功能块将这个变量的值输出到屏幕上。
下面是一个简单的示例代码块:
```plaintext
设置变量 [score] 为 [0]
输出文本 [当前得分是:] 到 [serial monitor] 并等待
输出数字 [score] 到 [serial monitor]
```
从这个简单的程序开始,我们已经可以感受到Mixly图形化编程的魅力,拖拽式的编程方式让逻辑的构建直观且易于理解。
### 2.2 Mixly的基础编程概念
#### 2.2.1 变量和数据类型
在编程中,变量相当于存放数据的容器,我们可以在程序中通过变量名来访问存储在其中的数据。在Mixly中,变量的创建和使用都非常直观。
创建变量的基本步骤如下:
1. 点击“变量”功能块组。
2. 点击“创建变量”功能块并输入变量名称。
3. 点击“设置变量”功能块来给变量赋值。
Mixly支持多种数据类型,包括整数、浮点数、布尔值和字符串等。Mixly会自动根据上下文推断数据类型,但有时我们也需要明确指定类型以避免潜在的错误。
#### 2.2.2 控制结构
控制结构是编程中用来控制程序执行流程的结构,包括条件判断和循环控制等。在Mixly中,我们同样可以使用图形化的控制块来实现这些控制结构。
- **条件判断**:我们可以通过“如果...那么...”或者“如果...那么...否则...”功能块来实现条件判断。
- **循环控制**:使用“重复”或“当...为真时...重复”功能块实现循环逻辑。
以一个简单的示例来说明条件判断的使用:
```plaintext
如果 [score] 大于 [100]
则
输出文本 [恭喜,成绩优秀!] 到 [serial monitor]
否则
输出文本 [继续努力!] 到 [serial monitor]
```
在这个例子中,我们根据变量`score`的值来进行条件判断,并输出不同的信息。这种控制结构是实现复杂逻辑的基础。
### 2.3 Mixly的实用编程技巧
#### 2.3.1 模块化编程方法
模块化编程方法是提高代码可读性和可维护性的有效策略。在Mixly中,我们可以将常用的功能封装成模块,以便重复使用。
创建模块的基本步骤如下:
1. 在代码区域右键点击并选择“新建功能”。
2. 输入新功能的名称,并创建。
3. 在新创建的功能块内编写子程序代码。
4. 完成后,点击“确定”按钮,将子程序添加到功能块库。
#### 2.3.2 调试和错误处理技巧
在编写程序的过程中,调试是不可或缺的一步。Mixly提供了丰富的调试工具,帮助我们发现并修正程序中的错误。
调试的技巧包括:
- 使用“输出”功能块查看变量的值和程序的运行状态。
- 利用“暂停”功能块来观察程序在特定点的行为。
- 利用“串口监视器”查看输出信息。
错误处理是编程中处理意外情况的重要技巧。在Mixly中,我们可以通过“捕获异常”功能块来处理程序运行中可能出现的错误。
下面是一个简单的错误处理的示例:
```plaintext
捕获异常 [执行代码块]
如果发生 [错误类型]
输出文本 [发生错误:错误描述] 到 [serial monitor]
否则
输出文本 [程序正常执行] 到 [serial monitor]
```
通过模块化编程和错误处理,我们的程序将变得更加健壮和易于维护。
在本章节中,我们介绍了Mixly编程环境的搭建以及基础编程概念。这为后续章节中关于1602液晶屏的操作和时钟计数器的逻辑设计打下了坚实的基础。在下一章中,我们将深入探讨1602液晶屏的操作和控制,带领读者进一步掌握Mixly编程的实际应用。
# 3. 1602液晶屏操作
## 3.1 1602液晶屏的工作原理
### 3.1.1 显示器的结构和特性
1602液晶屏是一种常用于各种电子设备的字符型LCD,它由16个字符宽和2行组成的显示屏,因此得名1602。这种显示屏由多个液晶单元组成,每个单元可以控制显示字符的一部分。每个字符点阵为5x8或5x10像素,使得每行可以显示最多16个字符。
该类型的液晶屏通常使用并行接口进行数据通信,这要求控制器有多个可用的I/O引脚。1602液晶屏通过专用的接口电路与Arduino等微控制器连接,这种连接方式使得Arduino能够发送控制命令和字符数据到LCD,以显示所需的信息。
显示器的特性包括:
- 高对比度,可在多种照明条件下使用。
- 可调节的背光,可选透射或反射型。
- 低能耗,特别适合电池供电的便携式设备。
- 可定制的字符生成器,能够创建自定义字符。
### 3.1.2 与Arduino的接口和通信方式
与Arduino通信,1602液晶屏需要以下几个信号线:
- RS (Register Select):用于选择数据寄存器(DR)或命令寄存器(CR)。
- RW (Read/Write):用于指定是向LCD写入数据(低电平)还是从LCD读取数据(高电平)。
- EN (Enable):使能信号,用于启动数据的读写操作。
- 数据线(D0-D7):8位并行数据线,用于传输命令和数据。
1602液晶屏通常通过一个称为HD44780的控制器芯片进行驱动,该控制器定义了一套与微控制器通信的协议。为了使用Arduino控制1602液晶屏,开发者需要编写软件来模拟这些信号,使Arduino可以像操作一个外设一样操作LCD。
### 3.2 Mixly中操作1602液晶屏
#### 3.2.1 显示文本和数字
在Mixly中操作1602液晶屏时,你可以利用该平台提供的块状编程接口。要显示文本和数字,你可以使用“显示文本”块。首先,需要确保你的Mixly环境已经正确安装了1602液晶屏的驱动模块。然后,你可以拖拽“初始化LCD”块,设置液晶屏的接口参数,例如I2C或SPI模式(取决于你使用的是哪种模块)。
以下是一个展示文本和数字的简单示例代码块:
```blocks
initializeLCD(0x27, 16, 2)
液晶屏显示文本("Hello World!")
液晶屏显示数字(12345)
```
在上述代码块中,`initializeLCD`块用于设置1602液晶屏的通信参数,而`液晶屏显示文本`和`液晶屏显示数字`块则分别用于展示文本和数字。你需要根据实际硬件连接情况选择正确的初始化参数。
#### 3.2.2 控制显示位置和字符效果
控制显示位置可以通过设置LCD的光标位置来实现。使用“设置光标位置”块可以指定文本和数字显示的行和列。此外,可以使用“设置字符显示效果”块来自定义文本的显示样式,例如是否闪烁、是否反显等。
示例代码块如下:
```blocks
setCursorPosition(0, 0) // 第0行,第0列
液晶屏显示文本("Line 1")
setCursorPosition(1, 0) // 第1行,第0列
液晶屏显示文本("Line 2")
```
通过组合这些功能块,开发者可以灵活地控制1602液晶屏的显示内容和显示效果,从而达到所需的人机交互界面设计。
# 4. 时钟计数器的逻辑设计
## 4.1 设计时钟计数器的逻辑框架
### 4.1.1 时钟模块的实现原理
在设计一个时钟计数器时,首要的是理解时钟模块的基本原理。时钟模块的核心在于其时间计数的功能,这通常涉及到实时跟踪当前时间并更新显示。在嵌入式系统中,这往往是由内部的定时器/计数器硬件或通过软件仿真来实现。
- **硬件定时器**:在Arduino或类似的微控制器中,一般会内置硬件定时器,这些硬件定时器可以配置为以特定的时间间隔产生中断。
- **软件模拟**:如果没有硬件定时器或者需要更精确的时间管理,可以使用一个软件定时器或者通过在主循环中检查一个变量来模拟时钟的行为。这通常要求在主循环中有一个稳定的时钟源。
我们通常通过编写一个事件处理程序来响应时间更新,然后更新存储时间的变量。这个处理程序可以在每个固定的时间间隔(比如1秒)被定时器中断调用。
### 4.1.2 计数器模块的实现原理
计数器模块则简单一些,它通常用于记录事件发生的次数。在实现上,它需要一个变量来存储当前计数值,并且在每个计数事件发生时增加该变量的值。
- **计数事件**:计数事件可以是外部的,比如用户按键、传感器触发等,也可以是内部的,比如定时器中断。
- **计数值存储**:计数器模块必须有机制来存储和更新当前的计数值。
计数器模块可以与时钟模块关联,以提供一种记录时间的方式,如“自启动以来经过了多少秒”。
## 4.2 编写时钟计数器的代码逻辑
### 4.2.1 实现时间显示
时间显示需要一个稳定的时钟源。在Arduino平台中,可以使用`millis()`函数来获取自板子启动以来的毫秒数,或者使用`DateTime`库来简化日期和时间的处理。
```cpp
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DateTime.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // 创建一个1602液晶屏对象
void setup() {
lcd.init(); // 初始化液晶屏
lcd.backlight(); // 打开背光
DateTime.begin(); // 初始化时间
}
void loop() {
DateTime dt = DateTime.now(); // 获取当前时间
lcd.setCursor(0, 0); // 设置光标位置
lcd.print(dt.hour()); // 打印小时
lcd.print(':');
lcd.print(dt.minute()); // 打印分钟
lcd.print(':');
lcd.print(dt.second()); // 打印秒
}
```
这段代码使用`DateTime`库来获取实时时间,并在1602液晶屏上显示。需要注意的是,`DateTime`库需要一个稳定的时钟源,如一个外部的RTC模块。
### 4.2.2 实现计数功能
计数器的实现可以基于时间模块,也可以独立于时间模块。在下面的示例中,我们将实现一个简单的按按钮计数的逻辑。
```cpp
const int buttonPin = 2; // 按钮连接的引脚
int buttonState = 0; // 当前按钮状态
int lastButtonState = 0; // 上一次按钮状态
int counter = 0; // 计数器
void setup() {
pinMode(buttonPin, INPUT); // 设置按钮引脚为输入
Serial.begin(9600); // 开始串行通信
}
void loop() {
// 读取按钮的状态
buttonState = digitalRead(buttonPin);
// 检查按钮是否被按下
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
counter++; // 增加计数器
Serial.println(counter); // 打印计数器的值
}
}
// 更新按钮状态
lastButtonState = buttonState;
// 防抖动延时
delay(50);
}
```
这段代码通过连接一个按钮到引脚2,并在每次检测到按钮状态改变时增加计数器的值,然后在串行监视器上显示这个值。这里使用简单的软件防抖动技术来确保按钮读取的稳定。
### 4.2.3 时间和计数的关联
为了将时间显示和计数功能关联起来,我们可以记录计数事件发生的时间。这样,我们就可以得到每个事件发生的具体时间点。这在很多应用场景中非常有用,比如记录每个顾客到达商店的时间或者监测机器操作的持续时间。
```cpp
DateTime startTime;
int counter = 0;
void setup() {
Serial.begin(9600);
// 其他初始化代码
}
void loop() {
if (/* 检测到计数事件 */) {
counter++;
startTime = DateTime.now(); // 记录计数事件发生的时间
Serial.print("计数事件 #");
Serial.println(counter);
Serial.print("发生于: ");
Serial.println(startTime.toString());
}
// 其他逻辑代码
}
```
这段代码中,我们记录了每个计数事件发生的时间,并将其打印到串行监视器上。在实际应用中,可以根据需要将数据发送到其他设备或存储起来。
通过上述的代码逻辑,我们可以建立一个基本的时钟计数器。在实践中,可能需要根据具体需求对代码进行优化和调整。
# 5. 时钟计数器实践与优化
在前几章中,我们详细介绍了Mixly编程环境的搭建、基础概念、实用技巧以及如何操作1602液晶屏。接下来,我们将进入一个更富挑战性的主题——时钟计数器的实践与优化。时钟计数器不仅是对时间管理的重要工具,也是一块丰富的实践园地,让我们的技能得到充分应用与锻炼。
## 组装硬件与连接设备
### 准备电子元件
为了构建我们的时钟计数器,首先需要准备以下元件:
- Arduino开发板(如Arduino Uno)
- 1602液晶屏
- 晶振(通常为16MHz)
- 按钮(用于设置时间/计数器)
- 电阻(限流用)
- 连接线
- 面包板(可选,方便组装)
组装硬件之前,确认所有元件功能正常,特别是Arduino开发板和1602液晶屏,它们是项目成功的关键。
### 连接1602液晶屏和Arduino
连接1602液晶屏到Arduino开发板,我们需要按照以下步骤操作:
1. 连接VSS引脚到Arduino的GND,VDD引脚到Arduino的5V,VO引脚通过一个电位器连接到GND和5V来调节对比度。
2. 连接RS引脚到Arduino的数字引脚(比如12号引脚),E引脚到另一个数字引脚(比如11号引脚)。
3. D4-D7数据引脚连接到Arduino的数字引脚(比如5-8号引脚),并且通过10kΩ电阻连接到5V(上拉电阻)。
4. A引脚连接到5V通过一个220Ω电阻(LED阳极),K引脚连接到GND(LED阴极)。
5. 如果使用按钮,将按钮的一个引脚连接到Arduino的一个数字输入引脚,另一个引脚连接到GND。
确保所有连接正确无误,就可以开始编写代码并测试设备了。
## 测试和调试时钟计数器
### 测试功能的实现
在编写代码之前,我们可以手动测试硬件连接是否正确:
- 使用Arduino IDE内置的串口监视器功能,发送简单的字符到1602液晶屏进行显示测试。
- 通过按钮输入,观察Arduino是否能够响应并进行相应的计数操作。
通过简单的测试,可以保证硬件组装无误,接下来就可以进行代码的编写和上传了。
### 调试程序和硬件问题
在实际的测试中,可能会遇到各种问题,比如显示不正常、按钮无法触发、时间不准确等。解决这些问题的步骤通常包括:
1. 检查所有线路是否连接正确,特别是公共端如GND和5V。
2. 使用Arduino的串口监视器,查看程序是否正确运行。
3. 调试代码,检查是否有逻辑错误或语法错误。
4. 检查外部干扰,如电磁干扰,或电源电压不稳定。
5. 对于硬件问题,检查元件是否损坏,或尝试更换元件进行测试。
在解决问题时,经常需要编写测试代码来逐个验证硬件功能和程序逻辑。
## 优化用户体验
### 优化显示效果
为了使时钟计数器更加实用和美观,我们可以优化显示效果:
- 设计一个更复杂的界面,包括时间、日期和计数器的读数,以及动态图标来区分它们。
- 利用1602液晶屏的字符定义功能,创造自定义字符来美化显示。
- 考虑光线变化调整屏幕背光亮度。
通过不断测试和用户反馈,逐步调整显示方案,使得最终产品满足用户需求。
### 增加功能和互动性
为了增加产品的吸引力和实用性,可以考虑增加以下功能:
- 使用按钮设置当前时间、日期和计数器的初始值。
- 添加闹钟或倒计时功能。
- 通过蓝牙或Wi-Fi模块,实现与智能手机等设备的远程交互。
根据需求增加功能时,需确保系统稳定性,防止引入新的bug或问题。
## 代码示例与逻辑分析
为了给读者提供一个清晰的参考,下面给出一个简单的Arduino代码示例,用于实现时钟功能和计数器功能。
```cpp
#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>
// 初始化1602液晶屏
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS3231 rtc;
void setup() {
// 初始化液晶屏
lcd.begin(16, 2);
// 检查RTC模块是否连接成功
if (!rtc.begin()) {
lcd.print("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
// 在这里添加计数器逻辑
// ...
delay(1000);
}
```
### 代码逻辑解读
- 第1行至第4行包含必要的库文件,这些库文件支持1602液晶屏和实时时钟模块(RTC)。
- 第6行至第9行初始化液晶屏,定义了连接的Arduino数字引脚。
- 第11行至第16行包含RTC模块的初始化代码,用于获取和设置时间。
- 第18行至第25行的`setup()`函数在程序开始时执行,用于液晶屏的初始化和检查RTC模块。
- 第27行至第41行的`loop()`函数周期性执行,用于显示当前时间。
在实际应用中,需要进一步扩展代码来实现用户输入、设置时间、计数器功能等交互功能。代码中需要加入对按钮的检测,以及对RTC模块的读写操作,以实现完整的时钟和计数器功能。
## 表格
为了更直观地展示时钟计数器的功能,我们可以创建一个表格来列举不同模式下的时间格式:
| 功能模式 | 格式示例 | 描述 |
|--------|---------|------|
| 12小时制 | 09:23:15 PM | 显示当前时间,使用12小时制 |
| 24小时制 | 21:23:15 | 显示当前时间,使用24小时制 |
| 日期显示 | 05/12/2023 | 显示当前日期 |
| 计数器模式 | 0157 | 显示计数器的累计值 |
表格中的每一列代表了不同情境下,时钟计数器显示内容的格式与含义。
## Mermaid流程图
为了展示软件的逻辑流程,我们可以用Mermaid来创建一个流程图:
```mermaid
graph TD
A[开始] --> B[初始化硬件]
B --> C[初始化RTC模块]
C --> D[主循环]
D --> E[读取时间]
E --> F{用户交互}
F -->|设置时间| G[设置RTC时间]
F -->|设置日期| H[设置RTC日期]
F -->|设置计数器| I[设置计数器值]
F -->|进入计数器模式| J[开始计数器]
G --> K[返回主循环]
H --> K
I --> K
J --> K
K --> E
D --> L[更新显示]
L --> D
```
流程图清晰地描述了程序从启动到显示时间,再到响应用户输入并设置各种功能,最后回到主循环的整个流程。
通过上述章节的深入讨论,我们已经了解了如何从零开始,一步步构建出一个功能完善的时钟计数器。在实践中不断学习和改进,是提升自身技能的必经之路。随着经验的积累,我们可以创造出更多具有实用价值的创新项目。
# 6. 扩展与创新
## 6.1 学习资源和进阶内容
随着Mixly编程和1602液晶屏应用的日益广泛,不断学习新的知识和技能变得尤为重要。无论是刚刚入门的初学者,还是希望进一步提升技能的资深爱好者,都需要持续学习。
### 6.1.1 推荐阅读和在线教程
为了帮助大家更好地掌握Mixly编程和1602液晶屏的应用,以下是几本推荐的图书和在线资源:
- **图书资源**:《Mixly编程实战指南》涵盖了Mixly的安装、基础编程以及如何与各种硬件进行交互操作。
- **在线教程**:Arduino官方论坛提供了丰富的学习资料和案例分析,是学习和解决问题的宝贵资源。
- **视频教程**:各大视频平台上也有许多关于Mixly编程和1602液晶屏应用的免费教学视频,例如YouTube和B站等。
### 6.1.2 Mixly编程的高级应用
除了基础操作外,Mixly编程还能实现更高级的应用,例如:
- **数据可视化**:使用Mixly创建图表,将传感器数据进行图形化展示。
- **网络通信**:实现Mixly与网络的连接,例如通过Wi-Fi模块发送数据到服务器。
- **远程控制**:结合物联网技术,通过Mixly实现对硬件设备的远程控制。
## 6.2 创新项目设计思路
创新是推动技术发展的核心力量,通过将Mixly编程和1602液晶屏与其他技术和应用结合,可以设计出新颖且实用的项目。
### 6.2.1 结合物联网的创新项目
物联网(IoT)技术与Mixly编程的结合,为实现智能硬件提供了广阔的可能性。例如:
- **智能温控系统**:利用温湿度传感器收集数据,并通过Mixly编程控制风扇和加热器,实现室温的自动调节。
- **智能植物养护**:通过土壤湿度传感器监控植物土壤湿度,自动控制灌溉系统,保证植物得到适宜的水分。
### 6.2.2 个性化设计和功能拓展
在掌握基础操作之后,可以根据自己的需求对项目进行个性化的设计和功能拓展。例如:
- **多语言界面显示**:1602液晶屏不仅可以显示数字和文本,还可以实现多语言界面显示,方便不同语言用户使用。
- **动态LED背景灯**:配合LED灯条和传感器数据,可以为显示的文本或图形创建动态背景,增强视觉效果和互动体验。
通过持续学习和创新设计,无论是个人爱好还是工作项目,Mixly编程和1602液晶屏都将是你实现创意和技术梦想的得力助手。
0
0