Arduinio mega 2560习题-填空、选择和判断-6-数码管显示


答案仅供参考,未必正确,请如需使用请核实。


第六部分 数码管显示

填空题

  1. 数码管显示通常基于______原理,通过控制各段电极的通断来显示不同的数字或字符。
    答案:电致发光(或LED点亮)

  2. 在静态显示中,每一个数码管位都是______控制的,即同时点亮显示所需的所有段。
    答案:独立

  3. 动态显示通过______扫描的方式,依次点亮每个数码管位,利用人眼的视觉暂留效应形成完整的显示。
    答案:时间

  4. 数码管的共阳极接法意味着所有阳极连接在一起,通过控制______来实现显示。
    答案:阴极(或段电极)

  5. 在Arduino Mega 2560上,控制数码管显示通常需要用到______输出端口。
    答案:数字I/O

  6. 静态显示中,如果显示4位数字,则需要______个独立的I/O口来控制段电极。
    答案:4×(数码管段数,如7段则为28)

  7. 动态显示中,为了减少闪烁,扫描速度应足够______。
    答案:快

  8. 数码管的______决定了其能够显示的颜色和亮度。
    答案:LED类型

  9. 在Arduino程序中,通常使用______函数来控制数码管的段电极。
    答案:digitalWrite

  10. 动态显示中,为了避免显示错误,需要确保每次扫描时只点亮______个数码管位。
    答案:一

  11. 数码管的共阴极接法意味着所有阴极连接在一起,通过控制______来实现显示。
    答案:阳极(或段电极)

  12. 静态显示相比动态显示,需要更多的______资源。
    答案:I/O口(或硬件资源)

  13. 在动态显示中,每个数码管位的显示时间是由______决定的。
    答案:扫描速度

  14. 数码管的______决定了其能够显示的最大字符数或数字数。
    答案:段数

  15. 为了在Arduino Mega 2560上实现数码管的动态显示,通常需要用到______等定时器相关功能。
    答案:中断或延时函数

单选题

  1. 下列哪种接法属于数码管的一种常见接法?
    A. 共阳极接法
    B. 共阴极接法
    C. 串联接法
    D. 并联接法(指电源并联,非段或位并联)
    答案:A(和B也是正确答案,但单选通常选其一)

  2. 静态显示中,控制一个7段数码管显示数字“8”,需要点亮______个段。
    A. 3
    B. 5
    C. 6
    D. 7
    答案:D

  3. 动态显示中,为了形成稳定的显示效果,扫描速度应控制在人眼视觉暂留时间之内,大约为______毫秒以内。
    A. 1
    B. 10
    C. 20
    D. 100
    答案:C(实际值可能因人而异,但通常小于20毫秒)

  4. 在Arduino程序中,控制数码管段电极的高电平或低电平,通常使用______函数。
    A. analogWrite
    B. digitalRead
    C. digitalWrite
    D. delay
    答案:C

  5. 下列哪种情况更适合使用动态显示?
    A. 需要同时显示很多位数字
    B. 只需要显示一位数字
    C. 对显示亮度有极高要求
    D. 对硬件资源有严格限制
    答案:A

  6. 数码管的共阳极接法中,为了显示数字,需要控制______为低电平。
    A. 所有阳极
    B. 所有阴极
    C. 选定段电极
    D. 未选定段电极
    答案:C

  7. 静态显示相比动态显示,其优点是______。
    A. 节省I/O口资源
    B. 显示更稳定无闪烁
    C. 编程更简单
    D. 功耗更低
    答案:B

  8. 在动态显示中,如果扫描速度过慢,可能会导致______。
    A. 数码管损坏
    B. 显示亮度增加
    C. 显示不稳定或闪烁
    D. 功耗增加
    答案:C

  9. 数码管的亮度主要由______决定。
    A. 供电电压
    B. LED类型
    C. 扫描速度
    D. 控制方式(静态或动态)
    答案:A(和B也有影响,但单选通常选最直接因素)

  10. 下列哪个不是实现数码管动态显示所必需的?
    A. 定时器中断
    B. 足够的I/O口资源
    C. 延时函数
    D. 数码管段数
    答案:D

  11. 在Arduino Mega 2560上,如果采用共阴极接法,为了点亮数码管的某一段,应该将该段的电极设置为______。
    A. 高电平
    B. 低电平
    C. 悬空
    D. 接地
    答案:A

  12. 静态显示中,如果每个数码管位都需要独立的I/O口来控制,那么显示4位数字需要至少______个I/O口(假设数码管为7段)。
    A. 4
    B. 7
    C. 28
    D. 32
    答案:C

  13. 动态显示中,为了减少闪烁,通常采用的策略是______。
    A. 增加扫描速度
    B. 减少扫描速度
    C. 增加数码管段数
    D. 减少数码管位数
    答案:A

  14. 数码管的______决定了其能够显示的最大字符集。
    A. 段数
    B. 尺寸
    C. 颜色
    D. 功耗
    答案:A

  15. 在Arduino程序中,为了实现数码管的动态显示,通常需要用到______等循环控制结构。
    A. if语句
    B. for循环
    C. while循环
    D. switch语句
    答案:B(或C,但for循环更常见用于扫描)

