【TB作品】MSP430F5529,单片机,电子秒表,秒表

news2024/11/29 8:49:54

硬件

MSP430F5529开发板+7针0.96寸OLED

/*

  • OLED引脚分配 绿色板子
  • DO(SCLK)------P4.3
  • D1(DATA)------P4.0
  • RES-----------P3.7
  • DC------------P8.2
  • CS------------P8.1
    */

程序功能

该程序是一个用C语言编写的,用于msp430f5529微控制器上的简单电子秒表应用。它使用OLED显示屏显示经过的时间,并允许用户通过两个按钮来控制开始/暂停计时以及存储并显示过往的计时结果。以下是程序的主要功能概述:

  1. 初始化时钟initClock()函数配置微控制器的时钟系统,设置DCO(数字控制振荡器)以得到8MHz的系统时钟频率,这为程序的定时提供基础。

  2. 硬件设置

    • 配置了OLED显示屏的接口引脚。
    • 设置了两个按键输入(P1.1和P2.1),用于控制秒表的开始/暂停和存储计时结果。
  3. 显示功能display()函数在OLED显示屏上显示给定的坐标位置上的时间信息,包括小时、分钟、秒和百分秒。

  4. 主循环

    • 监听按键事件,P1.1用于切换秒表的开始与暂停状态,P2.1用于保存当前时间到记录数组中。
    • 每次循环都会更新OLED屏上的当前时间显示,并根据已保存记录的数量显示历史计时结果。
    • 使用了简单的状态标志start来控制是否更新计时(即是否在计时中)。
  5. 定时中断服务例程:通过Timer_A中断(每10ms触发一次),更新毫秒级和百分秒级的时间计数。当start标志为真时,表示秒表正在运行,此时会增加计时。

  6. 记录功能:程序能存储最多三条计时结果,当用户按下P2.1按钮时,当前的计时结果会被存储到数组rtc_timeJILUrtc_time_100msJILU中,并在屏幕上显示这些记录。

综上所述,此程序设计用于实现一个具有基本计时、暂停、继续以及存储和显示多个计时结果功能的电子秒表,适用于运动计时、实验计时等多种场景。

部分程序


    while (1)
    {
        if ((!(P1IN & BIT1)) && (keyifg1 == 0)) /*按键按下 且有状态 */
        {
            start = !start; /* 开始或者暂停 */
            keyifg1 = 1; /* 失去状态 */
        }
        if ((!(P2IN & BIT1)) && keyifg2 == 0) /*按键按下 且有状态 */
        {
            keyifg2 = 1; /* 失去状态 */
            /* 增加一条记录 */
            if (jilutiaoshu == 0) /* 一条记录都没有 */
            {
                rtc_timeJILU[0] = rtc_time;
                rtc_time_100msJILU[0] = rtc_time_100ms;
            }
            else if (jilutiaoshu == 1)
            {
                rtc_timeJILU[1] = rtc_timeJILU[0];
                rtc_time_100msJILU[1] = rtc_time_100msJILU[0];

                rtc_timeJILU[0] = rtc_time;
                rtc_time_100msJILU[0] = rtc_time_100ms;
            }
            else
            { /* 已经有2条记录以上就需要轮换 */
                rtc_timeJILU[2] = rtc_timeJILU[1];
                rtc_time_100msJILU[2] = rtc_time_100msJILU[1];

                rtc_timeJILU[1] = rtc_timeJILU[0];
                rtc_time_100msJILU[1] = rtc_time_100msJILU[0];

                rtc_timeJILU[0] = rtc_time;
                rtc_time_100msJILU[0] = rtc_time_100ms;
            }

            if (jilutiaoshu < 3)
                jilutiaoshu++; /*有多少条记录 */
        }

        display(0, 0, rtc_time, rtc_time_100ms); /* 显示秒表时间 */
        if (jilutiaoshu == 1) /*有一条记录 */
        {
            display(8 * 4, 2, rtc_timeJILU[0], rtc_time_100msJILU[0]);
        }
        else if (jilutiaoshu == 2) /*有2条记录 */
        {
            display(8 * 4, 2, rtc_timeJILU[0], rtc_time_100msJILU[0]);
            display(8 * 4, 4, rtc_timeJILU[1], rtc_time_100msJILU[1]);
        }
        else if (jilutiaoshu == 3) /*有3条记录 */
        {
            display(8 * 4, 2, rtc_timeJILU[0], rtc_time_100msJILU[0]);
            display(8 * 4, 4, rtc_timeJILU[1], rtc_time_100msJILU[1]);
            display(8 * 4, 6, rtc_timeJILU[2], rtc_time_100msJILU[2]);
        }
        if ( P1IN & BIT1) /*按键松开 */
        {
            keyifg1 = 0; /* 状态恢复 */
        }
        if ( P2IN & BIT1) /*按键松开 */
        {
            keyifg2 = 0; /* 状态恢复 */
        }

        delay_ms(10);
    }
}

