【TB作品】MSP430F5529 单片机,数字时钟设计与实现,整点时通过蜂鸣器播放音乐进行报时

基于单片机的数字时钟设计与实现

作品名称

基于MSP430单片机的OLED显示数字时钟

作品功能

本作品实现了一个具有时间显示和整点报时功能的数字时钟。通过OLED屏幕显示当前时间,用户可以通过按键设置时间,并在整点时通过蜂鸣器播放音乐进行报时。

作品的硬件材料

  1. MSP430 单片机
  2. OLED 显示屏
  3. 蜂鸣器
  4. 按键(4个)
  5. 电阻和电容若干
  6. 面包板和连接线

电子元器件连接

以下是各电子元器件与MSP430单片机的连接方式:

OLED 显示屏

  • VCC 接 3.3V
  • GND 接 GND
  • SCL 接 P2.0
  • SDA 接 P2.2

按键

  • KEY1 接 P1.2(共GND)
  • KEY2 接 P1.3(共GND)
  • KEY3 接 P1.4(共GND)
  • KEY4 接 P1.5(共GND)

蜂鸣器

  • VCC 接 3.3V
  • GND 接 GND
  • DAT 接 P4.3

部分程序功能简介

本程序主要包括初始化时钟、设置RTC、按键读取、显示更新和整点报时等功能。

初始化时钟

通过以下函数设置系统时钟为8MHz:

void initClock(void) {UCSCTL3 = SELREF_2; // 设置DCO FLL参考为REFOUCSCTL4 |= SELA_2;  // 设置ACLK为REFOUCSCTL0 = 0x0000;   // 设置最低可能的DCOx, MODxdo {UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);  // 清除XT2,XT1,DCO故障标志SFRIFG1 &= ~OFIFG;  // 清除故障标志} while (SFRIFG1 & OFIFG); // 检测振荡器故障标志__bis_SR_register(SCG0); // 禁止FLL控制环路UCSCTL1 = DCORSEL_5; // 设置DCO范围为16MHz操作UCSCTL2 |= 249; // 设置DCO倍增器为8MHz__bic_SR_register(SCG0); // 启用FLL控制环路__delay_cycles(250000); // 延时以稳定DCO
}

设置RTC

通过以下函数设置RTC(实时时钟)模块:

void SetupRTC(void) {RTCCTL01 = RTCHOLD + RTCMODE + RTCTEV_0; // 关闭RTCRTCYEAR = 2024; // 设置年份RTCMON = 5; // 设置月份RTCDAY = 13; // 设置日期RTCHOUR = 23; // 设置小时RTCMIN = 12; // 设置分钟RTCSEC = 12; // 设置秒数RTCDOW = 1; // 设置星期RTCCTL0 |= RTCRDYIE; // 使能RTC就绪中断RTCCTL01 &= ~RTCHOLD; // 打开RTC
}

按键读取

通过以下函数读取按键状态:

