SIC实验室23届第八次学习目标

SIC实验室23届第八次学习目标

三月 09, 2024


上学期的最后,我们学习了矩阵键盘与LCD1602,现在我们继续学习关于51单片机的后续内容。


SIC-LOGO

前言

很高兴还能与各位在新学期再次见面!

考虑到:

  • PDF文档需要专门的编辑软件,过于复杂。Markdown格式相对于PDF格式更容易编辑和维护。
  • Markdown是一种纯文本格式,几乎所有操作系统和平台都支持。这意味着我们可以轻松地查看和编辑Markdown文档,而不依赖特定的软件或平台。
  • PDF文档则需要进行专门的排版编辑,而Markdown格式更注重内容而非样式,这使得文档更加专注于内容本身,而不会受到样式的限制。
  • Markdown是一种开放标准,拥有庞大的生态系统和社区支持。
  • 在PDF文档上复制代码存在困难。

从本次学习目标开始,我们不再使用pdf格式进行发布,而改为使用md格式或txt格式。盼望各位同学理解。

学习内容

上学期的最后,我们学习了矩阵键盘与LCD1602,现在我们继续学习关于51单片机的后续内容。

中断系统

在单片机应用系统中,中断技术主要用于实时监测与控制,也就是要求单片机能及时地响应中断请求源提出的服务请求,进行快速响应并及时处理,因此,我们必须了解单片机的中断技术。

单片机的中断是由单片机片内的中断系统来实现的,当中断请求源(简称中断源)发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断服务程序处理中断服务请求,处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。

如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否有服务请求的定时查询操作上,即不论是否有服务请求,都必须去查询,单片机采用中断技术后,则完全消除了查询方式中的等待现象,这大大地提高了单片机的实时性和工作效率。由于中断工作方式的优点极为明显,因此,单片机的片内都集成有中断系统硬件模块。

我们应该了解与中断系统有关的特殊功能寄存器,如何来对中断系统进行初始化编程,中断响应的条件,如何撤销中断请求,掌握如何进行中断系统应用的编程。

定时器/计数器

在工业检测、控制中,也包括本实验室参与的竞赛中,许多场合都要用到计数或定时功能。例如,镜头组每秒要获取20~50幅赛道图像进行处理、越野组必须以固定频率对车辆进行姿态解算等。

我们应该了解51单片机片内定时器/计数器的结构、功能、工作原理、有关的特殊功能寄存器、工作模式和工作方式的选择、掌握定时器/计数器的C51编程以及应用案例。


简单来说,这些东西会用即可。

任务目标

通过实验室内51单片机开发板或Proteus仿真制作一个秒表,用七段数码管或者LCD1602显示计时时间,最小计时单位为“百毫秒”,计时范围为0.1~9.9s。当第1次按下并松开计时功能键时,秒表开始计时并显示时间;第2次按下并松开计时功能键时,停止计时;第3次按下计时功能键,秒表清零,再按1次计时功能键,重新开始计时。如果计时到9.9s时,将停止计时,按下计时功能键,秒表清零,再按下重新开始计时。

你应该在2024年3月24日20:40前将你的完整源代码发送给我。

额外的挑战

下面是一个有趣的问题(大概),如果感兴趣的话可以试试看。

大整数是指位数超过常规整数类型(如int或long)表示范围的整数,例如:123456789012345678901234567890。在计算机科学中,常规整数类型的位数通常是固定的,因此无法表示超出其范围的整数。

大整数通常是通过字符串或数组来表示的,其中每个元素代表整数的一位数字。由于大整数可以具有任意位数,因此可以存储比常规整数类型更大的数字。在执行大整数运算时,需要采用特殊的算法来处理超出常规整数范围的数值。

试用C语言实现一算法,接受两个大整数字符串的输入,并按从左到右的阅读顺序将其相加,不能先将两个整数倒转后再做加法,然后输出计算的结果。

1
2
3
4
例如:

输入:"147258369789456123"、"987654321963852741"
输出:"1134912691753308864"

代码的框架已经在下面给出,你只需要补全add函数中的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <string.h>

#define MAX_DIGITS 1000

// 函数声明
void add(char num1[], char num2[], char result[]);

int main() {
char num1[MAX_DIGITS], num2[MAX_DIGITS], result[MAX_DIGITS + 1];

printf("输入第一个大整数:");
scanf("%s", num1);

printf("输入第二个大整数:");
scanf("%s", num2);

// 调用函数进行大整数加法
add(num1, num2, result);

printf("两个大整数的和为:%s\n", result);

return 0;
}

// 大整数加法函数
void add(char num1[], char num2[], char result[]) {

// 在这里补全代码

// 注意结果数组以空字符结尾
}

立足培养、重在参与、鼓励探索、追求卓越


以上是正文内容。

除非另有声明,本站所有作品均根据 CC BY-NC-SA 4.0 协议进行许可。



除非另有声明,本站所有作品均根据 CC BY-NC-SA 4.0 协议进行许可。


ICP Icon 萌ICP备20246280号 | Travel Icon 异次元之旅