判断题

  1. 数码管的静态显示比动态显示更节省硬件资源。()
    答案:错

  2. 在动态显示中,为了提高显示稳定性,应尽可能减慢扫描速度。()
    答案:错(应控制在人眼视觉暂留时间之内,但并非越慢越好)

  3. 数码管的共阳极接法中,所有阳极连接在一起,通过控制阴极来实现显示。()
    答案:对

  4. 静态显示中,每个数码管位都是独立控制的,因此不存在闪烁问题。()
    答案:对(但需注意电源和电流限制)

  5. 动态显示中,每次扫描时所有数码管位都是同时点亮的。()
    答案:错(每次只点亮一个数码管位)

  6. 数码管的亮度完全由供电电压决定,与LED类型无关。()
    答案:错(LED类型也影响亮度)

  7. 在Arduino程序中,控制数码管显示通常使用analogWrite函数。()
    答案:错(应使用digitalWrite函数)

  8. 静态显示中,如果显示4位数字,则需要4个独立的I/O口来控制位电极。()
    答案:错(是控制段电极,且数量取决于数码管段数)

  9. 动态显示中,扫描速度过快可能导致数码管无法正常显示。()
    答案:对(因为可能超出人眼视觉暂留时间)

  10. 数码管的段数决定了其能够显示的最大字符数或数字数。()
    答案:对

  11. 在Arduino Mega 2560上实现数码管的动态显示时,必须使用定时器中断。()
    答案:错(可以使用延时函数或其他方法实现)

  12. 数码管的共阴极接法中,为了显示数字,需要控制所有阴极为高电平。()
    答案:错(应控制选定段电极为高电平)

  13. 静态显示相比动态显示,其编程复杂度更高。()
    答案:错(通常静态显示编程更简单)

  14. 动态显示中,为了减少闪烁和功耗,应合理选择扫描速度和占空比。()
    答案:对

  15. 数码管的显示颜色由供电电压决定。()
    答案:错(由LED类型决定)


//数码管实验,1624221,1624222,单片机原理与接口技术
//教材P304页,习题2演示案例
#include "SevSeg.h"
 
// 实例化一个七段数码管控制器对象
SevSeg sevseg;
int deciSeconds = 0;
 
void setup() {
  // 定义数码管的数量
  byte numDigits = 4;
  
  // 定义控制每个数码管的引脚
  byte digitPins[] = {2, 3, 4, 5};
  
  // 定义控制七段中每一段的引脚
  byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
  
  // 如果电阻在段引脚上,则设置为false;如果在数码管引脚上,则设置为true
  bool resistorsOnSegments = false;
  
  // 硬件配置,COMMON_ANODE表示公共阳极,COMMON_CATHODE表示公共阴极
  byte hardwareConfig = COMMON_ANODE;
  
  // 是否使用延迟来更新显示,通常设置为false以提高性能
  bool updateWithDelays = false;
  
  // 是否保留前导零,true表示保留,false表示不保留
  bool leadingZeros = false;
  
  // 如果小数点不存在或未连接,则设置为true
  bool disableDecPoint = false;
 
  // 初始化七段数码管控制器
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
               updateWithDelays, leadingZeros, disableDecPoint);
  
  // 设置数码管的亮度,学号后两位
  sevseg.setBrightness(66);

  Serial.begin(9600);

}
 
