当前位置: 首页 > news >正文

24-25-1-单片机开卷部分习题和评分标准

依据相关规定试卷必须按评分标准进行批改。

给分一定是宽松的,能给分一定给,如有疑问也可以向学院教务办申请查卷。

一部分学生期末成绩由于紧张或其他原因导致分数过低,也是非常非常遗憾的。

个人也是非常抱歉的。


开卷考试


 

简答题

第一题

 

(本题 10 分)请描述 Arduino Mega 2560 数字 I/O 口(如引脚 13 )输出和输入过程及
原理。
(1)说明输出过程及原理。(5 分)
(2)说明输入过程及原理,以及保证读取数据正确的方法(5 分)
评阅标准:
1 )输出过程及原理( 5 分):
当在 Arduino 程序中设置数字 I/O 口(如引脚 13 )为输出模式(使用 pinMode(13, OUTPUT) ),并向该
引脚写入高电平( digitalWrite(13, HIGH) )或低电平( digitalWrite(13, LOW) )时, Arduino Mega 2560
的微控制器会控制该引脚对应的寄存器,使引脚输出相应的电平。( 3 分)
输出高电平时,微控制器会通过内部电路使引脚 13 与电源( VCC )相连;输出低电平时,则使引脚 13
与地( GND )相连。( 2 分)
这一过程由 Arduino 的库函数和底层硬件抽象层( HAL )管理,无需用户直接操作寄存器。
2 )输入过程及原理,以及保证读取数据正确的方法( 5 分):
当设置数字 I/O 口(如引脚 13 )为输入模式(使用 pinMode(13, INPUT) )时, Arduino Mega 2560 的微
控制器会将该引脚配置为高阻态,即不会主动向外部电路提供电流或电压。( 2 分)
读取引脚状态时(使用 digitalRead(13) ), Arduino 会检测引脚上的电平,并返回 HIGH LOW 。( 1 分)
为了保证读取数据正确,应确保引脚 13 与外部电路的连接正确,且外部电路提供的电平信号足够稳
定,以避免误读。此外,若引脚 13 连接了上拉或下拉电阻,也能提高读取的稳定性。( 2 分)

第二题

 

2 、(本题 10 分)请结合 Arduino Mega 2560 的串口通信功能,描述串口的发送和接收工
作过程。
发送过程:
当调用 Serial.print() Serial.println() Serial.write() 等函数时, Arduino 会将待发送的数据放入串口发送
缓冲区。( 2 分)
串口硬件( USART )会按照设定的波特率(通过 Serial.begin(baudRate) 设置)从发送缓冲区中逐位读取
数据,并将其转换为串行信号发送出去。( 2 分)
发送过程中, USART 会控制 TXD (发送数据)引脚的电平变化,以形成串行数据流。( 1 分)
接收过程:
当外部设备通过 RXD (接收数据)引脚向 Arduino 发送串行数据时, USART 会按照设定的波特率接
收这些数据。( 2 分)
接收到的数据会被放入串口接收缓冲区,等待程序通过 Serial.read() Serial.available() 等函数读取。( 2 分)
在读取数据时,程序可以检查接收缓冲区的状态,以确定是否有数据可读,并读取数据。( 1 分)

 


第三题

 

 

