基于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导入参考文献时,关…...
配置Claude Code使用Taotoken作为后端大模型服务提供方
配置Claude Code使用Taotoken作为后端大模型服务提供方 Claude Code 是一款广受开发者欢迎的编程助手工具,它默认连接至特定的模型服务。如果你希望使用 Taotoken 平台聚合的多种大模型作为 Claude Code 的后端,可以通过简单的配置来实现。Taotoken 提供…...
告别虚拟机!用Docker Compose一键部署MobSF移动安全测试环境(附动态分析替代方案)
告别虚拟机!用Docker Compose一键部署MobSF移动安全测试环境(附动态分析替代方案) 在移动应用安全测试领域,快速搭建可靠且可复用的测试环境一直是开发者和安全工程师的痛点。传统虚拟机部署方式不仅占用大量系统资源,…...
Allegro焊盘设置保姆级指南:Regular Pad、Thermal Relief、Anti-Pad到底怎么用?
Allegro焊盘设计完全手册:从参数解析到实战避坑指南 第一次打开Allegro的Pad Designer工具时,面对密密麻麻的参数选项,大多数工程师都会陷入短暂的迷茫——Regular Pad、Thermal Relief、Anti-Pad这些看似简单的选项,在实际设计中…...
从抓包到自动化:我是如何破解快手APP的token签名(__NStokensig)来爬取用户作品的
逆向工程实战:解析短视频平台API签名机制的技术探索 当我们需要从主流短视频平台获取公开数据时,往往会遇到各种API签名验证的阻碍。这些签名机制设计精巧,既保护了平台数据安全,也为技术爱好者提供了逆向研究的绝佳案例。本文将…...
SpringBoot 3.1.3 + JDK 17 实战:手把手教你从零搭建一个OAuth2.1授权服务器
SpringBoot 3.1.3 JDK 17 实战:从零构建OAuth2.1授权服务器的完整指南 在当今微服务架构盛行的时代,安全认证已成为系统设计的核心环节。OAuth2.1作为OAuth2.0的进化版本,针对实际应用中的安全漏洞和模糊定义进行了重要修正。本文将带您使用…...
初学Python者跟随教程调用Taotoken API完成第一个AI对话程序
初学Python者跟随教程调用Taotoken API完成第一个AI对话程序 1. 准备工作 在开始编写代码之前,需要完成几个必要的准备工作。首先访问Taotoken平台注册账号并获取API密钥。注册过程简单快捷,只需提供基本信息和验证邮箱即可。登录后,在控制…...
MPC-BE深度技术解析:现代Windows媒体播放器的架构设计与实现
MPC-BE深度技术解析:现代Windows媒体播放器的架构设计与实现 【免费下载链接】MPC-BE MPC-BE – универсальный проигрыватель аудио и видеофайлов для операционной системы Windows. 项目地…...
MacType字体渲染终极指南:让Windows文字显示如macOS般清晰锐利
MacType字体渲染终极指南:让Windows文字显示如macOS般清晰锐利 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 还在为Windows系统下模糊的字体显示效果而烦恼吗?作为追求极致…...
别再只会烧录了!用J-Link给STM32程序“下断点”,5分钟看懂Keil5 Debug界面每个按钮
别再只会烧录了!用J-Link给STM32程序“下断点”,5分钟看懂Keil5 Debug界面每个按钮 第一次接触Keil5的Debug界面时,我盯着那排神秘的工具栏按钮发呆了整整十分钟。RUN、STOP、Step Over...这些图标看起来像某种古老仪表的控制面板,…...
掌握AI教材写作技巧!借助AI工具,低查重产出实用教材
教材编写与AI工具应用 在教材编写过程中,原创性与合规性的协调是一个不可忽视的关键问题。尽管可以借鉴一些优秀教材中的精彩内容,但很多人会担心查重率过高。而当试图自主创作知识点时,又可能遭遇逻辑不严密和内容不准确的困扰。更重要的是…...
