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);
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用opencv.js 的时候报错 Uncaught 1022911432

需求&#xff1a; -如题 进程&#xff1a; 这个报错是opencv 内存溢出了可以在开始的时候分配更多的内存cv.setMemoryManagement(1024 * 1024 * 50)OpenCV.js 中&#xff0c;很多对象&#xff08;如 Mat&#xff09;需要手动释放。如果你频繁创建矩阵或图像对象而不释放&…

Android SystemUI——服务启动流程(二)

在 Andorid 系统源码中,package/apps下放的是系统内置的一些 APP,例如 Settings、Camera、Phone、Message 等等。而在 framework/base/package 下,它们也是系统的 APP,SystemUI 就在此目录下。它控制着整个 Android 系统的界面,但其实他也是一个 APP,不同于一般的 APP,它…

AI学习之自然语言处理(NLP)

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机科学、人工智能和语言学领域的交叉学科&#xff0c;旨在让计算机能够理解、处理和生成人类语言。以下为你详细介绍&#xff1a; 自然语言处理的关键技术 词法分析&#xff1a;将文本…

linux之进程信号(初识信号,信号的产生)

目录 引入一、初识信号(信号预备知识)1.生活中的信号2.Linux中的信号3.信号进程得出的初步结论 二、信号的产生1.通过终端输入产生信号拓展: 硬件中断2.调用系统函数向进程发信号3.硬件异常产生信号4.软件条件产生信号拓展: 核心转储技术总结一下&#xff1a; 引入 一、初识信…

【工具类】获取日出日落时间的Java工具类

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

Open FPV VTX开源之betaflight配置

Open FPV VTX开源之betaflight配置 1. 源由2. 配置3. 总结4. 参考资料5. 补充 - 飞控固件版本 1. 源由 飞控嵌入式OSD - ardupilot配置使用betaflight配套OSD图片。 Choose correct font depending on Flight Controller SW. ──> /usr/share/fonts/├──> font_btfl…

(双系统)Ubuntu+Windows解决grub引导问题和启动黑屏问题

Introduction ‍ 解决双系统的 Windows 的启动项失踪和grub正常的情况下启动 Windows 系统出现黑屏的问题。 ‍ Note: ‍ 我的系统是 Ubuntu 24.04 LTS desktop​&#xff0c;安装了双系统&#xff08;先安装 Win &#xff0c;再安装 Ubuntu&#xff09; ‍ 文章目录 In…

Python从0到100(八十三):神经网络-使用残差网络RESNET识别手写数字

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

docker安装和测试redis步骤

docker安装和测试redis步骤 一、官方推荐安装方式&#xff1a; 1、执行 docker pull redis:4.0.1 命令&#xff0c;下载 redis 镜像&#xff0c;如下所示&#xff1a; 2、执行命令&#xff0c;创建并启动redis容器 docker run - -rm -d - -name redis6379 -p 6379:6379 r…

微信小程序原生与 H5 交互方式

在微信小程序中&#xff0c;原生与 H5 页面&#xff08;即 WebView 页面&#xff09;之间的交互通常有以下几种方式&#xff1a; 1. 使用 postMessage 进行通信 微信小程序的 WebView 页面和原生小程序页面可以通过 postMessage 来进行数据传递。 WebView 页面向原生小程序发…

Linux 系统下查看磁盘是SSD还是HDD命令

smartctl工具查看 smartctl -a /dev/sda | grep Rotation RateRotation Rate: Solid State Device 如果驱动器是 SSD&#xff0c;则输出将如下所示。 Rotation Rate: Solid State Device 而且&#xff0c;如果驱动器是 HDD&#xff0c;则输出将如下所示。 Rotation Rate: 5400 …

vue3学习日记5 - 项目起步

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博…

计算机组成原理--笔记一

目录 一.计算机硬件的基本组成 1.早期冯诺依曼机的结构 2.现代计算机的结构 二.各个硬件的工作原理 1.主存储器 i. 读取数据 ii. 写入数据 1.1 基本组成 2.运算器 3.控制器 一.计算机硬件的基本组成 1.早期冯诺依曼机的结构 “存储程序”&#xff0c;将指令以二进制的形式输入…

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

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

漫话架构师|什么是系统架构设计师(开篇)

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 关注犬余&#xff0c;共同进步 技术从此不孤单

CV(10)--目标检测

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 目标检测 object detection&#xff0c;就是在给定的图片中精确找到物体所在位置&#xff0c;并标注出物体的类别;输出的是分类类别label物体的外框&#xff08;x, y, width, height&#xff09;。 目标检测算法&#xff1a…

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…

【微服务justsoso-cloud系列】目录

【微服务justsoso-cloud系列】目录 1.vagrantvirtualbox实现centos7安装 2.centos7安装jdk17教程 3.Linux安装Docker教程&#xff08;详解&#xff09; 4.Linux安装git 5.zerotier搭建虚拟局域网&#xff0c;自建planet

【深度学习】关键技术-激活函数(Activation Functions)

激活函数&#xff08;Activation Functions&#xff09; 激活函数是神经网络的重要组成部分&#xff0c;它的作用是将神经元的输入信号映射到输出信号&#xff0c;同时引入非线性特性&#xff0c;使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…

3.flask蓝图使用

构建一个目录结构 user_oper.py from flask import Blueprint, request, session, redirect, render_template import functools # 创建蓝图 user Blueprint(xkj, __name__)DATA_DICT {1: {"name": "张三", "age": 22, "gender": …