3、 (本题 10 分)请完善以下 I2C 总线程序,该函数应适用于 Arduino Mega 2560,并说
明所完善程序的功能。
#include <Wire.h>
// 从设备的 I2C 地址
#define SLAVE_ADDRESS 0x27 // 根据具体的从设备修改此地址
void setup() {
// 初始化串口通信,用于调试
Serial.begin(9600);
// 初始化 I2C 通信
// 主设备初始化
Serial.println("I2C 初始化完成");
}
void loop() {
// 要发送的数据
byte dataToSend = 0x42; // 示例数据
// 开始传输到从设备
// 发送数据
// 结束传输
// 调试输出
Serial.print("发送数据: ");
Serial.println(dataToSend, HEX);
// 每隔 1 秒发送一次数据
delay(1000);
}
#include <Wire.h>
// 从设备的 I2C 地址
#define SLAVE_ADDRESS 0x27 // 根据具体的从设备修改此地址
void setup() {// 初始化串口通信,用于调试Serial.begin(9600);// 初始化 I2C 通信Wire.begin(); // 主设备初始化 (2 分)Serial.println("I2C 初始化完成");
}
void loop() {// 要发送的数据byte dataToSend = 0x42; // 示例数据// 开始传输到从设备Wire.beginTransmission(SLAVE_ADDRESS); (2 分)// 发送数据Wire.write(dataToSend); (2 分)// 结束传输Wire.endTransmission(); (2 分)// 调试输出Serial.print("发送数据: ");Serial.println(dataToSend, HEX);// 每隔 1 秒发送一次数据delay(1000);
}
使用 Arduino Mega 2560 作为主设备,向一个从设备(例如,具有 I2C 接口的 LCD 显示屏或 EEPROM 存
储器)发送数据。
1 包含 Wire 库。
2 初始化 I2C 通信。
3 向从设备发送数据。 (2 分)

分析编程题

1、(本题 20 分) 基于 Arduino Mega 2560 的 LED 控制和模拟电动机控制器
a) 当按下 KEY0 时,LED0 点亮,串口发送“电动机上电”;
b) 当按下 KEY1 时,LED1 点亮,串口发送“电动机正转”;
c) 当按下 KEY2 时,LED2 点亮,串口发送“电动机反转”;
d) 当按下 KEY3 时,LED3 点亮,串口发送“电动机停转”。
如果代码都有注释,分析编程合在一起。如果代码没有注释,必须要有代码的文字说明。
编程合理即可得分,答案不唯一。
// 定义按键和 LED 引脚数组
const int keyPins[] = {22, 23, 24, 25};
const int ledPins[] = {26, 27, 28, 29};
// 定义与按键对应的消息数组
const char* messages[] = {
" 电动机上电 ",
" 电动机正转 ",
" 电动机反转 ",
" 电动机停转 "
};
5 分)
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 设置按键引脚为输入,并启用内部上拉电阻
for (int i = 0; i < 4; i++) {
pinMode(keyPins[i], INPUT_PULLUP);
}
// 设置 LED 引脚为输出
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
5 分)
void loop() {
// 遍历按键和 LED
for (int i = 0; i < 4; i++) {
// 检查按键状态
if (digitalRead(keyPins[i]) == LOW) {
digitalWrite(ledPins[i], HIGH); // 点亮对应的 LED
Serial.println(messages[i]); // 发送对应的消息
} else {
digitalWrite(ledPins[i], LOW); // 熄灭对应的 LED
}
}
5 分)
// 延时以避免按键抖动
delay(50);
}
5 分)
数组存储引脚:
使用 keyPins ledPins 数组来存储按键和 LED 的引脚号,这样可以通过循环来遍历它们,而不是为每个
按键和 LED 分别编写代码。
消息数组:
使用 messages 数组来存储与按键对应的消息,这样可以在按键被按下时轻松地发送正确的消息。
循环处理:
setup() 函数中,使用 for 循环来设置按键引脚为输入并启用内部上拉电阻,以及设置 LED 引脚为输出。
loop() 函数中,使用 for 循环来遍历按键和 LED ,检查按键状态,并根据需要点亮或熄灭 LED ,同时发
送相应的消息。
// 定义按键和 LED 引脚数组
const int keyPins[] = {22, 23, 24, 25};
const int ledPins[] = {26, 27, 28, 29};
// 定义与按键对应的消息数组
const char* messages[] = {
"电动机上电",
"电动机正转",
"电动机反转",
"电动机停转"
};
(5 分)
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 设置按键引脚为输入,并启用内部上拉电阻
for (int i = 0; i < 4; i++) {
pinMode(keyPins[i], INPUT_PULLUP);
}
// 设置 LED 引脚为输出
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
(5 分)
void loop() {
// 遍历按键和 LED
for (int i = 0; i < 4; i++) {
// 检查按键状态
if (digitalRead(keyPins[i]) == LOW) {
digitalWrite(ledPins[i], HIGH); // 点亮对应的 LED
Serial.println(messages[i]); // 发送对应的消息
} else {
digitalWrite(ledPins[i], LOW); // 熄灭对应的 LED
}
}
(5 分)
// 延时以避免按键抖动
delay(50);
}