unsigned char read_key(void) {unsigned char key = 0;if ((P1IN & BIT2) == 0) {key = 1; // 按键1按下} else if ((P1IN & BIT3) == 0) {key = 2; // 按键2按下} else if ((P1IN & BIT4) == 0) {key = 3; // 按键3按下} else if ((P1IN & BIT5) == 0) {key = 4; // 按键4按下}return key;
}

显示更新

通过以下函数更新OLED显示内容:

void display_all(void) {memset(buf, 0, sizeof(buf));sprintf(buf, "%04d-%02d-%02d", nian, yue, ri); // 格式化日期OLED_ShowString(16, 2, buf, 0); // 显示日期memset(buf, 0, sizeof(buf));sprintf(buf, "%02d:%02d:%02d", shi, fen, miao); // 格式化时间OLED_ShowString(16, 4, buf, 0); // 显示时间// 高亮显示根据mode的值选择的部分if (mode == 1) {sprintf(buf, "%04d", nian);OLED_ShowString(16, 2, buf, 1);} else if (mode == 2) {sprintf(buf, "%02d", yue);OLED_ShowString(16 + 5 * 8, 2, buf, 1);} else if (mode == 3) {sprintf(buf, "%02d", ri);OLED_ShowString(16 + 8 * 8, 2, buf, 1);} else if (mode == 4) {sprintf(buf, "%02d", shi);OLED_ShowString(16, 4, buf, 1);} else if (mode == 5) {sprintf(buf, "%02d", fen);OLED_ShowString(16 + 3 * 8, 4, buf, 1);} else if (mode == 6) {sprintf(buf, "%02d", miao);OLED_ShowString(16 + 6 * 8, 4, buf, 1);}
}

整点报时

当达到整点时,通过蜂鸣器播放音乐:

if (integral_point == 1) { // 如果到达整点integral_point = 0;u = 0, t = 0;while (music0[u] != 0xff) { // 播放音乐TA0CCR0 = SYSCLK / music0[u] / 2;TA0CTL = TASSEL_2 + MC_1 + TACLR + ID_3;for (t = 0; t < music0_JP[u]; t++) {delay1();}u++;}
}

总结

通过本项目,熟悉了MSP430单片机的基础功能,如时钟设置、按键读取和OLED显示。同时,结合蜂鸣器实现了整点报时功能,为单片机应用提供了实用案例。这个数字时钟不仅展示了基本的电子设计和编程能力,还提供了可扩展的基础,适合进一步添加更多功能。

全部代码下载

咨询问询请访问:

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

在这里插入图片描述

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

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

相关文章

MySQL JDBC编程

前言&#x1f440;~ 上一章我们介绍了数据库的索引与事务&#xff0c;本章节我们介绍JDBC编程&#xff0c;使用java代码和数据库打交道 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&#xff0c;关注一手不迷路&#xff0c;如果内容有什么问题的话&#xff0c;欢迎各…

双指针算法题笔记

1、移动零 class Solution {public void moveZeroes(int[] nums) {int left0;int right0;for(right0;right<nums.length;right){if(nums[right]!0){if(nums[left]0){int tempnums[left];nums[left]nums[right];nums[right]temp;}left;}}} } 两个指针将一个数组划分三个部分&…

使用OpenPCDet训练与测试多传感器融合模型BEVFusion,OPenPCdet代码架构介绍

引言 在自动驾驶领域&#xff0c;多传感器融合技术是一种常见的方法&#xff0c;用于提高感知系统的准确性和鲁棒性。其中&#xff0c;BevFusion是一种流行的融合方法&#xff0c;可以将来自不同传感器的数据进行融合&#xff0c;生成具有丰富信息的鸟瞰图&#xff08;BEV&…

探索800G数据中心的高速布线解决方案

随着技术的快速进步&#xff0c;数据中心正以前所未有的速度迅速发展。虽然100G和400G数据中心已经普及&#xff0c;但800G数据中心正逐渐流行并展现出增长趋势。由于对高速数据传输的需求呈指数级增长&#xff0c;因此需要高效、可靠的线缆连接解决方案。本文将介绍800G数据中…

Cell-在十字花科植物中年生和多次开花多年生开花行为的互相转化-文献精读21

Reciprocal conversion between annual and polycarpic perennial flowering behavior in the Brassicaceae 在十字花科植物中年生和多次开花多年生开花行为的互相转化 亮点 喜马拉雅须弥芥 和 内华达糖芥 是两个多年生植物模型 MADS-box 基因的剂量效应决定了一年生、二年生…

[图解]企业应用架构模式2024新译本讲解11-领域模型4

1 00:00:00,160 --> 00:00:01,870 好&#xff0c;到这里的话 2 00:00:02,620 --> 00:00:05,060 文字处理器的产品对象就生成了 3 00:00:06,880 --> 00:00:09,180 同样下面就是电子表格 4 00:00:10,490 --> 00:00:11,480 电子表格也同样的 5 00:00:11,490 -->…

用python编撰一个电脑清理程序

自制一个电脑清理程序&#xff0c;有啥用呢&#xff1f;在电脑不装有清理软件的时候&#xff0c;可以解决自己电脑内存不足的情况。 1、设想需要删除指定文件夹中的临时文件和缓存文件。以下是代码。 import os import shutil def clean_folder(folder_path): for root,…

11 IP协议 - IP协议头部

什么是 IP 协议 IP&#xff08;Internet Protocol&#xff09;是一种网络通信协议&#xff0c;它是互联网的核心协议之一&#xff0c;负责在计算机网络中路由数据包&#xff0c;使数据能够在不同设备之间进行有效的传输。IP协议的主要作用包括寻址、分组、路由和转发数据包&am…

计算机网络 期末复习(谢希仁版本)第4章

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…

2024 vite 静态 scp2 自动化部署

1、导入库 npm install scp2 // 自动化部署 npm install chalk // 控制台输出的语句 npm install ora2、核心代码 创建文件夹放在主目录下的 deploy/index.js 复制粘贴以下代码&#xff1a; import client from scp2; import chalk from chalk; import ora from ora;const s…

K8s速览

k8s的核心能力 ● 服务发现与负载均衡 ● 服务恢复 ● 服务伸缩 ● 自动发布与回滚 ● 批量执行 架构 server-client两层架构&#xff0c;Master作为中央管控节点&#xff0c;会和每一个Node进行一个连接&#xff1b; 所有UI层&#xff0c;client的操作&#xff0c;只会和Mat…

详解linux设备下的/dev/null

/dev/zero是一个特殊的设备文件&#xff0c;它在Linux系统中通常被用来生成无限数量的零数据流。 这个设备文件位于/dev目录下&#xff0c;它不代表任何实际的硬件设备&#xff0c;而是一个虚拟设备。 当从/dev/zero设备中读取数据时&#xff0c;会得到无限数量的零字节&…

【机器学习】因TensorFlow所适配的numpy版本不适配,用anaconda降低numpy的版本

目录 0 TensorFlow最高支持的numpy版本 1 激活你的环境&#xff08;如果你正在使用特定的环境&#xff09; 2 查找可用的NumPy版本 3 安装特定版本的NumPy 4. 验证安装 5.&#xff08;可选&#xff09;如果你更改了base环境 0 TensorFlow最高支持的numpy版本 要使用 …

Python | Leetcode Python题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution:def minCut(self, s: str) -> int:n len(s)g [[True] * n for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(i 1, n):g[i][j] (s[i] s[j]) and g[i 1][j - 1]f [float("inf")] * nfor …

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例&#xff08;1&#xff09;部署一个服务&#xff08;2&#xff09;创建HPA对象&#xff08;3&#xff09;执行压测 前言…

安装node

下载地址 Node.js — Run JavaScript Everywhere 按照下面的图操作即可 然后就下载完了。

【Vue】声明式导航-导航链接

文章目录 一、引入二、解决方案三、代码示例四、声明式导航-两个类名1&#xff09;router-link-active2&#xff09;router-link-exact-active 一、引入 但凡说到声明式导航&#xff0c;都需要想到router-link 需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要…

【网络编程开发】8.TCP连接管理与UDP协议 9.IP协议与ethernet协议

8.TCP连接管理与UDP协议 三次握手 三次握手的过程在TCP/IP网络通信中起着至关重要的作用&#xff0c;它不仅确保了数据的可靠传输&#xff0c;还为两端的数据传输提供了稳定的连接初始化过程。这一过程涉及到几个关键步骤&#xff0c;每个步骤都有其特定的目的和功能。 步骤&…

算法人生(21):从“React框架”看“情绪管理”

说起React框架&#xff0c;我们知道它是一种由Facebook开发和维护的开源JavaScript库&#xff0c;主要用于构建用户界面&#xff0c;特别是单页应用程序&#xff08;SPA&#xff09;。React框架围绕组件化&#xff0c;即把用户界面拆分为可复用的独立组件&#xff0c;每个组件负…

SM481,SM432和利时DCS备件

SM481,SM432和利时DCS备件。POU名只能包含字母、数字、下划线&#xff0c;第一个字符必须是字母或者下划线&#xff0c;且遵循以下原则&#xff1a;SM481,SM432和利时DCS备件。关于重名&#xff0c;不能与变量名、变量组名、POU文件夹名、任务名、SM481,SM432和利时DCS备件。工…