【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,一经查实,立即删除!

相关文章

Emacs Verilog mode 简单使用指南

Emacs 是一个强大的文本编辑器,以其高度可定制和扩展能力著称。在硬件描述语言(HDL)的开发中,Verilog 是一种广泛使用的语言,而 Emacs 的 Verilog mode 为 Verilog 开发提供了强有力的支持。本文将详细介绍如何使用 Emacs Verilog mode 来高效编写 Verilog 代码,帮助读者…

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 -->…

字符输出流

在Java的IO流中专门提供了用于字符输出的流对象 PrintWriter 。该对象具有自动换行刷新缓冲字符输出流。特点是可以按行写出字符串&#xff0c;并且可通过 println(); 方法实现自动换行。 public class TestPrintWriter {public static void main(String[] args){//创建字符输…

如何轻松修改Windows远程连接的端口号

为了增强远程连接的安全性&#xff0c;最好修改默认的远程桌面协议&#xff08;RDP&#xff09;端口号。以下步骤将指导您如何修改Windows注册表中的端口设置&#xff0c;并相应地更新防火墙规则。 一、修改注册表中的端口号 打开注册表编辑器&#xff1a; 按下Win R键&#…

用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;那么就…

【六袆 - Java】Java 驱动连接Oracle数据库; Java单元测试 连接Oracle;

Java 驱动连接Oracle数据库 JDK8 Oracle驱动包 ORACLE8 测试用例代码 @Testpublic void oracleConn(){ResultSet rs = null;Statement stmt = null;Connection conn = null

股票数据集1-纳斯达克NASDAQ 100简介

数据集信息 纳斯达克 100 指数 由纳斯达克证券交易所 上市的 100 家最大的非金融公司发行的股票证券组成&#xff0c;根据公司市值设置不同权重的加权指数&#xff0c;权重还受某些规则影响如公司影响力。该指数仅限于来自单一交易所的公司&#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;会得到无限数量的零字节&…

unix环境编程编程扫描版:深度解析与实践指南

unix环境编程编程扫描版&#xff1a;深度解析与实践指南 在探索Unix环境编程的广阔天地时&#xff0c;我们如同行走在一条充满未知与奇遇的旅程中。本篇文章将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析Unix环境编程的精髓&#xff0c;帮助读者在编程的海…

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

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

树莓派设置开机自启动程序(可执行文件与python脚本)

最近调试树莓派&#xff0c;希望开机运行两个程序&#xff0c;其中一个是可执行文件&#xff0c;另一个是 python 脚本&#xff0c;他们都是无限循环的程序&#xff0c;也就是说不关机不会停止运行。中间还是遇到了很多 bug&#xff0c;现在记录一下自启动程序的设置方法以及de…