一、 万年历 任务要求: 制作一个万年历,具有显示时间、日期、温度、湿度、闹钟功能。 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日,大于一个月的最大日时,月份自动加一。
在嵌入式系统的世界里,单片机的应用几乎无处不在。今天,我将与大家分享一个利用单片机制作的万年历项目,它不仅是一个时间日期的显示工具,还具有温度、湿度显示,以及闹钟功能。通过这个项目,你将了解到如何在单片机上实现这些常见的功能。
项目中使用了128x64的OLED显示屏,用来显示时间、日期、温湿度等信息。通过编写相应的驱动代码,OLED显示屏可以完美地展示这些内容。显示时间与日期的功能利用了单片机的定时器来更新显示,实现了动态的秒表功能。
cvoid 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);
}
}
项目使用了两种传感器来分别获取温度和湿度。DS18B20用于温度采集,DHT11用于湿度采集。通过对传感器的初始化与数据读取,成功将实时数据展示在OLED显示屏上。
cunsigned 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); // 返回实际温度值
}
在这个项目中,闹钟功能是一个亮点。当设定的时间到达时,蜂鸣器响起,LED灯以流水形式点亮,为提醒功能增添了视觉和听觉的双重效果。使用了简单的按键交互来设置闹钟时间,极大地方便了用户。
cvoid HandleAlarm(void) {
if (nowTime.hour == alarmTime.hour && nowTime.minute == alarmTime.minute && nowTime.second == alarmTime.second) {
TriggerAlarmBeep();
}
}
项目实现了通过按键的方式来调整时间、日期以及设置闹钟。这个功能模拟了电子手表的操作体验,用户可以通过不同的按键来切换设置模式并进行时间的上调或下调操作。
cvoid ProcessKeyInput(int key) {
if (key == 7) { // 上调时间或日期
nowTime.second += 10;
// 处理分钟、小时、日期的自动进位
UpdateDisplay();
}
}
本实验旨在通过单片机开发制作一个具有多功能的万年历系统,包括显示时间、日期、温度、湿度和闹钟功能。通过完成此项目,学生将能够掌握基本的单片机编程技术、传感器数据采集、OLED显示屏控制以及闹钟功能的实现。
万年历项目的核心是通过单片机采集时间、日期、温度和湿度信息,并在OLED显示屏上进行实时显示。通过使用按键可以设置时间、日期和闹钟,当时间到达设定的闹钟时间时,蜂鸣器将发出警报声,并通过流水灯形式提示用户。
项目的关键模块包括:
硬件连接:
软件设计:
调试与验证:
在实验过程中,成功实现了以下功能:
通过本次实验,熟悉了MSP430单片机的基本操作以及外设驱动编程,特别是对OLED显示屏、温度和湿度传感器的使用有了深入理解。同时,掌握了闹钟功能的实现原理,了解了如何通过按键进行时间和闹钟的设定与调整。整个项目增强了对单片机综合应用能力的认识,为日后进一步开发和优化嵌入式系统奠定了良好的基础。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!