目录

  • 1. 数字信号与模拟信号
  • 2. A/D转换
    • 2.1. A/D 的基本概念
    • 2.2. A/D 的主要指标
    • 2.3. 典型的 A/D 转换器芯片 ADC0809
    • 2.4. 实验
  • 3. D/A 转换
    • 3.1 D/A 的基本概念
    • 3.2. D/A 的重要指标
    • 3.3. 典型的 D/A 转换芯片 DAC0832
      • 3.3.1. DAC0832 芯片概述
      • 3.3.2. DAC0832 的内部结构
      • 3.3.3. DAC0832 的引脚
      • 3.3.4. DAC0832 的工作方式
    • 3.4. 实验

1. 数字信号与模拟信号

要记录一段美妙的音乐,我们至少有两种方式。第一种是使用黑胶唱片,第二种是使用数码文件。

任何一种音乐本质来说,都是一种跟随时间不断变化的信号,如下图(a)所示。它本身具有如下特点:

  1. 在时间轴上,信号是连续的,即每一个时刻都对应一个确定的信号。
  2. 信号在纵轴上也是连续的,即其任意一个点的实际信号值都是无限精细的。

这种信号我们将其称之为模拟信号。世界上任何客观存在的信号都是模拟信号。

将这样的信号,用机器压制到一个塑料唱片上,就形成了对音乐信号的记录。将这个唱片放入留声机中,唱针位置不动而唱片匀速运动,就导致唱针上下运动,引起喇叭发出与音乐完全相同的声音信号,如图(b)。理论上这个记录、重现的过程,是完全保真的。
但是这种方法的弊端也是巨大的:随着唱片播放次数的增加,唱针对唱片上的形状会带来磨损,导致一些原本尖锐的形状就会变得圆滑,使得声音的高频分量越来越小。

现今能够保存模拟音乐信号的媒介只有唱片和磁带,都存在上述弊端。

如果能够将音乐信号用数字记录在纸上或者其它数字媒介上,那么它将永远不会被磨损。记录方法是,以固定采样率,比如10ps一次,对音乐信号进行采样,获得每个采样点音乐信号的量化值,按照顺序记录这些量化值,就永久性的保存了音乐信号。图(c),红色样点在外形上基本与原始音乐信号吻合,记录成数据依次为:0,99,189,255,190,101,0….44,0。这些被记录的数字,就是数字信号。

数字信号有两个特点:

  1. 在时间轴上,它是离散的;
  2. 在纵轴上,它是被量化的。

如果在时间轴上的离散点特别细密,比如由10μs采样一次改为1ns采样一次,并且在纵轴上的量化是无限精细的,比如图中的 99 变为 988547823,那么它可以非常接近原始信号。当然,这样的后果是,原本两行数字就可以完成的信号记录,就会写满几十页纸。

没有人会把数字信号记录在纸上,这太费事了。实际上,数字信号可以用多种媒介保存,比如计算机的存储器、硬盘、U盘、SD 卡、光盘等。大家广泛使用的MP3播放器,就是利用数字信号存储和回放的。它以192ksps的采样率,16位以上的量化分辨率对音乐信号进行数字化,基本可以保证音质不受影响。当然,如果你想听到更加逼真的音乐效果,可以采用更高的采样率,更高位数分辨率,使其时间轴和纵轴均非常细密,这样的话,一首几分钟的歌曲,可能会占用多达GB的存储容量,而现在一般的MP3歌曲,一首歌只有大约几MB的存储容量。

将原本连续的模拟信号转变成离散、量化的数字信号,虽然可能带来一些微弱的失真,但是由此引发的好处是非常多的。

  1. 它不会被磨损,数字信号是以二进制0、1的形式保存的,当一个1被磨损的快要变成0时,你可以轻松把它重新写为1;
  2. 可以使用各种各样的算法对原始数字信号进行后期处理,比如手机中的魔音技术,可以将男人说话的声音变为女人说话的声音;
  3. 它可以被精准访问。在录音机中要想准确从某个句子开始重复读音,困难很大。但是数字MP3播放器,可以精准定位在某个确定的位置。

