【TB作品】MSP430F149单片机,数字时钟万年历程序,滚动显示特效

一、 万年历
任务要求:
制作一个万年历,具有显示时间、日期、温度、湿度、闹钟功能。
1、OLED显示屏上显示日期和时钟(显示到秒,时间可走动);(20分)
2、通过开发板上的温度传感器采集当前环境温度并显示在显示屏上;(20分)
3、通过湿度传感器采集当前环境湿度并显示在显示屏上;(20分)
4、通过独立按键设置闹钟,并在OLED上显示设置的闹钟时间,到达闹钟时间时蜂鸣器发出声响并持续一段时间,同时D1~D8以流水灯形式亮起;(20分)
5、日期为滚动特效;(20分)

附加题:
1、可以通过按键修改日期和时间(类似于手动调电子手表时间一样)。

【注释】
1、湿度传感器(需要领取)需要根据其使用手册和单片机原理图,由学生接到开发板上并编写湿度采集函数,更多湿度传感器信息请参考说明书或网络资料;
2、温度传感器DS18B20已焊接在手柄板上,其引脚连接查看手柄板原理图;
基本任务中,设置闹钟时,使用按键A4进行时间的上调,使用按键A5进行时间的下调,步进值为10s,即每按一次按键时间上调或下调10s。上调达到60s时,时间“分”加1;时间下调小于0s时,时间“分”减1,时间“时”的调节依此类推。
3、附加任务中,通过按键A1进行日期、时间、闹钟设置功能的切换,按键A4、A5仍为上调和下调按键,设置时间和闹钟时调节对象是“秒”,步进值为10s;设置日期时调节的对象是“日”,步进值是1日,大于一个月的最大日时,月份自动加一。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在嵌入式系统的世界里,单片机的应用几乎无处不在。今天,我将与大家分享一个利用单片机制作的万年历项目,它不仅是一个时间日期的显示工具,还具有温度、湿度显示,以及闹钟功能。通过这个项目,你将了解到如何在单片机上实现这些常见的功能。

技术细节

1. OLED 显示屏控制

项目中使用了128x64的OLED显示屏,用来显示时间、日期、温湿度等信息。通过编写相应的驱动代码,OLED显示屏可以完美地展示这些内容。显示时间与日期的功能利用了单片机的定时器来更新显示,实现了动态的秒表功能。

void UpdateDisplay(void) {// 显示当前时间sprintf(displayBuffer, "Time:%02d:%02d:%02d", nowTime.hour, nowTime.minute, nowTime.second);OLED_ShowString(0, 2, displayBuffer, 16, 1);// 显示温湿度if (sensorStatusOK) {sprintf(displayBuffer, "R:%02d%% T:%02d.%dC", humidityDataHigh, temperature / 10, temperature % 10);OLED_ShowString(0, 4, displayBuffer, 16, 1);}
}
2. 温度与湿度采集

项目使用了两种传感器来分别获取温度和湿度。DS18B20用于温度采集,DHT11用于湿度采集。通过对传感器的初始化与数据读取,成功将实时数据展示在OLED显示屏上。

unsigned int GetTemperature(void) {unsigned int temp = 0;DS18B20_Init();DS18B20_WriteByte(SKIP_ROM);DS18B20_WriteByte(CONVERT_TEMP);temp = DS18B20_ReadByte() + (DS18B20_ReadByte() << 8);return (int)(temp * 0.0625 * 10); // 返回实际温度值
}
3. 闹钟功能

在这个项目中,闹钟功能是一个亮点。当设定的时间到达时,蜂鸣器响起,LED灯以流水形式点亮,为提醒功能增添了视觉和听觉的双重效果。使用了简单的按键交互来设置闹钟时间,极大地方便了用户。

void HandleAlarm(void) {if (nowTime.hour == alarmTime.hour && nowTime.minute == alarmTime.minute && nowTime.second == alarmTime.second) {TriggerAlarmBeep();}
}
4. 用户交互

项目实现了通过按键的方式来调整时间、日期以及设置闹钟。这个功能模拟了电子手表的操作体验,用户可以通过不同的按键来切换设置模式并进行时间的上调或下调操作。

