您当前位置:首页 - 攻略资讯 - 详情

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)

2024-12-24 15:14:45|网友 |来源:互联网整理

adc全称是什么

全称:AttackDamageCarry

ADC(AttackDamageCarry)是物理伤害输出类型英雄的简称,主要应用于MOBA类游戏中。

在《英雄联盟》成为热门网游后,ADC一词的广泛运营,被普遍定义为远程射手英雄。

且更多的MOBA类游戏所延用ADC一词,如《王者荣耀》《全民超神》《300英雄》等。

ADC在后期的团战中主要担任物理输出,所以ADC一般需要一定的farm能力。

ADC类英雄在后期有改变局势的作用。

但容错率较低,所以ADC的走位意识非常重要,直接决定了团战的胜率。

扩展资料:

ADC这个称呼最初是由dota延伸而来。

AD即“AttackDamage”,C是“Center’’,ADCenter即是物理输出核心。

在MOBA游戏的鼻祖DOTA中将具有带动整体节奏的位置称为“Center”,也就是“C位/核心位”。

在《英雄联盟》中,沿用了“Center”一词,并将其细分为“ADCenter”和“APCenter”。

ADC通常指物理输出核心,ADC大部分都是远程射手英雄,因为远程英雄比较容易利用射程优势安全的输出。

远程英雄担任ADC时,通常都由一个辅助保护,并且可以拿到单路的绝大部分经济,一般不会被辅助抢兵。

部分近战英雄担任ADC时,通常会走边路单人线,而由于是单人路,因此近战英雄担任ADC时需要更好的操作和意识。

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第1张图片-拓城游

单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压

视频介绍

在第 7 节,我们讨论了借助于单片机和传感器,电脑也能获取环境参数,例如室内的温度和湿度等信息。

不过不知道大家注意到没有,环境的温湿度应该是无时无刻都在变化的,而我们使用单片机采集的温湿度值却是离散的(大约1秒个温度值),这其实就是将模拟信息数字化的过程。

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第2张图片-拓城游

使用ADC将模拟信号数字化

相当一部分单片机都带有 ADC 外设,ADC 的功能就是将模拟信息数字化。

恰好我使用的这款 51 单片机就有 ADC 功能,本节将介绍该模块。

目的是让我们的电脑具备测量电压的能力。

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第3张图片-拓城游

ADC 的全称是 Analog-to-Digital Converter,即“模拟到数字转换器”,它可以将连续不断变化的模拟信号转换为离散的数字信号,供计算机进一步处理。

将模拟信号数字化之后,才能使用计算机处理之,因为计算机本身就是数字电路组成的运算机器。

其实说将模拟信号“转换”为离散信号并不合适,更恰当的说法应该是 ADC 从模拟信号中取出“一部分”信息,请看下面右图的黑点即为 ADC 采集的数字信号。

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第2张图片-拓城游

这么看来,ADC的重要参数有两个:采样频率和精度。

采样频率决定了 ADC 从模拟信号中取数据的“密集”程度,一般来说肯定越密集越好,因为这样更能还原信号的特性。

精度则决定了取数据的时的精确性。

以我的 51 单片机为例,它有 8 路 10 位的 ADC,采样频率为 250K/s。

所以它能从每秒的模拟信号中取出 25 万个数字信号,也就相当于在坐标系中用 25 万个点描绘出 1 秒的信号。

精度为 10 位,也就是说它利用 1~1024(2的十次方)的数字表示信号,我的 51 单片机 ADC 的参考电压信号为 5V,所以它能够表示的最小电压为 5V/1024 约为 5mV。

C语言编程单片机,实现ADC采样

现在知道了什么是 ADC,怎么使用它呢?请继续往下看。

我使用的这款 51 单片机自带的 ADC 模块结构如下图所示:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第5张图片-拓城游

可以看出,最终得到的数字信号其实是经过逐次比较的来的。

下图是 ADC 相关寄存器的信息:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第6张图片-拓城游

所以,在 keil4 中可以写出如下C语言代码:

sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd; // 高 8 位结果
sfr ADC_LOW2 = 0xbe; // 低 2 位结果
sfr P1ASF = 0x9d; //

我的这款 51 单片机的 ADC 转换通道与 P1 口复用,上电复位后 P1 口为弱上拉型 IO 口,我们可以通过 C语言编程设置这 8 路的任意一路做 ADC 转换。

void adc_init()
{
 P1ASF = 0xff; // 8 个通道都开
 ADC_RES = 0;
 ADC_CONTR = ADC_POWER|ADC_SPEEDLL;
 delay_about_100ms(2);
}

上面的C语言代码中,我们将 P1ASF 赋值为 0xff,表示 P1 的 8 个 IO 口都可以作为 ADC 采样口。

然后延时一段时间,等待 ADC 模块初始化。

因为我使用的这款 51 单片机是一个 8 位单片机,传送 10 位的 ADC 值需要两次,当 AUXR1.1/ADRJ = 0 时,ADC 转换结果寄存器格式如下:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第7张图片-拓城游

当 AUXR1.1/ADRJ = 1 时,ADC 转换结果寄存器格式如下:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第8张图片-拓城游

这么看来,获取一次 ADC 的采样值高 8 位的 C语言代码可以如下写:

// 获取高 8 位的 adc 值
BYTE get_adc_h8bit(BYTE ch)
{
 ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
 _nop_();_nop_();_nop_();_nop_(); // 等待转换完成
 while(!(ADC_CONTR & ADC_FLAG));
 ADC_CONTR &= ~ADC_FLAG;
 return ADC_RES;
}

然后将之与余下 2 位 ADC 值组合一下,就得到了一次完整的ADC采样值:

// 获取 10 位 adc
WORD get_adc_res(BYTE ch)
{
 WORD res = 0;
 res = get_adc_h8bit(ch);
 res <<= 2;
 res |= ADC_LOW2;
 return res;
}

使用电脑测量电压值

上面一小部分介绍了单片机的 ADC 模块使用方法,结合之前介绍的单片机的串口 printf,我们已经能够把外界的电压值转换为 1~1024 之间的数值并传送到电脑了,但是如何将之转换为电压值呢?

其实很简单,我的这款单片机 ADC 模块的参考电压为 5V,假设 ADC 采集的数值为 n,那么对应的电压值为:

U = n*5V / 1024

如此一来,C语言控制程序可以如下写:

void main()
{
 init_uart(9600);
 adc_init();
 while(1){
 delay_about_100ms(2);
 printf("adc: %0.2f\r\n", 5.0*((float)get_adc_res(0))/1024.0);
 }
}

使用电脑测量电压

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第9张图片-拓城游

如上图,为了方便测试,将可变电阻和定电阻串联,将单片机的 P10 口与中间相连,即可在电脑端的串口调试助手得到电压信息:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第10张图片-拓城游

使用电压表测量该点的电压值,发现的确在 3.05V 附近:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第11张图片-拓城游

现在调节可变电阻,发现串口传来的电压值也随之改变:

adc全称是什么(单片机很好玩8,三分钟弄懂什么是ADC,怎样使用电脑测电压)-第12张图片-拓城游

至此就实现了使用电脑测量电压,相信大家也应该明白了 ADC 的功能。

欢迎在评论区一起讨论,质疑。

文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。 E-MAIL:admin@bb1314.com 

复制本文链接攻略资讯文章为拓城游所有,未经允许不得转载。