正因为如此,越来越多的的电子设备开始采用数字化技术。其核心是先用一种叫做ADC(模数转换器)的部件,将模拟信号转变成数字信号,处理器按照设计者的意愿,对这些数字信号进行各式各样的复杂处理,然后再通过一种叫 DAC(数模转换器)的部件,将数字信号转变成模拟信号,驱动喇叭发出声音。

因为 A/D、D/A 只是转换方向不同,因此我们讲解过程主要以 A/D 为例来讲解。

2. A/D转换

2.1. A/D 的基本概念

A/D 是模拟量到数字量的转换,依靠的是模数转换器(Analog to Digital Converter),简称ADC。

我们在选取和使用 A/D 的时候,依靠什么指标来判断很重要。由于 AD 的种类很多,分为积分型、逐次逼近型、并行/串行比较型、Σ-Δ型等多种类型。同时指标也比较多,并且有的指标还有轻微差别。

1、计数型A/D转换器
计数型A/D转换器由D/A转换器、计数器和比较器组成,如下图所示。工作的时候,计数器由零开始加1计数,每计一次数,计数值送往D/A转换器进行转换,转换后,将转换得到的模拟信号与输入的模拟信号送比较器进行比较,若前者小于后者,则计数值继续加1,重复D/A转换及比较过程,依此类推,直到当D/A转换后的模拟信号与输入的模拟信号相同,则停止计数,这时,计数器中的当前值就为输入模拟量对应的数字量。这种A/D 转换器结构简单、原理清楚,但它的转换速度与精度之间存在矛盾,当提高精度时,转换的速度就慢,当提高速度时,转换的精度就低,所以在实际中很少使用。

2、逐次逼近型A/D转换器
逐次逼近型A/D 转换器是由一个比较器、D/A 转换器、寄存器及控制电路组成的,如图下所示。逐次逼近型A/D转换器的转换过程与计数型基本相同,也要进行比较以得到转换的数字量,但逐次逼近型是用一个寄存器从高位到低位依次开始逐位试探比较,转换过程如下:
开始时逐次逼近寄存器所有位清0,转换时,先将最高位置1,送D/A转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从次高位依次重复上述过程直至最低位,最后逐次逼近寄存器中的内容就是输入模拟量对应的数字量,转换结束后。转换结束信号有效。一个n位的逐次逼近型A/D转换器转换只需要比较n次,转换时间只取决于位数和时钟周期。逐次逼近型A/D转换器的转换速度快,在实际中使用广泛。

3、双重积分型A/D转换器
双重积分型A/D 转换器将输入电压先变换成与其平均值成正比的时间间隔,然后再把此时间间隔转换成数字量,如下图所示,它属于间接型转换器。它的转换过程分为采样和比较两个过程。采样即用积分器对输入模拟电压Vin进行固定时间的积分,输入模拟电压值越大,采样值越大,采样值与输入模拟电压值成正比;比较就是用基准电压(+Vr或-Vr)对积分器进行反向积分,直至积分器的值为0。由于基准电压值大小固定,因此采样值越大,反向积分时积分时间越长,积分时间与采样值成正比;综合起来,积分时间就与输入模拟量成正比。最后把积分时间转换成数字量,则该数字量就为输入模拟量对应的数字量。由于在转换过程中进行了两次积分,因此称为双重积分型。双重积分型A/D转换器的转换精度高,稳定性好,测量的是输入电压在一段时间的平均值,而不是输入电压的瞬间值,因此它的抗干扰能力强,但是转换速度慢。双重积分型A/D转换器在工业上应用比较广泛。

2.2. A/D 的主要指标

1、ADC 的位数
一个 n 位的 ADC 表示这个 ADC 共有 2 的 n 次方个刻度。8 位的 ADC,输出的是从 0~255 一共 256 个数字量,也就是 2 的 8 次方个数据刻度。

2、基准源
基准源,也叫基准电压,是 ADC 的一个重要指标,要想把输入 ADC 的信号测量准确,那么基准源首先要准,基准源的偏差会直接导致转换结果的偏差。比如一根米尺,总长度本应该是 1 米,假定这根米尺被火烤了一下,实际变成了 1.2 米,再用这根米尺测物体长度的话自然就有了较大的偏差。假如我们的基准源应该是 5.10V,但是实际上提供的却是 4.5V,这样误把 4.5V 当成了 5.10V 来处理的话,偏差也会比较大。