void ProcessKeyInput(int key) {if (key == 7) {  // 上调时间或日期nowTime.second += 10;// 处理分钟、小时、日期的自动进位UpdateDisplay();}
}

实验报告:万年历项目

一、实验目的

本实验旨在通过单片机开发制作一个具有多功能的万年历系统,包括显示时间、日期、温度、湿度和闹钟功能。通过完成此项目,学生将能够掌握基本的单片机编程技术、传感器数据采集、OLED显示屏控制以及闹钟功能的实现。

二、实验原理

万年历项目的核心是通过单片机采集时间、日期、温度和湿度信息,并在OLED显示屏上进行实时显示。通过使用按键可以设置时间、日期和闹钟,当时间到达设定的闹钟时间时,蜂鸣器将发出警报声,并通过流水灯形式提示用户。

项目的关键模块包括:

  1. 时间和日期管理:通过定时器中断更新时间和日期,并通过算法计算当前的星期。
  2. 温度和湿度采集:使用DS18B20温度传感器和DHT11湿度传感器采集环境数据。
  3. OLED显示屏控制:通过SPI通信接口向OLED发送数据,显示当前的时间、日期、温度和湿度。
  4. 闹钟功能:用户可以通过按键设置闹钟时间,闹钟到时蜂鸣器发声提示并通过LED流水灯进行视觉提示。
三、实验设备
  • MSP430单片机开发板
  • DS18B20温度传感器
  • DHT11湿度传感器
  • OLED显示屏
  • 蜂鸣器
  • 按键
  • LED指示灯
四、实验步骤
  1. 硬件连接

    • 将DS18B20温度传感器连接到开发板的指定引脚。
    • 根据DHT11湿度传感器的使用手册,将其接线与开发板连接。
    • 将OLED显示屏通过SPI接口与开发板相连。
    • 按照电路图连接蜂鸣器和LED。
  2. 软件设计

    • 初始化系统时钟、GPIO口、ADC模块和中断。
    • 编写DS18B20和DHT11的数据采集函数,通过定时器中断定期读取传感器数据。
    • 实现时间和日期管理功能,包括闰年判断、月份天数计算和星期计算。
    • OLED显示屏的驱动程序编写,包括字符和字符串的显示、中文显示和滚动显示特效。
    • 实现闹钟功能,通过按键设置闹钟时间,并在到达设定时间时触发蜂鸣器和LED提示。
    • 编写按键扫描函数,检测用户的按键输入,并处理日期、时间、闹钟设置。
  3. 调试与验证

    • 编写测试程序,检查温度和湿度传感器的读数是否正确显示在OLED屏上。
    • 调试时间、日期的显示与更新,确保系统能够正常滚动显示日期并正确切换月份和年分。
    • 通过按键设定闹钟,检查闹钟是否能够在设定时间响铃并亮起流水灯。
五、实验结果

在实验过程中,成功实现了以下功能:

  • 时间和日期能够准确显示在OLED屏幕上,且时间可以走动。
  • 温度传感器DS18B20和湿度传感器DHT11能够准确采集环境数据并实时显示。
  • 通过按键成功设置了闹钟,闹钟到达设定时间时,蜂鸣器发出警报声并亮起LED流水灯。
  • OLED显示屏能够正确滚动显示日期信息,且通过附加功能可以通过按键修改时间和日期。
六、实验总结

通过本次实验,熟悉了MSP430单片机的基本操作以及外设驱动编程,特别是对OLED显示屏、温度和湿度传感器的使用有了深入理解。同时,掌握了闹钟功能的实现原理,了解了如何通过按键进行时间和闹钟的设定与调整。整个项目增强了对单片机综合应用能力的认识,为日后进一步开发和优化嵌入式系统奠定了良好的基础。

code

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

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

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

相关文章

8月25日笔记

IOX的使用 iox是一款功能强大的端口转发&内网代理工具&#xff0c;该工具的功能类似于lcx和ew&#xff0c;但是iox的功能和性能都更加强大。 实际上&#xff0c;lcx和ew都是非常优秀的工具&#xff0c;但还是有地方可以提升的。在一开始使用这些工具的一段时间里&#xff…

前端常见**MS题 [3]

css部分 1、简单说明一下盒模型 CSS盒模型定义了盒的每个部分包含&#xff1a; margin, border, padding, content 。根据盒子大小的计算方式不同盒模型分成了两种&#xff0c;标准盒模型和怪异盒模型。 标准模型&#xff0c;给盒设置 width 和 height&#xff0c;实际设置的是…

C语言 | Leetcode C语言题解之第373题查找和最小的K对数字

题目&#xff1a; 题解&#xff1a; #define MIN(a, b) ((a) > (b) ? (b) : (a))int** kSmallestPairs(int* nums1, int nums1Size, int* nums2, int nums2Size, int k, int* returnSize, int** returnColumnSizes) {if (nums1Size 0 || nums2Size 0 || k < 0) {*ret…

Gerapy 分布式爬虫管理框架

什么是 Gerapy Gerapy 是一个基于 Scrapy 的分布式爬虫管理框架。它提供了一个图形化的用户界面&#xff0c;使得用户可以更方便地进行 Scrapy 项目的管理和调度。Gerapy 支持项目的创建、编辑、部署以及调度任务的管理。 功能作用 项目管理&#xff1a;Gerapy 允许用户通过 W…

数据结构系列-归并排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 归并排序 递归版本 首先&#xff0c;我们来看一下归并的示意图&#xff1a; 这是归并排序当中分解的过程。 然后便是两个两个进行排序&#xff0c;组合的过程。 归并完美的诠释…

C++类和对象(2)——拷贝构造函数

拷贝构造函数的语法 拷贝构造函数是构造函数的重载&#xff0c; 用于这种情况&#xff1a;用已经构造好的对象去给另一个对象初始化。 int main() {Date d1(2024, 8, 1);Date d2(d1);//用d1初始化d2return 0; } 我们以Date类为例子讲解一下。 class Date { public://全缺省…

【计算机网络】计算机网络的概念

什么是计算机网络&#xff1f; 计算机网络&#xff08;Computer networking&#xff09;是一个将众多分散的、自治的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 计算机网络、互连网、互联网的区别 计算机…

OpenCV几何图像变换(4)亚像素图像截取函数getRectSubPix()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从图像中以亚像素精度检索像素矩形。 getRectSubPix 函数从 src 中提取像素&#xff1a; p a t c h ( x , y ) s r c ( x center.x − ( dst.…

指针之旅(1)—— 指针基础概念知识(详细解析)

前言&#xff1a;该篇我将详细讲解指针当中的一些基本概念&#xff0c;有内存和地址的部分硬件知识&#xff0c;有专门服务于指针的操作符&和*&#xff0c;有指针大小固定不变的原因&#xff0c;还有专属于指针的运算规则。 目录 1. 内存和地址 1.1 内存地址的概念&…

<数据集>非洲动物识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1504张 标注数量(xml文件个数)&#xff1a;1504 标注数量(txt文件个数)&#xff1a;1504 标注类别数&#xff1a;4 标注类别名称&#xff1a;[buffalo, elephant, rhino, zebra] 序号类别名称图片数框数1buffalo3…

水凝胶与柔性电子啥关系?能用来干啥?

大家好&#xff0c;今天我们来聊一聊一篇关于水凝胶在柔性电子领域应用的文章——《Smart materials for flexible electronics and devices: hydrogel》发表于《RSC Advances》。随着科技的不断发展&#xff0c;柔性电子设备越来越受到关注&#xff0c;而水凝胶作为一种具有独…

Apache Flink内存模型

Flink 内存模型 大数据中所有开源的框架都会使用到JVM&#xff0c;不如&#xff0c;MapReduce&#xff0c;Storm&#xff0c;Spark等&#xff0c;这些计算框架处理数据过程中涉及到将大量数据存储到内存中&#xff0c;此时如果内存管理过渡依赖JVM&#xff0c;会出现java对象存…

docke进阶---镜像迁移、容器的ip地址、端口映射和持久化

1.镜像的迁移 1.镜像打包 #查看镜像有一个centos的镜像 [rootdocker0 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 years ago 231MB 3查看帮助文件 docker --help save Save one or more…

stm32-SD卡实验

1. SD简介 SD卡&#xff0c;Secure Digital Card&#xff0c;称为安全数字卡&#xff08;安全数码卡&#xff09;。 SD卡系列主要有三种&#xff1a;SD卡(full size)、MiniSD卡和MicroSD卡&#xff08;原名 TF卡&#xff09;。 特点&#xff1a;容量大、高安全性、体积小、传…

打包资料优化目录

这篇文章主要写一下这一次更新的几个地方&#xff0c;有对原来的代码及模型进行优化的部分&#xff0c;也有新增加的代码和模型&#xff0c;我就把几个比较典型的给列了出来。但是还有好多的更新没有在下面展示出来&#xff0c;因为一个个展示出来太复杂了。如果你对更新的内容…

暑期算法训练

目录 A.糖果&#xff08;Candy) B.小红的数组重排 C.牛牛与LCM D.子串 E.勤奋的杨老师 F.清楚姐姐跳格子 G.方块 I H.PUBG A.糖果&#xff08;Candy) 思路 &#xff1a;贪心&#xff0c;为了使操作数最少&#xff0c;我们要尽可能的先吃第二个盒子里的糖果&#x…

UE5.4 - 下载和安装

一. 简介 虚幻引擎&#xff08;Unreal Engine&#xff09;是由 Epic Games 公司推出的一款功能强大的游戏开发引擎。它于 1998 年推出第一代&#xff0c;其口号是 “全球最开放、最先进的实时 3D 创作工具”。 虚幻引擎被广泛应用于游戏产业&#xff0c;创作出了众多知名的 3…

【工具类】Java优雅的将XML转为JSON格式、XML转JSON

Java优雅的将XML转为JSON格式、XML转JSON 1. 导入依赖1.1 Maven使用1.2 Gradle使用 2. 代码编写3.运行示例 1. 导入依赖 1.1 Maven使用 <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</vers…

黑神话悟空,高清壁纸、原画,游戏截图

黑神话悟空&#xff0c;高清壁纸、原画&#xff0c;游戏截图&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/cd17c05c4f33

【STM32】驱动LCD

没买LCD屏&#xff0c;没有上机实践&#xff0c;只是学习了理论。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 屏幕接口 2 屏幕驱动的基本步骤 3 8080时序的各信号线 4 8080的读和写 5 屏…