2024嵌入式大作业

news/2024/7/20 14:46:51

2024年上海交通大学嵌入式课程大作业

本学年是嵌入式第一次上升到4学分,即在原本的2学分的理论课程之上增设了2学分的实验课,因而成为了一门大课。
不同老师之间大作业的要求不同,所以我把我们班的实验要求罗列出来,并谈一谈我的实现方案,希望能够作为前人的智慧,起到抛砖引玉的效果。一纲举而万目张,在这里我略去具体的代码实现,只做简要的说明,将实现留给各位,以求同学们能够在这门实验课中还能够学到些东西,同时也是为了课程的公平性做出的考量。

实验要求

一、作业概述
利用 S800 板完成一个数字时钟功能。能够实现如下功能:
1、日期的显示及设置。
2、时间的显示及设置。
3、左流水显示及右流水显示。日期,时间流水显示,速度 2 级可调。
4、调整及设置功能需要能够以 8 位按键控制,以及能够通过串行口控制。
5、开机画面最少要包括数码管及 LED 的全灭全亮闪烁 1 次,学号后 8 位闪烁一次,姓名拼音闪烁一次。
6、选做。用 LMFLASH PROGRAMMER 将 APP 通过 UART 烧录进 S800 中并运行。
7、8 位 LED 作为辅助指示,不限位置,自定义功能。
8、串行口能够进行时间及闹钟设置,能够获取时间及闹钟操作等。

其中时钟要求能够可以在休眠(即外部VCC断电,而由内部的电源供电的情况)的时候保持计数,在重新上电后能够恢复显示日历。因而这需要自己查文档实现对S800板的实时时钟实现调用。其他的部分只要理清思路就可以逐步调试完成,所以我先把课堂上没有讲过的RTC实现方法在这里概述一下,然后再展开其他功能的实现。

RTC

The RTC module is designed to keep wall time. The RTC can operate in seconds counter mode or calendar mode. A 32.768 kHz clock source along with a 15-bit predivider reduces the clock to 1 Hz. The 1 Hz clock is used to increment the 32-bit counter and keep track of seconds. In calendar mode, registers are provided which support the tracking of date, month, year and day-of-week. A match register can be configured to interrupt or wake the system from hibernate. In addition, a software trim register is implemented to allow the user to compensate for oscillator inaccuracies using software.
———— excerpt from tm4c1294ncpdt.pdf, 7.3.5 Real-Time Clock

可见,将RTC配置到Calendar模式就可以达到我们的需要,同时可以考虑使用软件补偿来校准时间,下面我们继续看如何调用时钟的API。
instrucition1
7.3.5.3章节中说明了calendar模式设置时需要注意的事项,以及该功能使用的内存器。下面我们在看看在API中如何使用该功能。在SW-TM4C-DRL-UG-2.1.4.178我们查阅到休眠时相关功能(包括RTC)在该手册的第15节中。
Hibernation API
查看我们需要的函数,发现值是使用tm类型的struct指针传递的,那么问题来了,tm结构体是怎么定义的呢?在这个文档中并没有任何说明,经过查找资料,发现原来tm结构体是C/C++中常见的定义时间的一个结构体,其定义在C的标准头文件"time.h"中可以找到。其定义如下:

struct tm {int tm_sec;         /* 秒,范围从 0 到 59        */int tm_min;         /* 分,范围从 0 到 59        */int tm_hour;        /* 小时,范围从 0 到 23        */int tm_mday;        /* 一月中的第几天,范围从 1 到 31    */int tm_mon;         /* 月,范围从 0 到 11        */int tm_year;        /* 自 1900 年起的年数        */int tm_wday;        /* 一周中的第几天,范围从 0 到 6    */int tm_yday;        /* 一年中的第几天,范围从 0 到 365    */int tm_isdst;       /* 夏令时                */
};

使用方法如下:

#include <time.h>
sttuct tm t;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【Playwright+Python】系列教程(一)环境搭建及脚本录制

一、前言 看到这个文章,有的同学会说: 六哥,你为啥不早早就写完python系列的文章。 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用,建议收藏和转发! 二、Playwright是什么? 微软开源自动化测试工具Playwright,支持…

苹果CMS 阿里云OSS插件

直接下载插件上传到CMS的addons目录解压点击启用插件点击配置插件配置完毕后进入系统菜单>附件参数配置保存方式改为阿里云OSS即可需要插件直接联系我 :vx:qianjingchuangqi本文来自博客园,作者:ikay,转载请注明原文链接:https://www.cnblogs.com/ikay/p/18255405

PPT使用技巧

PPT使用说明: 查看版本:账户 撤回次数: 自动保存: 图片压缩:(ppt图片默认是压缩的),只针对单个ppt文件 字体嵌入:解决不同电脑导致字体显示的不一样。 ppt多格式导出:如视频、图片、图片型的ppt 参考线: 默认字体: 默认样式:设置所有图形的样式清除占位符:…

点云分割网络PointConv

PDF:《PointConv: Deep Convolutional Networks on 3D Point Clouds》 CODE: https://github.com/DylanWusee/pointconv 一、大体内容 PointConv是一种在非均匀采样下对3D点云进行卷积的运算,可以用来构建深度卷积网络,其将卷积核视为由权重函数和密度函数组成的三维点的局部…

算法金 | 一个强大的算法模型:t-SNE !!

大侠幸会,在下全网同名「算法金」0 基础转 AI 上岸,多个算法赛 Top「日更万日,让更多人享受智能乐趣」t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种用于降维和数据可视化的非线性算法。它被广泛应用于图像处理、文本挖掘和生物信息学等领域,特别擅长处理高…

软件测试理论基础Part2

测试用例设计 等价类划分法有效等价类满足需求的无效等价类不满足需求的等价类划分方法操作步骤明确需求 确定有效和无效等价类 编写测试用例边界值划分法 边界范围上点处在边界上的点(正好等于)离点离上点最近的点内点范围内的点开区间,闭区间[开始值,结束值] - 闭区间,包含开…

解决Ubuntu 下 idea Dock 图标显示错乱

问题表现 通过官网下载的 idea ubuntu 安装包安装之后,默认是需要通过 sh 脚本运行的,我们可以通过在 /usr/share/applications 创建一个 .desktop 的文件,来生成一个可以被 ubuntu 识别的应用。在我的 Ubuntu 下,idea 的配置如下: [Desktop Entry]Name=IntelliJ IDEA Com…