基于CT107D单片机综合训练平台的秒表设计
1. 项目简介
在CT107D单片机综合训练平台上,利用定时器T0、数码管模块和2个独立按键(J5的2-3短接),设计一个具有清零、暂停、启动功能的秒表。秒表显示格式为:分-秒-0.05秒(即50ms),例如 08-26-18 表示8分26秒900毫秒。
-
独立按键S4:暂停/启动
-
独立按键S5:清零
-
按键均为按下有效。
本文将详细介绍代码实现,并提供完整的代码示例。
2. 硬件设计
2.1 硬件模块
-
单片机:STC89C52RC
-
数码管模块:用于显示时间,格式为
分-秒-0.05秒。 -
独立按键:
-
S4:暂停/启动
-
S5:清零
-
-
定时器T0:用于计时,每50ms触发一次中断。
2.2 硬件连接
-
数码管段选接P0口,位选接P2口。
-
独立按键S4接P3^3,S5接P3^2。
3. 软件设计
3.1 功能设计
-
定时器T0:每50ms触发一次中断,用于更新秒表时间。
-
数码管显示:显示当前时间,格式为
分-秒-0.05秒。 -
按键功能:
-
S4:按下后切换秒表的启动和暂停状态。
-
S5:按下后清零秒表时间。
-
3.2 代码实现
以下是完整的代码实现:
#include <REGX52.H>
// 数码管段码表
unsigned char code SMG[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf, 0x7f};
// 时间变量
unsigned char t_min = 0; // 分钟
unsigned char t_s = 0; // 秒
unsigned char t_ms = 0; // 0.05秒单位
// 按键定义
sbit S4 = P3^3; // 暂停/启动
sbit S5 = P3^2; // 清零
// 选择HC573锁存器
void SelectHC573(unsigned char channel)
{
switch(channel)
{
case 4: P2 = (P2 & 0x1f) | 0x80; break;
case 5: P2 = (P2 & 0x1f) | 0xa0; break;
case 6: P2 = (P2 & 0x1f) | 0xc0; break;
case 7: P2 = (P2 & 0x1f) | 0xe0; break;
}
}
// 数码管显示函数
void Display_SMG(unsigned char value, unsigned char site)
{
SelectHC573(6); // 选择位选锁存器
P0 = 0x01 << site; // 选择数码管位
SelectHC573(7); // 选择段选锁存器
P0 = value; // 显示段码
}
// 显示时间函数
void Display_Timer()
{
Display_SMG(SMG[t_ms % 10], 7); // 显示0.05秒个位
Display_SMG(SMG[t_ms / 10], 6); // 显示0.05秒十位
Display_SMG(SMG[16], 5); // 显示分隔符“-”
Display_SMG(SMG[t_s % 10], 4); // 显示秒个位
Display_SMG(SMG[t_s / 10], 3); // 显示秒十位
Display_SMG(SMG[16], 2); // 显示分隔符“-”
Display_SMG(SMG[t_min % 10], 1); // 显示分钟个位
Display_SMG(SMG[t_min / 10], 0); // 显示分钟十位
}
// 定时器初始化函数
void InitTimer()
{
TMOD = 0x01; // 定时器T0模式1
TL0 = (65535 - 50000) % 256; // 50ms定时初值
TH0 = (65535 - 50000) / 256;
ET0 = 1; // 使能定时器T0中断
EA = 1; // 使能总中断
TR0 = 1; // 启动定时器T0
}
// 定时器T0中断服务函数
void ServiceTimer() interrupt 1
{
TL0 = (65535 - 50000) % 256; // 重装初值
TH0 = (65535 - 50000) / 256;
t_ms++; // 0.05秒单位加1
if (t_ms == 20) // 1秒到
{
t_s++; // 秒加1
t_ms = 0;
if (t_s == 60) // 1分钟到
{
t_min++; // 分钟加1
t_s = 0;
if (t_min == 100) t_min = 0; // 分钟溢出清零
}
}
Display_Timer(); // 刷新数码管显示
}
// 按键扫描函数
void Scanf_Key()
{
static bit key_state = 1; // 按键状态
if (S4 == 0 && key_state) // 检测S4按下
{
Delay(20); // 简单去抖
if (S4 == 0)
{
TR0 = ~TR0; // 切换启动/暂停
key_state = 0;
}
}
else if (S4 == 1)
{
key_state = 1; // 按键释放
}
if (S5 == 0) // 检测S5按下
{
Delay(20); // 简单去抖
if (S5 == 0)
{
t_min = 0; // 清零时间
t_s = 0;
t_ms = 0;
while (S5 == 0); // 等待按键释放
}
}
}
// 主函数
void main()
{
InitTimer(); // 初始化定时器
while (1)
{
Scanf_Key(); // 扫描按键
}
}
4. 代码解析
4.1 定时器T0
-
定时器T0设置为模式1,每50ms触发一次中断。
-
在中断服务函数
ServiceTimer()中,更新时间变量t_ms、t_s和t_min,并刷新数码管显示。
4.2 数码管显示
-
使用
Display_Timer()函数显示当前时间,格式为分-秒-0.05秒。 -
通过
SelectHC573()函数选择数码管位选和段选锁存器。
4.3 按键功能
-
S4:按下后切换秒表的启动和暂停状态。
-
S5:按下后清零秒表时间。
5. 总结
本文基于CT107D单片机综合训练平台,设计了一个具有启动、暂停和清零功能的秒表。通过定时器T0实现精确计时,数码管显示时间,独立按键控制秒表状态。代码结构清晰,功能完善,适合初学者学习和参考。
6. 参考资料
-
STC89C52RC数据手册
-
CT107D单片机综合训练平台用户手册
版权声明:本文为博主原创文章,转载请注明出处。
作者:[杜子不疼]
希望这篇博客对你有所帮助!如果有任何问题,欢迎在评论区留言讨论。
相关文章:
基于CT107D单片机综合训练平台的秒表设计
1. 项目简介 在CT107D单片机综合训练平台上,利用定时器T0、数码管模块和2个独立按键(J5的2-3短接),设计一个具有清零、暂停、启动功能的秒表。秒表显示格式为:分-秒-0.05秒(即50ms),…...
opensuse [Linux] 系统挂在新的机械硬盘
opensuse [Linux] 系统挂在新的机械硬盘 需求描述 自用电脑型号如下: 电脑:Precision Tower 7810 (Dell Inc.) CPU : Intel Xeon CPU E5-2686 v4 2.30GHz GPU: NVIDIA GeForce GTX 1070 Linux版本:Linux version 6.…...
时间序列分析(四)——差分运算、延迟算子、AR(p)模型
此前篇章: 时间序列分析(一)——基础概念篇 时间序列分析(二)——平稳性检验 时间序列分析(三)——白噪声检验 一、差分运算 差分运算的定义:差分运算是一种将非平稳时间序列转换…...
【CUDA】Triton
【CUDA】Triton 1. CUDA 与 Triton 的基本区别 CUDA 编程模型: 在传统的 CUDA 编程中,CUDA 是标量程序,带有阻塞线程(blocked threads)。 标量程序(Scalar Program):表示我们直接…...
Windows环境搭建ES集群
搭建步骤 下载安装包 下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.27-windows-x86_64.zip 解压 解压并复制出3份 es-node1配置 config/elasticsearch.yml cluster.name: xixi-es-win node.name: node-1 path.data: D:\\wor…...
langchain学习笔记之消息存储在内存中的实现方法
langchain学习笔记之消息存储在内存中的实现方法 引言背景消息存储在内存的实现方法消息完整存储:完整代码 引言 本节将介绍 langchain \text{langchain} langchain将历史消息存储在内存中的实现方法。 背景 在与大模型交互过程中,经常出现消息管理方…...
怎么在智能合约中植入deepseek
怎么在智能合约中植入deepseek 这里写目录标题 怎么在智能合约中植入deepseek方法概述具体步骤1. 部署大语言模型到链下2. 创建预言机(Oracle)a. 部署预言机节点b. 创建自定义预言机接口(Custom Oracle)3. 设计智能合约a. 编写Solidity代码b. 部署智能合约4. 调用流程注意事…...
驱动开发系列37 - Linux Graphics 2D 绘制流程(二)- 画布创建和窗口关联
一:概述 前面介绍Pixmap表示一块画布,是绘制发生的地方,本节看看驱动程序如何为画布分配内存/显存,以及如何与窗口关联的。 二:为画布分配BO 在系统启动时(用户登录系统之后,会重启Xorg),在 Xorg 服务器初始化时,要为屏幕创建根窗口的 Pixmap,并绑定到 GPU framebu…...
B. Longest Divisors Interval
time limit per test 2 seconds memory limit per test 256 megabytes Given a positive integer nn, find the maximum size of an interval [l,r][l,r] of positive integers such that, for every ii in the interval (i.e., l≤i≤rl≤i≤r), nn is a multiple of ii. …...
前端与后端的对接事宜、注意事项
前端与后端的对接事宜、注意事项 一、对接核心流程(完整生命周期) #mermaid-svg-6yzij6OD8DKqiMLD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6yzij6OD8DKqiMLD .error-icon{fill:#552222;}#mermaid-svg-6yzi…...
【第13章:自监督学习与少样本学习—13.2 少样本学习(FSL)与元学习(Meta-Learning)的基础理论与应用案例】
凌晨三点的急诊室,值班医生李大夫正在使用AI辅助诊断系统——面对一张仅有3个标注病例的罕见皮肤病影像,系统竟然给出了95%置信度的准确诊断。这种"见微知著"的超能力,正是少样本学习技术创造的医学奇迹。 一、突破数据荒漠:少样本学习的生存法则 1.1 从人类学习…...
函数防抖和节流
所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次, 如果在 n 秒内又触发了事件,则会重新计算函数执行时间, 短时间高频率触发只有最后一次触发成功 开发使用场景: 搜索框防抖 fn代表要被防抖或者节流的函数&#x…...
linux--关于linux文件IO(2) open、read、lseek、stat
open 在linux中的读写文件有对应的命令。在终端中输入man 2 open可以打开open的手册页,注意man 2是linux自己的函数的一些手册,man 3是C库的手册 打开手册页之后找到open函数的用法如下: #以下是需要的库文件,man 2 open打开直接…...
利用xtquant高效获取财务数据:量化分析的重要补充
利用xtquant高效获取财务数据:量化分析的重要补充 在量化交易领域,虽然市场行情数据是核心,但财务数据作为企业基本面的重要反映,同样不可忽视。通过深入分析企业的财务报表,投资者可以更好地理解企业的经营状况和未来…...
Unity UI个人总结
个人总结,太简单的直接跳过。 一、缩放模式 1.固定像素大小 就是设置一个100x100的方框,在1920x1080像素下在屏幕中长度占比1/19,在3840x2160,方框在屏幕中长度占比1/38。也就是像素长款不变,在屏幕中占比发生变化 2.…...
Javascript的数据类型
Javascript的数据类型 1.基本数据类型1.1七种基本数据类型1.2单独说说BigInt1.3其它注意点 2.引用数据类型3.基本数据类型和引用数据类型的区别4.双等于号和三等于号的区别5.Javascript的类型转换机制5.1显示转换(强制转换)5.2隐式转换(1)减、乘、除(2)加(加法要区别算,因为不…...
Day3 25/2/16 SUN
【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…...
欧洲分组加密算法之Kasumi
目录 (1)FL函数 (2)FO函数 (3)FI函数 密钥扩展算法 欧洲分组加密算法之Kasumi Kasumi分组密码算法是由欧洲标准机构ETSI(European Telecommunications Standards Institute)下属的安全算法组于1999年设计的,被用于构造A5/3、GEA3、f8和f9算法,参与移动通信系统无线…...
vue使用v-chart的实践心得
开发Vue2和Vue3时,我们常常需要将数据以图表的形式展示给用户,而 V-Chart 作为一个轻量级且易于集成的图表库,是 Vue 开发的首选。这篇文章,我将写一下关于我在使用这方面的心得。 echarts官网:https://echarts.apach…...
Endnote使用笔记——持续更新
(1)如果样式库里没有想要的期刊格式,可以到这个网址进行下载,并放在本地安装Endnote的文件下边的styles文件里: https://endnote.com/downloads/styles/ (2)EndNote导入参考文献时,关…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