/* Timer A0 interrupt service routine */
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{

    if (start) /* 如果是开始的 */
    {

        rtc_time_100ms++; /* 过去了100ms */
        if (rtc_time_100ms == 100)
        {
            rtc_time_100ms = 0;
            rtc_time++; /* 过去了1秒钟 */
        }
    }
}


流程图

在这里插入图片描述

全部程序

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

相关文章

2024年如何通过完善的工程化,从0到1手把手建立个人 react 组件库

本文聚焦于快速创建并部署个人的组件库&#xff0c;方便平时开发中将通用的组件抽出&#xff0c;也可用于简历上展示个人的组件成果~ 组件库体验地址&#xff1a;components-library 关于以上内容&#xff0c;你是否好奇如何实现的&#xff0c;对于大多数项目&#xff0c;诸如…

USB Type-C 和 USB供电数据和电源角色

USB Type-C 连接器生态系统随着现代平台和设备需求的变化而不断发展。 USB Type-C 连接器生态系统可满足现代平台和设备不断变化的需求&#xff0c;并且符合更小、更薄且更轻便的外形设计趋势。此外&#xff0c;针对 Type-C 连接器修改 USB PD 有助于满足高耗电应用的需求。 …

容声冰箱正式发布主动除菌净味白皮书,守护家人饮食健康

近日&#xff0c;由中国家用电器研究院指导、全国家用电器工业信息中心和容声冰箱联合编制的《冰箱主动除菌净味技术发展白皮书》&#xff08;下称《白皮书》&#xff09;正式发布。 《白皮书》指出&#xff0c;容声将IDP主动除菌技术应用到冰箱冷冻、冷藏区域&#xff0c;实现…

百华鞋业祝莘莘学子旗开得胜,一举夺魁

在知识的海洋中&#xff0c; 有一群人以笔为剑&#xff0c; 在漫长的岁月里不断磨砺&#xff0c; 只为迎接那场人生的重要战役——高考。 高考&#xff0c; 是学子们十几年寒窗苦读的见证&#xff0c; 是他们用奋斗书写青春考卷的舞台。 在这个舞台上&#xff0c; 他们将…

硕思闪客精灵(shankejingling)软件最新版下载及详细安装教程

闪客精灵&#xff08;Sothink SWF Decompiler&#xff09;是一款先进的SWF反编译软件&#xff0c;它不但能捕捉、反编译、查看和提取Shock Wave Flash影片&#xff08;.swf和.exe格式文件&#xff09;&#xff0c;而且可以将SWF格式文件转化为FLA格式文件。它能反编译Flash的所…

YOLOv10开源,高效轻量实时端到端目标检测新标准,速度提升46%

前言 实时目标检测在自动驾驶、机器人导航、物体追踪等领域应用广泛&#xff0c;近年来&#xff0c;YOLO 系列模型凭借其高效的性能和实时性&#xff0c;成为了该领域的主流方法。但传统的 YOLO 模型通常采用非极大值抑制 (NMS) 进行后处理&#xff0c;这会增加推理延迟&#…

k8s挂载配置文件(通过ConfigMap方式)

一、ConfigMap简介 K8s中的ConfigMap是一种用于存储配置数据的API对象&#xff0c;属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离&#xff0c;以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组…

Selenium with Python Behave(BDD)

一、简介 Python语言的行为驱动开发&#xff0c;Behavior-driven development&#xff0c;简称BDD. "Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or bu…