相关文章:

24-25-1-单片机开卷部分习题和评分标准

依据相关规定试卷必须按评分标准进行批改。 给分一定是宽松的&#xff0c;能给分一定给&#xff0c;如有疑问也可以向学院教务办申请查卷。 一部分学生期末成绩由于紧张或其他原因导致分数过低&#xff0c;也是非常非常遗憾的。 个人也是非常抱歉的。 开卷考试 简答题 第一…...

STM32第6章、WWDG

一、简介 WWDG&#xff1a;全称Window watchdog&#xff0c;即窗口看门狗&#xff0c;本质上是一个能产生系统复位信号和提前唤醒中断的计数器。 特性&#xff1a; 是一个递减计数器。 看门狗被激活后&#xff0c; 当递减计数器值从 0x40减到0x3F时会产生复位&#xff08;即T6位…...

汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮

故障现象  一辆2007款法拉利599 GTB车&#xff0c;搭载6.0 L V12自然吸气发动机&#xff08;图1&#xff09;&#xff0c;累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断 接车后试车&#xff0c;发动机怠速轻微抖动&#xff0c;…...

C语言-数据结构-队列

目录 1.队列的特点 2.队列的实现 2.1.初始化队列 2.2.入队列 2.2.1.入空队列 2.2.2.入非空队列 2.3.出队列 2.4.销毁队列 2.5.完整代码 3.实际应用 1.队列的特点 队列是一种常见的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO, First In First Out&#xff09…...

STL之VectorMapList针对erase方法踩坑笔记

前沿 如下总结的三种容器&#xff0c;开头都会涉及当前容器的特点&#xff0c;再者就本次针对erase方法的使用避坑总结。 一.Vector vector关联关联容器&#xff0c;存储内存是连续&#xff0c;且特点支持快速访问&#xff0c;但是插入和删除效率比较地(需要找查找和移动)。另…...

梯度下降法为什么要提前停止

什么是提前停止&#xff08;Early Stopping&#xff09;&#xff1f; 提前停止是一种正则化技术&#xff0c;用于在训练机器学习模型&#xff08;特别是神经网络&#xff09;时防止过拟合。它的核心思想是通过监控模型在验证集上的性能&#xff0c;在性能开始恶化之前停止训练…...

【vue3项目使用 animate动画效果】

vue3项目使用 animate动画效果 前言一、下载或安装npm 安装 二、引入组件三、复制使用四、完整使用演示总结 前言 提示&#xff1a;干货篇&#xff0c;不废话&#xff0c;点赞收藏&#xff0c;用到会后好找藕~ 点击这里&#xff0c;直接看官网哦 &#x1f449; 官网地址&#…...

1.1.1 C语言常用的一些函数(持续更新)

总框架见&#xff08;0. 总框架-CSDN博客&#xff09; &#xff08;1&#xff09;socket (a)分配fd&#xff1b;(b)分配tcp控制块(tcb) int socket(int domain, int type, int protocol);AF_INET IPv4 Internet protocols ip(7)AF_INET6 IP…...

李宏毅机器学习课程笔记03 | 类神经网络优化技巧

文章目录 类神经网络优化技巧局部最小值local minima 与 鞍点saddle pointSaddle Point 的情况更常见 Tips for training&#xff1a;Batch and MomentumSmall Batch vs Large Batch回顾&#xff1a;optimization优化 找到参数使L最小问题&#xff1a;为什么要用Batch&#xff…...

简洁明快git入门及github实践教程

