【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.rhkb.cn/news/344779.html

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

相关文章

WPF Treeview控件开虚拟化后定位节点

不开虚拟化&#xff0c;可以用下面的方法直接定位 <Window x:Class"WpfApplication2.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"Main…

LabVIEW实现汽车逆变器功能测试系统

​介绍了如何利用LabVIEW开发汽车逆变器&#xff08;包括功率板和控制板&#xff09;的自动测试设备&#xff08;ATE&#xff09;&#xff0c;实现对额定800V电压、300A电流的逆变器进行功能测试。系统通过CAN2.0通讯协议&#xff0c;实现电机控制、温度传感器监测、电压校验和…

linux经典例题编程

编写Shell脚本&#xff0c;计算1~100的和 首先vi 1.sh,创建一个名为1.sh的脚本&#xff0c;然后赋予这个脚本权限&#xff0c;使用命令chmod 755 1.sh&#xff0c;然后就可以在脚本中写程序&#xff0c;然后运行。 shell脚本内容 运行结果&#xff1a; 编写Shell脚本&#xf…

IT闲谈-Kylin入门教程

目录 一、引言二、Kylin简介三、环境准备四、安装与配置五、数据导入与建模六、查询与分析七、总结 一、引言 Apache Kylin是一个开源的分布式分析引擎&#xff0c;旨在提供Hadoop/Spark之上的SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据。Kylin通过…

单链表复习 (C语言版)

目录 一.顺序表与链表的区别 二.链表概念 三.单链表 1.单链表的开始与初始化 2.单链表的打印 3.单链表的尾插 重难点&#xff1a;单链表实现时的指针详解 4.单链表的头插 5.单链表的尾删 6.单链表的头删 小结&#xff1a; 7.单链表的查找 8.在指定位置前插入数据 …

王学岗鸿蒙开发(北向)——————(四、五、六)ArkUi声明式组件

普通组件 1,注意&#xff0c;如上图&#xff0c;build只能有一个根节点 2,Entry表示程序的入口 Component表示自定义的组件 Preview表示可以预览 3&#xff0c;图片存放的地方 4&#xff0c; Image组件最好只给宽度&#xff0c;给了高度又给宽度容易失真。 build() {Row() {/…

24考研408大变化,25考研高分上岸规划+应对策略

巧了&#xff0c;我有现成的经验&#xff1a; 数学和专业课的成绩都不高不低&#xff0c;刚好够用&#xff0c;其实408想上岸&#xff0c;不仅仅要学好408&#xff0c;还要学好考研数学&#xff0c;这是我的肺腑之言&#xff0c;我复试的时候&#xff0c;我知道的那些没有进复试…

【SQLAlChemy】常见的数据类型有哪些,Column可选的参数有哪些呢?

常见数据类型与Column参数 常见类型 Integer&#xff1a;整数类型&#xff0c;对应数据库的 int 类型。Float&#xff1a;浮点数类型&#xff0c;对应数据库的 float 类型。它占用 32 位空间。Double&#xff1a;双精度浮点数类型&#xff0c;对应数据库的 double 类型&#…

鸿蒙开发接口安全:【@system.cipher (加密算法)】

加密算法 说明&#xff1a; 本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import cipher from system.ciphercipher.rsa rsa(Object): void RSA 算法加解密。 系统能力&#xff1a; SystemCapabil…

ChatTTS 文字生成语言本地模型部署

ChatTTS部署 官方信息 [ChatTTS首页](https://chattts.com/)搭建步骤 1、下载源码 git clone https://github.com/2noise/ChatTTS.git 2、按照环境 pip install torch ChatTTS pip install -r requirements.txt 3、下载模型 git clone https://www.modelscope.cn/pzc163/ch…

深入解读Prometheus Adapter:云原生监控的核心组件

一、引言 Prometheus Adapter的背景与重要性 在现代的云原生架构中&#xff0c;微服务和容器化技术得到了广泛的应用。这些技术带来了系统灵活性和扩展性的提升&#xff0c;但同时也增加了系统监控和管理的复杂度。Prometheus作为一款开源的监控系统&#xff0c;因其强大的指标…

vuInhub靶场实战系列--prime:2

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁)

【面试干货】MySQL 三种锁的级别&#xff08;表级锁、行级锁和页面锁&#xff09; 1、表级锁2、行级锁3、页面锁4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 MySQL 数据库中&#xff0c;锁是控制并发访问的重要机制&#xff0…

队列和栈的实现

本节讲解的队列与栈&#xff0c;如果你对之前的线性和链式结构顺利掌握了&#xff0c;那么下边的队列和栈就小菜一碟了。因为我们会用前两节讲到的东西来实现队列和栈。 之所以放到一起讲是因为这两个东西很类似&#xff0c;队列是先进先出结构(FIFO, first in first out)&…

独立游戏之路 -- 获取OAID提升广告收益

Unity 之 获取手机&#xff1a;OAID、IMEI、ClientId、GUID 前言一、Oaid 介绍1.1 Oaid 说明1.2 移动安全联盟(MSA) 二、站在巨人的肩膀上2.1 本文实现参考2.2 本文实现效果2.3 本文相关插件 三、Unity 中获取Oaid3.1 查看实现源码3.2 工程配置3.3 代码实现3.4 场景搭建 四、总…

Linux卸载残留MySQL【带图文命令巨详细】

Linux卸载残留MySQL 1、检查残留mysql2、检查并删除残留mysql依赖3、检查是否自带mariadb库 1、检查残留mysql 如果残留mysql组件&#xff0c;使用命令 rpm -e --nodeps 残留组件名 按顺序进行移除操作 #检查系统是否残留过mysql rpm -qa | grep mysql2、检查并删除残留mysql…

香橙派 Orange AIpro 测评记录视频硬件解码

香橙派 Orange AIpro 测评记录视频硬件解码 香橙派官网&#xff1a;http://www.orangepi.cn/ 收到了一块Orange Pi AIpro开发板&#xff0c;记录一下我的测评~测评简介如下&#xff1a;1.连接网络2.安装流媒体进行硬件解码测试3.安装IO测试 简介 Orange Pi AI Pro 是香橙派联合…

Web安全:Web体系架构存在的安全问题和解决方案

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域的一百多个知识点,持续更新。 这一章节我们需要了解w…

Git【版本控制和Git的安装介绍】

01 【版本控制和Git的安装介绍】 工程设计领域中&#xff0c;使用“版本控制”管理工程蓝图的设计过程。在 IT 开发中也可以使用版本控制思想管理代码的版本迭代。 1.目的 协同修改&#xff1a;支持在服务器对同一个文件多人协同地修改&#xff1b; 数据备份&#xff1a;同时…

力扣hot100:138. 随机链表的复制(技巧,数据结构)

LeetCode&#xff1a;138. 随机链表的复制 这是一个经典的数据结构题&#xff0c;当做数据结构来学习。 1、哈希映射 需要注意的是&#xff0c;指针也能够当做unordered_map的键值&#xff0c;指针实际上是一个地址值&#xff0c;在unordered_map中&#xff0c;使用指针的实…