制作简易秒表,用四位数码管显示计时时间,利用四位共阳级的数码管显示时间(从右到左依次显示秒,十秒,分,十分,当秒数到达60s时向分钟进一,当分钟达到60min时全部清零从头开始)。 使用独立按键:K4作为功能键,当第一次按下计时功能键时,秒表开始计时,并显示; 第二次按下计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计到59分59秒,将重新开始从0计时; 第三次按下计时功能键,数码管全部清零。 再次按一下计时功能键,则重复上述计时过程。

时间: 2023-08-01 12:12:29 浏览: 57
以下是使用Arduino制作简易秒表的代码: ``` // 定义引脚 const int digit1 = 2; const int digit2 = 3; const int digit3 = 4; const int digit4 = 5; const int segA = 6; const int segB = 7; const int segC = 8; const int segD = 9; const int segE = 10; const int segF = 11; const int segG = 12; const int segDP = 13; const int startStopButton = A0; // 定义变量 int currentDigit = 1; int seconds = 0; int minutes = 0; bool isRunning = false; unsigned long previousMillis = 0; void setup() { // 设置引脚模式 pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); pinMode(segA, OUTPUT); pinMode(segB, OUTPUT); pinMode(segC, OUTPUT); pinMode(segD, OUTPUT); pinMode(segE, OUTPUT); pinMode(segF, OUTPUT); pinMode(segG, OUTPUT); pinMode(segDP, OUTPUT); pinMode(startStopButton, INPUT_PULLUP); } void loop() { // 按下功能键 if (digitalRead(startStopButton) == LOW) { delay(50); // 延迟去除抖动 if (digitalRead(startStopButton) == LOW) { if (!isRunning) { // 开始计时 isRunning = true; previousMillis = millis(); } else { // 停止计时并显示时间 isRunning = false; displayTime(); } while (digitalRead(startStopButton) == LOW) {} // 等待释放按键 } } // 计时 if (isRunning) { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= 1000) { previousMillis = currentMillis; seconds++; if (seconds == 60) { seconds = 0; minutes++; if (minutes == 60) { minutes = 0; } } } displayTime(); // 显示时间 } } void displayTime() { // 数码管显示数字 digitalWrite(digit1, HIGH); digitalWrite(digit2, LOW); digitalWrite(digit3, LOW); digitalWrite(digit4, LOW); displayDigit(seconds % 10); // 右数第一位,秒个位 delay(5); digitalWrite(digit1, LOW); digitalWrite(digit2, HIGH); digitalWrite(digit3, LOW); digitalWrite(digit4, LOW); displayDigit(seconds / 10); // 右数第二位,秒十位 delay(5); digitalWrite(digit1, LOW); digitalWrite(digit2, LOW); digitalWrite(digit3, HIGH); digitalWrite(digit4, LOW); displayDigit(minutes % 10); // 右数第三位,分个位 delay(5); digitalWrite(digit1, LOW); digitalWrite(digit2, LOW); digitalWrite(digit3, LOW); digitalWrite(digit4, HIGH); displayDigit(minutes / 10); // 右数第四位,分十位 delay(5); } void displayDigit(int digit) { // 数码管显示数字 switch (digit) { case 0: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, LOW); digitalWrite(segDP, LOW); break; case 1: digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); digitalWrite(segDP, LOW); break; case 2: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, LOW); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; case 3: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; case 4: digitalWrite(segA, LOW); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; case 5: digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; case 6: digitalWrite(segA, HIGH); digitalWrite(segB, LOW); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; case 7: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); digitalWrite(segDP, LOW); break; case 8: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, HIGH); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; case 9: digitalWrite(segA, HIGH); digitalWrite(segB, HIGH); digitalWrite(segC, HIGH); digitalWrite(segD, HIGH); digitalWrite(segE, LOW); digitalWrite(segF, HIGH); digitalWrite(segG, HIGH); digitalWrite(segDP, LOW); break; default: digitalWrite(segA, LOW); digitalWrite(segB, LOW); digitalWrite(segC, LOW); digitalWrite(segD, LOW); digitalWrite(segE, LOW); digitalWrite(segF, LOW); digitalWrite(segG, LOW); digitalWrite(segDP, LOW); break; } } ``` 在这个代码中,我们使用了一个独立按键(K4)作为功能键,来控制计时的开始、停止和清零操作。我们还使用了四个共阳极的数码管来显示时间,数字从右到左依次显示秒个位、秒十位、分个位、分十位。在计时过程中,我们使用了 millis() 函数来计算时间并更新秒数和分钟数。当秒数到达60时,我们将秒数清零并将分钟数加1;当分钟数到达60时,我们将分钟数清零。在数码管显示时间时,我们使用了一个函数 displayTime() 来依次显示每一位数字,并使用另一个函数 displayDigit() 来控制数码管显示每一个数字。

相关推荐

最新推荐

recommend-type

python实现七段数码管和倒计时效果

今天小编就为大家分享一篇python实现七段数码管和倒计时效果,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

用软件延时实现00-59秒单片机计时器

用软件延时实现00-59秒单片机计时器:在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

使用vue3+elementsplus封装一个提示确认框的组件,要求将请求地址和确认框展示信息作为参数暴露出去

好的,下面是使用 Vue3 和 ElementPlus 封装一个提示确认框的组件,同时将请求地址和确认框展示信息作为参数暴露出去。 ```vue <template> <el-dialog title="确认提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose" > <p>{{ message }}</p> <span slot="footer" class="dialog-footer"> <el-button @click="di