3、分辨率
分辨率是数字量变化一个最小刻度时,模拟信号的变化量,定义为满刻度量程与 2n-1 的比值。假定 5.10V 的电压系统,使用 8 位的 ADC 进行测量,那么相当于 0~255 一共 256 个刻度把 5.10V 平均分成了 255 份,那么分辨率就是 5.10/255 = 0.02V。

4、INL(积分非线性度)和 DNL(差分非线性度)
我们最容易混淆的两个概念就是“分辨率”和“精度”,认为分辨率越高,则精度越高,而实际上,两者之间是没有必然联系的。分辨率是用来描述刻度划分的,而精度是用来描述准确程度的。同样一根米尺,刻度数相同,分辨率就相当,但是精度却可以相差很大,下图表示的精度一目了然,不需多说。和 ADC 精度关系重大的两个指标是 INL(Integral NonLiner)和 DNL(Differencial NonLiner)。

INL 指的是 ADC 器件在所有的数值上对应的模拟值,和真实值之间误差最大的那一个点的误差值,是 ADC 最重要的一个精度指标,单位是 LSB。LSB(Least Significant Bit)是最低有效位的意思,那么它实际上对应的就是 ADC 的分辨率。一个基准为 5.10V 的 8 位 ADC,它的分辨率就是 0.02V,用它去测量一个电压信号,得到的结果是 100,就表示它测到的电压值是 100*0.02V=2V,假定它的 INL 是 1LSB,就表示这个电压信号真实的准确值是在1.98V~2.02V 之间的,按理想情况对应得到的数字应该是 99~101,测量误差是一个最低有效位,即 1LSB。

DNL 表示的是 ADC 相邻两个刻度之间最大的差异,单位也是 LSB。一把分辨率是 1 毫4米的尺子,相邻的刻度之间并不都刚好是 1 毫米,而总是会存在或大或小的误差。同理,一个 ADC 的两个刻度线之间也不总是准确的等于分辨率,也是存在误差,这个误差就是 DNL。一个基准为 5.10V 的 8 位 ADC,假定它的 DNL 是 0.5LSB,那么当它的转换结果从 100 增加到 101 时,理想情况下实际电压应该增加 0.02V,但 DNL 为 0.5LSB 的情况下实际电压的增加值是在 0.01~0.03V 之间。值得一提的是 DNL 并非一定小于 1LSB,很多时候它会等于或大于 1LSB,这就相当于是一定程度上的刻度紊乱,当实际电压保持不变时,ADC 得出的结果可能会在几个数值之间跳动,很大程度上就是由于这个原因(但并不完全是,因为还有无时无处不在的干扰的影响)。

5、转换速率
转换速率,是指 ADC 每秒能进行采样转换的最大次数,单位是 sps(或 s/s、sa/s,即 samples per second),它与 ADC 完成一次从模拟到数字的转换所需要的时间互为倒数关系。ADC 的种类比较多,其中积分型的 ADC 转换时间是毫秒级的,属于低速 ADC;逐次逼近型 ADC转换时间是微秒级的,属于中速 ADC;并行/串行的 ADC 的转换时间可达到纳秒级,属于高速 ADC。

ADC 的这几个主要指标我们先熟悉一下,对于其它的,作为一个入门级别的选手来说,先不着急深入理解。以后使用过程中遇到了,再查找相关资料深入学习,当前重点是在头脑中建立一个 ADC 的基本概念。

2.3. 典型的 A/D 转换器芯片 ADC0809

1、ADC0809 芯片概述
ADC0809 是 8 位 CMOS 逐次逼近型 A/D 转换器, 最小误差为 ±1LSB。采用单一 +5V 电源供电,工作温度范围宽。每片 ADC0809 有 8 路模拟量输入通道,带装换启停控制,输入模拟电压范围 0~+5V ,不需零点和慢刻度校准,转换时间为 100us,功耗低,约 15mW。

2、ADC0809 的引脚
ADC0809 芯片有 28 条引脚,采用双列值插式封装(DIP),如图:
各引脚功能如下:
IN0~IN7: 8 路模拟量输入端。
D0~D7 : 8 位数字量输出端。
ADDA、ADDB、ADDC:3 位地址输入线,用于选择 8 路模拟通道中的一路,选择情况见下表