void loop() {
  // 使用静态变量来保持计时器和计数值在循环之间的状态
  static unsigned long timer = millis();
  // 检查是否已经过去了一毫秒(或更多)
  if (millis() - timer >= 10) {
    // 更新计时器
    timer += 10;
    // 每过一毫秒,计数值增加1(这里实际上是每秒增加1000,因为千分之一秒计数)
    // 注意:原注释中的"100 milliSeconds is equal to 1 deciSecond"可能有误,
    // 因为这里实际上是每次循环增加1,每秒大约增加1000(取决于循环速度)
    deciSeconds++;
    // 更新数码管显示的数字
    if(deciSeconds%100==0)
    {
      Serial.print("学号162422199: ");
      Serial.print(deciSeconds/100);
      Serial.println("秒");
    }
    if (deciSeconds <= 10000)
    {
      sevseg.setNumber(deciSeconds, 2); // -1表示不显示小数点
    } 
    // 当计数值达到10000时,更改为学号后四位,并等待10秒
    else if(deciSeconds > 10000 && deciSeconds <= 19999) {
      // 学号后四位
      sevseg.setNumber(2199, 0); // -1表示不显示小数点
    }
    else if(deciSeconds > 19999) {
      deciSeconds = 0;
      sevseg.setNumber(0, 0); // -1表示不显示小数点
    }
    
  }
  // 刷新数码管显示,这一步必须反复执行以保持显示更新
  sevseg.refreshDisplay();
}

这段代码是一个Arduino程序,用于控制一个四位的七段数码管显示。程序使用了SevSeg库来简化数码管的控制。下面是对代码的详细解释:

包含库


cpp复制代码

#include "SevSeg.h"

首先,包含了SevSeg库,这个库提供了控制七段数码管的函数和类。

实例化对象


cpp复制代码

SevSeg sevseg;

实例化了一个SevSeg类的对象sevseg,用于后续控制数码管。

全局变量


cpp复制代码

int deciSeconds = 0;

定义了一个全局变量deciSeconds,用于记录经过的时间(这里以千分之一秒为单位,但命名可能有误导性)。

setup() 函数


cpp复制代码

void setup() {
// ...
}

setup()函数在Arduino启动或重置时运行一次,用于初始化设置。

  • 定义数码管数量和引脚
    • numDigits定义了数码管的数量,这里是4位。
    • digitPins[]segmentPins[]分别定义了控制数码管位和段的引脚。
  • 配置数码管
    • resistorsOnSegments指定了限流电阻是在段引脚上还是在数码管引脚上。
    • hardwareConfig指定了数码管的硬件配置,这里是公共阳极。
    • updateWithDelays决定了是否使用延迟来更新显示,这里设置为false以提高性能。
    • leadingZeros决定了是否保留前导零,这里设置为false
    • disableDecPoint决定了是否禁用小数点,这里设置为false(即启用小数点,但如果未连接则设置为true)。
  • 初始化数码管控制器
    • 使用sevseg.begin()函数初始化数码管控制器。
  • 设置数码管亮度
    • 使用sevseg.setBrightness()函数设置数码管的亮度,这里设置为66(可能是根据学号后两位来定的)。
  • 初始化串口通信
    • 使用Serial.begin(9600)初始化串口通信,波特率为9600。

loop() 函数


cpp复制代码

void loop() {
// ...
}