简洁明快git入门及github快速入门实践教程 前言git知识概要&#xff1a;一&#xff1a;什么是 Git&#xff1f;二&#xff1a;安装 Git三&#xff1a;配置 Git配置git的用户名和邮箱地址创建仓库 四&#xff1a;Git实践五&#xff1a;远程仓库操作&#xff08;基于git命令使用G…...

Python使用socket实现简易的http服务

在接触的一些项目中&#xff0c;有时为了方便可视化一些服务状态&#xff08;请求数很少&#xff09;&#xff0c;那么很容易想到使用http服务来实现。但开源的web后端框架&#xff0c;例如flask&#xff0c;fastapi&#xff0c;django等略显沉重&#xff0c;且使用这些框架会有…...

【Hive】海量数据存储利器之Hive库原理初探

文章目录 一、背景二、数据仓库2.1 数据仓库概念2.2 数据仓库分层架构2.2.1 数仓分层思想和标准2.2.2 阿里巴巴数仓3层架构2.2.3 ETL和ELT2.2.4 为什么要分层 2.3 数据仓库特征2.3.1 面向主题性2.3.2 集成性2.3.3 非易失性2.3.4 时变性 三、hive库3.1 hive概述3.2 hive架构3.2.…...

linux系统监视(centos 7)

一.系统监视 1.安装iostat&#xff0c;sar&#xff0c;sysstat&#xff08;默认没有&#xff0c;安装过可以跳跃&#xff09; iostat 和 sar&#xff1a; 同样&#xff0c;iostat 和 sar 是 sysstat 软件包的一部分。使用以下命令安装&#xff1a;sudo yum install sysstat解释…...

Blazor中Syncfusion图像编辑器组件使用方法

Blazor中Syncfusion图像编辑器组件是一个功能丰富的图像处理工具&#xff0c;支持多种编辑、操作和交互方式&#xff0c;帮助用户高效处理图像。以下是该组件的主要功能总结&#xff1a; 主要功能&#xff1a; 图像打开与保存 图像编辑器允许用户通过简单的点击操作打开支持的…...

电动汽车V2G技术Matlab/Simulink仿真模型

今天给大家更新关于V2G技术的仿真&#xff0c;不是研究这个方向的&#xff0c;可能会对这个名称比较陌生&#xff0c;那么&#xff0c;什么是“V2G”&#xff1f; V2G全称&#xff1a;Vehicle-to-Grid&#xff0c;即车网互动&#xff0c;利用电动汽车特有的储能功能与电网“双…...

C++中的unordered_set和unordered_map的模拟实现

一、封装基本结构 与map和set的封装过程很想&#xff0c;unordered_set和unordered_map也需要用MapKeyOfT和SetKeyOfT创建哈希表类型&#xff0c;借此获取对应的key值来使用&#xff1b; 因此&#xff0c;在哈希表中也一样需要用参数class T来替代set中的key和map中的pair<…...

Spring Boot 2 学习指南与资料分享

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今竞争激烈的 Java 后端开发领域&#xff0c;Spring Boot 2 凭借其卓越的特性&#xff0c;为开发者们开辟了一条高效、便捷的开发之路。如果你渴望深入学习 Spring Boot 2&#xff0c;以下这份精心…...

(一)QSQLite3库简介

1、SQLite数据库 SQLite数据库&#xff0c;作为一个轻量级的关系型数据库管理系统&#xff0c;广泛应用于移动设备和桌面应用程序中。由于其简单易用、无需配置的特点&#xff0c;它为开发者提供了极大的便利。然而&#xff0c;正是由于其应用广泛&#xff0c;随着用户对于系统…...

《计算机网络》课后探研题书面报告_网际校验和算法

网际校验和算法 摘 要 本文旨在研究和实现网际校验和&#xff08;Internet Checksum&#xff09;算法。通过阅读《RFC 1071》文档理解该算法的工作原理&#xff0c;并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文&#xff08;包括ICMP、TCP、UDP等&a…...

hot100_240. 搜索二维矩阵 II

hot100_240. 搜索二维矩阵 II 直接遍历列减行增 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,1…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...