ADDC ADDB ADDA 选择通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7

ALE : 地址锁存允许信号,输入,高电平有效。
START:A/D 转换启动信号,输入,高电平有效。
EOC:A/D 装换结束信号,输出。当启动装换时,该引脚为低电平,当 A/D 转换结束时,该引脚输出高电平。

由于 ADC0809 为 8 位逐次逼近型 A/D 转换器,从启动装换到转换结束的时间固定为 8 个 CLK 时钟,因此 EOC 信号的时间也固定为 8 个 CLK 时钟。

OE : 数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚出入高电平,则打开输出三态门,输出锁存器的数据从 D0~D7。
CLK:时钟脉冲输入端。要求时钟频率不高于 640 KHZ。
VREF+、VREF- :基准电压输入端。多数情况下,VREF+ 接 +5V ,VREF- 接 GND。
VCC:电源,接 +5V 电源。
GND: 地(0V)。

3、ADC0809 的工作流程
如图:

  1. 给 ADC0809 输入 3 位地址,并使 ALE = 1 ,将地址存入地址锁存器中,经地址译码器从 8
    路模拟通道中选择一路模拟量送入比较器。(即选择把大象关到哪个冰箱里)
  2. 给 ADC0809 的 START 送一高电平脉冲,当 START 的上升沿使逐次逼近寄存器复位,下降沿启动 A/D
    转换,并使 EOC 信号为输出高电平。(即打开冰箱门,准备将大象关入冰箱)
  3. 当 ADC0809 转换结束时,转换的结果送入三态输出锁存器,并使 EOC 信号回到高电平,通知 CPU 转换结束。(即关上冰箱门)
  4. CPU 给 OE 送高电平,ADC0809 三态输出锁存器的数据输出到 D0~D7 端以供 CPU
    读取。(即告诉我们大象已经被关进冰箱啦)

4、ADC0809 的工作方式
根据读入转换结果的处理方法,ADC0809 的使用工作方式可以分为三种:

  1. 延时方式:连接时 EOC 悬空,启动转换后延时 100us,跳过转换时间后在读入转换结果。
  2. 查询方式:EOC 接单片机并口线,启动转换后,查询单片机并口线,如果变为高电平,说明转换结束,则读入转换结果。
  3. 中断方式:EOC 经非门接入单片机的中断请求端,将转换结束信号作为中断请求信号向单片机提出中断请求,中断后执行中断服务程序,在中断服务中读入转换结果。

本文以工作方式一进行实验讲解。

2.4. 实验


首先在 Proteus 8 Professional 中建立如上图所示的原理图,实验要求:当输入模拟 2.5V 电压输入时,A/D 转换得出数字量 7FH,并在数码管中显示出来。
代码:

#include <AT89X51.h>
void main()
{while (1){P2_5 = 0;P2_5 = 1;P2_5 = 0; while (P2_7 == 0){P2_6 = 1;P1 = P3;}}
}

3. D/A 转换

3.1 D/A 的基本概念

D/A 是数字量到模拟量的转换,依靠的是数模转换器(Digital to Analog Converter),简称 DAC。

如果一个 8 位的 D/A,从 0~255,代表了 0~2.55V 的话,那么我们用单片机给发送 100,D/A 引脚就会输出一个 1V 的电压,发送 200 就输出一个 2V 的电压,很简单。

3.2. D/A 的重要指标

参考 2.2 A/D 的重要指标,因为两者只是转换方向不一样而已。

3.3. 典型的 D/A 转换芯片 DAC0832

3.3.1. DAC0832 芯片概述

DAC0832 是采用 CMOS 工艺制造的电流型 8 位 T 形电阻解码网络 D/A 转换芯片,是 DAC0830 系列的一种,分辨率 8 位,满刻度误差 ±1LSB ,线性误差 ±0.5%, 建立时间为 1us ,功耗 20mW 。

3.3.2. DAC0832 的内部结构

DAC0832 的内部结构如下图所示,主要由 8 位输入寄存器、8 位 DAC 寄存器、8 位 D/A 转换器和控制逻辑电路组成。

