一、 万年历
任务要求:
制作一个万年历,具有显示时间、日期、温度、湿度、闹钟功能。
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显示屏上进行实时显示。通过使用按键可以设置时间、日期和闹钟,当时间到达设定的闹钟时间时,蜂鸣器将发出警报声,并通过流水灯形式提示用户。
项目的关键模块包括:
- 时间和日期管理:通过定时器中断更新时间和日期,并通过算法计算当前的星期。
- 温度和湿度采集:使用DS18B20温度传感器和DHT11湿度传感器采集环境数据。
- OLED显示屏控制:通过SPI通信接口向OLED发送数据,显示当前的时间、日期、温度和湿度。
- 闹钟功能:用户可以通过按键设置闹钟时间,闹钟到时蜂鸣器发声提示并通过LED流水灯进行视觉提示。
三、实验设备
- MSP430单片机开发板
- DS18B20温度传感器
- DHT11湿度传感器
- OLED显示屏
- 蜂鸣器
- 按键
- LED指示灯
四、实验步骤
-
硬件连接:
- 将DS18B20温度传感器连接到开发板的指定引脚。
- 根据DHT11湿度传感器的使用手册,将其接线与开发板连接。
- 将OLED显示屏通过SPI接口与开发板相连。
- 按照电路图连接蜂鸣器和LED。
-
软件设计:
- 初始化系统时钟、GPIO口、ADC模块和中断。
- 编写DS18B20和DHT11的数据采集函数,通过定时器中断定期读取传感器数据。
- 实现时间和日期管理功能,包括闰年判断、月份天数计算和星期计算。
- OLED显示屏的驱动程序编写,包括字符和字符串的显示、中文显示和滚动显示特效。
- 实现闹钟功能,通过按键设置闹钟时间,并在到达设定时间时触发蜂鸣器和LED提示。
- 编写按键扫描函数,检测用户的按键输入,并处理日期、时间、闹钟设置。
-
调试与验证:
- 编写测试程序,检查温度和湿度传感器的读数是否正确显示在OLED屏上。
- 调试时间、日期的显示与更新,确保系统能够正常滚动显示日期并正确切换月份和年分。
- 通过按键设定闹钟,检查闹钟是否能够在设定时间响铃并亮起流水灯。
五、实验结果
在实验过程中,成功实现了以下功能:
- 时间和日期能够准确显示在OLED屏幕上,且时间可以走动。
- 温度传感器DS18B20和湿度传感器DHT11能够准确采集环境数据并实时显示。
- 通过按键成功设置了闹钟,闹钟到达设定时间时,蜂鸣器发出警报声并亮起LED流水灯。
- OLED显示屏能够正确滚动显示日期信息,且通过附加功能可以通过按键修改时间和日期。
六、实验总结
通过本次实验,熟悉了MSP430单片机的基本操作以及外设驱动编程,特别是对OLED显示屏、温度和湿度传感器的使用有了深入理解。同时,掌握了闹钟功能的实现原理,了解了如何通过按键进行时间和闹钟的设定与调整。整个项目增强了对单片机综合应用能力的认识,为日后进一步开发和优化嵌入式系统奠定了良好的基础。
code
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2