Java锁的四种状态(无锁、偏向级锁、轻量级锁、重量级锁)

介绍 首先&#xff0c;我们需要明确一点&#xff1a;偏向级锁、轻量级锁、重量级锁只针对synchronized 锁的状态总共有四种&#xff0c;级别由低到高依次为&#xff1a;无锁、偏向锁、轻量级锁、重量级锁。 这四种锁状态分别代表什么&#xff0c;为什么会有锁升级&#xff…

项目管理--领导者vs管理者

项目管理领导者和管理者&#xff0c;虽然这两个角色在项目管理中都非常重要&#xff0c;但它们之间还是存在一些区别。首先&#xff0c;让我们来了解一下这两个角色的定义和职责。项目管理领导者是指那些能够激励团队成员&#xff0c;带领他们朝着共同目标前进的人。他们具备良…

为什么需要在微服务中使用链路追踪?Spring Cloud 可以选择哪些微服务链路追踪方案?

引言&#xff1a;在当今的软件开发领域中&#xff0c;微服务架构已经成为了构建大型应用程序的主流方式之一。随着微服务数量的增加和服务之间复杂性的提高&#xff0c;对于了解和监控服务之间的调用关系变得越来越重要。而链路追踪技术的出现&#xff0c;为解决这一难题提供了…

高效文件传输攻略:利用局域网共享实现极速数据同步

最近&#xff0c;我换了一台新电脑&#xff0c;面对两个电脑之间文件备份和传输的问题&#xff0c;感到十分头疼。经过多方了解&#xff0c;我发现可以在原电脑上设置共享文件&#xff0c;然后接收方从共享文件中接受即可&#xff0c;这样可以将局域网的带宽拉满&#xff0c;比…

【吊打面试官系列】MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

大家好&#xff0c;我是锋哥。今天分享关于 【MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xf…

项目3:从0开始的RPC框架(扩展版)

一. 全局配置加载 1. 需求分析 通常情况下&#xff0c;在RPC框架运行的会涉及到多种配置信息&#xff0c;比如注册中心的地址、序列化方式、网络服务端接口号等。 在简易版框架中&#xff0c;硬编码了这些配置&#xff0c;也就是都写死了&#xff0c;在真实的应用环境中是不…

Java——数组排序

一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类&#xff1a;内部排序和外部排序。 3、内部排序和外部排序 1&#xff09;内部排序 内部排序是指数据在内存中进行排序&#xff0c;适用于数据量较小的情况…

开源VS闭源:大模型发展路径之争,你站哪一派?

文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…

问题:下列可以作为机组投运凝结水精处理系统的指标为()。 #学习方法#经验分享#微信

问题&#xff1a;下列可以作为机组投运凝结水精处理系统的指标为&#xff08;&#xff09;。 A.启动分离器出水含铁量小于1000ug/L B.启动分离器出水含铁量大于1000ug/L C.启动分离器出水含铁量等于1000ug/L D.以上都不是 参考答案如图所示

最佳实践的实践 - API 不应将 HTTP 重定向到 HTTPS

原文&#xff1a;jviide - 2024.05.23 TL;DR: 与其将 API 调用从 HTTP 重定向到 HTTPS&#xff0c;不如让失败显而易见。要么完全禁用 HTTP 接口&#xff0c;要么返回明确的 HTTP 错误响应&#xff0c;并撤销通过未加密连接发送的 API 密钥。遗憾的是&#xff0c;许多知名的 A…

小白的学习资料:Spark MLlib 机器学习详细教程

Spark MLlib 机器学习详细教程 Apache Spark 是一个强大的开源分布式计算框架&#xff0c;广泛用于大数据处理和分析。Spark 提供了丰富的库&#xff0c;其中 MLlib 是其机器学习库&#xff0c;专为大规模数据处理设计。本教程将详细介绍 Spark MLlib&#xff0c;包括其主要功…

公司面试题总结(二)

7. 说说 JavaScript 中的数据类型&#xff1f;存储上的差别&#xff1f; • 基本类型&#xff1a; o Number o String o Boolean o Undefined o null o symbol • 引用类型 o Object o Array o Function • 声明变量时不同的内存地址分配&#xff1a; o 简单类型的…