其中:8 位输入寄存器接收从外部发送来的8位数字量,锁存于内部的锁存器中,8 位 DAC 寄存器从 8 位输入寄存器中接收数据,并能把接收的数据锁存于它内部的锁存器,8 位 D/A 转换器对 8 位DAC 寄存器发送来的数据进行转换,转换的结果通过 Iout1 和 Iout2 输出。8 位输入寄存器和 8 位 DAC 寄存器都分别有自己的控制端 LE1’ 和 LE2’ ,LEI’ 和 LE2’ 通过相应的控制逻辑电路控制。通过它们,DAC0832 可以很方便地实现双缓冲、单缓冲或直通方式处理。

3.3.3. DAC0832 的引脚

DAC0832 芯片有 20 条引脚,采用双列值插式封装(DIP),如图:

各引脚功能如下:
DI0-DI7(DI0 为最低位):8 位数字输入端。
ILE:数据允许控制输入线,高电平有效。
CS’: 片选信号。
WR1’:写信号线1。
WR2’:写信号线2。
XFER’: 数据传送控制信号输入线,低电平有效。
RFB:片内反馈电阻引出线,反馈电阻集成在芯片内部,该电阻与内部的电阻网络相匹配。RFB 端一般直接接到外部运算放大器的输出端,相当于将反馈电阻接在运算放大器的输入端和输出端之间,将输出的电流转换为电压输出。
Iout1:模拟电流输出线 1,它是数字量输入为 “1” 的模拟电流输出端。当输入数字量为全 1 时,其值最大,约为 VREF;当输入数字量为全 0 时,其值最小,为 0。
Iout2:模拟电流输出线2,它是数字量输入为“0”的模拟电流输出端。当输入数字量为全 0 时,其值最大,约为 VREF;当输入数字量为全1时,其值最小,为0。Iout1 加 Iout2 等于常数 (VREF) 。采用单极性输出时,Iout2常常接地。
VREF:基准电压输入线。电压范围为-10V~+10V。
VCC:工作电源输入端,可接+5V~+15V电源。
AGND:模拟地。
DGND:数字地。

3.3.4. DAC0832 的工作方式

通过改变引脚ILE、WRI、WR2、CS和XFER的连接方法。DAC0832具有直通方式、单缓冲方式和双缓冲方式3种工作方式。

  1. 直通方式:当引脚 WRI’、WR2’、CS’、XFER’ 直接接地时,ILE 接电源,DAC0832 工作于直通方式下,此时,8 位输入寄存器和 8 位DAC寄存器都直接处于导通状态,当 8 位数字量一到达 DI0~DI7,就立即进行 D/A 转换,从输出端得到转换的模拟量。这种方式处理简单,但 DI0~DI7 不能直接和 MCS-51 单片机的数据线相连,只能通过独立的 IO 接口来连接。
  2. 单缓冲方式:通过连接 ILE、WRI’、WR2’、CS’ 和 XFER’ 引脚,使得两个寄存器中的一个处于直通状态,另一个处于受控制状态,或者两个同时被控制,DAC0832 就工作于单缓冲方式。对于单缓冲方式,单片机只需对它操作一次,就能将转换的数据送到 DAC0832 的 DAC 寄存器,并立即开始转换,转换结果通过输出端输出。
  3. 双缓冲方式:当 8 位输入寄存器和 8 位 DAC 寄存器分开控制导通时,DAC0832 工作于双缓冲方式,此时单片机对 DAC0832 的操作先后分为两步:第一步,使 8 位输入寄存器导通,将 8 位数字量写入 8 位输入寄存器中;第二步,使 8 位 DAC 寄存器导通,8 位数字量从 8 位输入寄存器送入 8 位 DAC 寄存器。第二步只使 DAC 寄存器导通,在数据输入端写入的数据无意义。

3.4. 实验


首先在 Proteus 8 Professional 中建立如上图所示的原理图,实验要求:输出正弦信号。
代码:

#include <AT89X51.H>
#include <math.h>
#define PI 3.1415926
float i = 0;
void delay(unsigned int n){while(n --);}
void main(){while(1){P1 = 126 * (sin(i)+1);delay(5);i += 0.001;if (i >= 2 * PI)i = 0;  }
}