loop()函数在setup()函数之后反复执行,是Arduino程序的主循环。

  • 计时和计数
    • 使用millis()函数获取当前时间(以毫秒为单位)。
    • 通过比较当前时间和上一次记录的时间,判断是否已经过去了至少10毫秒。
    • 如果是,则更新计时器,并将deciSeconds增加1(这里实际上是以毫秒为单位计数,每秒大约增加1000)。
  • 更新数码管显示
    • deciSeconds是100的倍数时,通过串口打印出经过的秒数(但这里的计算方式有误,应该是deciSeconds/1000才是秒数)。
    • 如果deciSeconds小于等于10000,则在数码管上显示deciSeconds的值(但这里是以毫秒为单位,可能需要调整)。
    • deciSeconds大于10000且小于等于19999时,显示学号后四位(2199)。
    • deciSeconds大于19999时,重置为0并清空数码管显示。
  • 刷新数码管显示
    • 使用sevseg.refreshDisplay()函数刷新数码管显示,这一步必须反复执行以保持显示更新。

注意事项

  • 计时和显示单位:代码中deciSeconds的命名和计算方式可能导致混淆。它实际上是以毫秒为单位计数的,而不是千分之一秒(或“deciSecond”)。因此,相关的显示和计算可能需要调整。
  • 串口打印:串口打印部分用于调试或展示经过的秒数,但计算方式有误(应该是deciSeconds/1000)。
  • 亮度设置:亮度设置为66,这可能是根据某个特定要求或学号后两位来定的。实际使用时可以根据需要调整。
  • 库的使用SevSeg库简化了数码管的控制,但用户需要确保正确连接硬件并配置库函数。

 


内容概要:本文详细介绍了一个基于C++的养老院管理系统的设计与实现,旨在应对人口老龄化带来的管理挑战。系统通过整合住户档案、健康监测、护理计划、任务调度等核心功能,构建了从数据采集、清洗、AI风险预测到服务调度与可视化的完整技术架构。采用C++高性能服务端结合消息队列、规则引擎机器学习模型,实现了健康状态实时监控、智能任务分配、异常告警推送等功能,并解决了多源数据整合、权限安全、老旧硬件兼容等实际问题。系统支持模块化扩展与流程自定义,提升了养老服务效率、医护协同水平住户安全保障,同时为运营决策提供数据支持。文中还提供了关键模块的代码示例,如健康指数算法、任务调度器日志记录组件。; 适合人群:具备C++编程基础,从事软件开发或系统设计工作1-3年的研发人员,尤其是关注智慧养老、医疗信息系统开发的技术人员。; 使用场景及目标:①学习如何在真实项目中应用C++构建高性能、可扩展的管理系统;②掌握多源数据整合、实时健康监控、任务调度与权限控制等复杂业务的技术实现方案;③了解AI模型在养老场景中的落地方式及系统架构设计思路。; 阅读建议:此资源不仅包含系统架构与模型描述,还附有核心代码片段,建议结合整体设计逻辑深入理解各模块之间的协同机制,并可通过重构或扩展代码来加深对系统工程实践的掌握。
内容概要:本文详细介绍了一个基于C++的城市交通流量数据可视化分析系统的设计与实现。系统涵盖数据采集与预处理、存储与管理、分析建模、可视化展示、系统集成扩展以及数据安全与隐私保护六大核心模块。通过多源异构数据融合、高效存储检索、实时处理分析、高交互性可视化界面及模块化架构设计,实现了对城市交通流量的实时监控、历史趋势分析与智能决策支持。文中还提供了关键模块的C++代码示例,如数据采集、清洗、CSV读写、流量统计、异常检测及基于SFML的柱状图绘制,增强了系统的可实现性与实用性。; 适合人群:具备C++编程基础,熟悉数据结构与算法,有一定项目开发经验的高校学生、研究人员及从事智能交通系统开发的工程师;适合对大数据处理、可视化技术智慧城市应用感兴趣的技术人员。; 使用场景及目标:①应用于城市交通管理部门,实现交通流量实时监测与拥堵预警;②为市民出行提供路径优化建议;③支持交通政策制定与信号灯配时优化;④作为智慧城市建设中的智能交通子系统,实现与其他城市系统的数据协同。; 阅读建议:建议结合文中代码示例搭建开发环境进行实践,重点关注多线程数据采集、异常检测算法与可视化实现细节;可进一步扩展机器学习模型用于流量预测,并集成真实交通数据源进行系统验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值