51单片机入门——数模\模数转换相关推荐

  1. 51单片机入门学习小结(流水灯与数码管)

    51单片机入门学习小结(流水灯与数码管) 对原理图的分析 以下是我所用单片机的原理图 这块51单片机一共有4个I/O口(意思为input/output),也代表着如果我们后续都要用到这四个的话那么功能 ...

  2. 51单片机入门指南系列:一、前期准备

    51单片机入门指南系列:一.前期准备 51单片机学习步骤 为什么我用的是52单片机,大家也说它是51? 编译环境 单片机入门书籍 购买实物开发板 51单片机学习步骤 51单片机是嵌入式学习的入门级芯片 ...

  3. 51单片机入门——16路抢答器

    文章目录 设计要求 电路原理图 硬件原理 时钟信号(晶振) 矩阵按键与独立按键 代码解析 设计要求 同时为16支参赛队提供抢答功能,抢答成功后应能通过数码管显示出参赛队号数,同时点亮发光二极管示意抢答 ...

  4. 51单片机入门基础介绍

    51单片机入门基础介绍 文章目录 51单片机入门基础介绍 前言 常用元器件 发光二极管 数码管 LED数码管的显示方式 按键 定时计数器 串行口控制寄存器SCON 中断系统 中断源及中断请求 中断允许 ...

  5. 【51单片机入门】点亮多个LED流水灯

    [51单片机&入门]点亮多个LED流水灯 实验环境 功能实现 PCB原理图 代码 要点 仿真 代码 实验环境 Keil C51 Proteus 8.9 功能实现 LED流水灯依次从右向左亮起, ...

  6. 51单片机入门教程学习笔记

    基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...

  7. 51单片机入门——矩阵按键

    文章目录 1.按键 1.1.独立按键 1.2.矩阵按键 2.按键的扫描与抖动 2.1.独立按键的扫描 2.2.按键抖动与消抖 2.3.矩阵按键的扫描 3.简易计算器 1.按键 1.1.独立按键 常用的 ...

  8. 51单片机入门教程(3)——数码管显示

    51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...

  9. 51单片机入门教程(6)——外部中断

    51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...

最新文章

  1. Struts2+spring+jdbc 以xml配置形式整合
  2. 台式电脑改ip地址能不能上外网_如何将电脑当做路由器来用?一招让你不用为路由器发愁...
  3. 目标检测数据集MSCOCO简介
  4. rdb和aof优势劣势
  5. Python运算符优先级
  6. 数据清理--去掉空值
  7. Windbg是一款非常好用的经典windows系统蓝屏分析修复工具
  8. 信息化建设规划_中小型企业信息化建设规划方案
  9. 经典算法大全之费式数列
  10. go mod tidy报错verifying module: invalid GOSUMDB: malformed verifier id
  11. cpu虚拟化(cpu虚拟化开启有什么影响)
  12. 5种骗你跳槽的谣言,千万别信!
  13. oracle数据库导表操作
  14. 今天才知道我们的遭遇不是个例,是不是真有四十大盗呢?
  15. 就dsaf就打开了撒酒疯
  16. 高级前端面试题(来自一位朋友的投稿哟)
  17. Docker 教程:如何将Helix QAC作为容器创建并运行 下
  18. SVM(一):SVM入门
  19. 游戏进度:关于DirectX3D的压缩纹理格式DXT1/CB1
  20. 批处理-从零开始(一)

热门文章

  1. 二自由度云台扫描算法_控制算法手记-二自由度控制器
  2. 【Python】唯品会购买商品
  3. python time strptime_Python time.strptime方法代碼示例
  4. java中5 的结果_java第五次实验报告
  5. 2019年第十届蓝桥杯决赛(国赛) C++大学A组 D题 序列求和【全网找不到的题解?】
  6. Element ui 组件库 使用技巧。
  7. 为什么在wps中调整了0.5倍行距,某一页的行数不会发生变化?
  8. 正则表达式-RegExp-常用正则表达式
  9. 小程序转uni-app——onLoad语法转换
  10. SIGMOD 2021 | 时间序列相关论文一览(附原文源码)