51单片机STC89C52RC——15.1 AD/DA(模数数模)

目的/效果

1 LCD1602 显示 可调电阻、光敏电阻、热敏电阻值(AD)

2 模拟信号控制LED明暗(DA)

一,STC单片机模块

二,AD/DA 

2.1 AD/DA 介绍

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号

DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号

AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能。

2.1.1 扬声器(麦克风)

扬声器(麦克风),像我们电脑里存的数字音乐就是数字信号,怎么才能将它输出到扬声器进行播放呢?就需要DA将这个数字信号代表的电压转换成实际的电压,形成一个连续的电压波形,再送给麦克风,这样就可以听到数字信号储存的音乐了。

2.1.2 麦克风

 麦克风,也可以通过这种电阻分压的形式,将人说话的声音信号转换为一个电压信号,然后通过电压采集,那数字系统就可以采集到这个声音信号了。

2.1.3 热敏电阻

热敏电阻,阻值会随着温度的变化而变化。如果我们把上图的光敏电阻换成热敏电阻,也就可以获取热敏电阻这一点的电压,从而可以知道温度的高低。

2.1.4 光敏电阻

光敏电阻,阻值会随着光线的变化而变化。

2.2 电路模型

模拟量和数字量是成正比的,比如说模拟量是0V,则数字量就是0;如果模拟量是5V,则数字量就是255;如果模拟量是2.5V,则数字量就是255/2;

AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道。

2.2.1 AD 装换

AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率 

2.2.2 DA 装换 

DA的应用一般可以用PWM来代替,所以DA的使用没有AD广泛。

2.3 运算放大器

运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中

运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器等

运算放大器电路的分析方法:虚短、虚断(负反馈条件下) 

2.3.1 运放原理

我们这里简单理解下面的电路,

V+,V- 这两个是电源,上正下负,分别可以接5V和-5V,也可以分别接5V和地,一般来说这种接法是比较多。

Un、Up 是输入

Uout 是输出

他的特性如下图

运放的内部工作我们可以认为里面是一个开关,这个开关可以打到VCC即5V的一边,也可以打到GND即0V的一边。

那这个开关什么时候打到VCC这边或GND的一边呢?

这取决于Up和Un的差值。

当Up>Un时,(开关打到VCC)则输出电压就接近于正电源电压Uout=5V

当Up<Un时,(开关打到GND)则输出电压就接近于负电源电压Uout=0V

当Up和Un差不多大时,则输出电压=A(Up-Un)+2.5

A是运放的放大倍率,运放的固有参数,我们一开始并不需要太关注这个参数,只需要知道一般来说A都非常大,可以达到几十万,也就是说这根线会非常陡峭,或者说这部分的宽度非常窄。Up和Un相差几十微伏或者更小时,才会进入这个区间。 

 

以上理论知识,下面开始看运放的第一个实际应用。

运放LM358

运放作为一个电压比较器来使用,我们常见的运放LM358。

只需要用到其中一个就可以了,给它接好电源和地,然后Up这边用信号发生器给它输入一个正弦波,Un这边通过这个可调电阻,让它从0V到5V开始变化。​​​​​​

给光敏电阻光照时,Un>Up,运放就输出低电平.

没有光照时,Un<Up,运放就输出高电平.

那么运放作为一个电压比较器来使用时,我们发现这个实际应用中我们主要用到的是运放的这两个区间:

也就是运放的非线性区或者叫饱和区

而运放真正的核心其实是在这一个狭窄的区间里,也就是线性区 

但是这个区间实在是太狭窄了,为了能够用到这个区间,需要引入一个概念:负反馈

负反馈

这么说,有了负反馈,运算放大器才能被称为是运算放大器,否则只能被称为放大器。

下面我们来看一下这张图

将Un和输出接在一起,问Un电压是多少?

此时Un大概等于Un=2.9999x

因为只要Un和Up不相等,或者说差的很多,那么输出电压就一定会变成5V或者0V,进而通过这个路径反馈回来,不断修正Un的电压,直到它和Up电压差不多为止。 

也就是会对应到这条线上的某一个点,这就是所谓的负反馈。 

负反馈的过程

因为当Up>Un时,Uout要从Un上升到5V,上升到3.1V左右时,此时 Uout=Un>Up,Uout又要下降到0,但在下降到2.9V时,Uout=Un<Up,于是Uout又要上升。所以Uout会在 Up 附近震荡,且越来越接近Up。 如果初学者想不明白负反馈的过程也没关系,

我们只需要记住一个非常重要的结论: 当给运放引入负反馈,也就是把输出和Un接在一起时,Un就约等于Up。同时又因为Up和Un差的实在太少了,只相差几十微伏不到,所以我们就认为Up等于Un了。

这里的负反馈不一定是完全短接,通过一个电阻电容连接都是可以的。然后在这些电路中输入输出的关系分别是这样子的(如图中的关系式),你会发现第一个电路实现了比例的运算,第二个电路实现了加法的运算,而这个电路实现了积分的运算。

同向发放大器

假如说流过负载的电流有1A,那么此时Rs这一端大概会产生一个10mV的电压。 这个电压实在太小了,以至于我们没有办法很好的测量到,所以此时运放的这部分电路就派上用处了。假设此时R1是49千欧姆,R2是1千欧姆,那么这个运放就可以把Rs上的电压放大50倍输出。这样我们就可以很方便的通过测量输出电压。反推负载上的电流了。 

Uout=(1+R1/R2)Uin=(1+49k/1k)10mV=500mV

运放的两个主要应用场景。 一个作为比较器使用,一个是作为比例放大器来使用 

电压比较器 

反向放大器

电压跟随器

虚短状态:负反馈状态下负极输入的电压和正极输入的电压是基本相等的。

虚断状态:由于输入阻抗比较大,电流既不从负极输入端流入也不流出。  

2.4 DA 

2.4.1 DA原理

 

我们知道了当Rfb=R时的输出电压,那么如果Rfb不等于R呢?电压的表达式怎么来的呢?我们知道这其实是一个我们前面讲过的反向放大器模型。如果我们能算出这一点的电流,那么电流通过反馈电阻分压,就可以得出输出电压了。

由上图分析:两个2R并联,流过两个2R的电流为I0, I1=2I0;阻值则为R。在与经过I的R串联。

同理:

I2=2I1, 阻值2R;

I3=2*I2,总阻值2R

 ……

I=2*I7,总阻值2R;线路中的总阻值为R;I=Vref/R;

所以,I=2*I7=4*I6=8*I5=16*I4=32*I3=64*I2=128*I1=256*I0;I0=Verf/(256*R);

所以我们可以将电路的I分为256份。I0=I/256;

我们在分析简单的,单D0闭合1时,数字信号为 0000 0001(0x01=1) ,电路电流如下图

电流I02=I-I0=255*I0;

同理可得:当D7-D0  输入 1000 0000(0x80=128) 时I02=I6+I5+I4+I3+I2+I1+I0=I7=128*I0;

D7-D0    0001 0001=0x11=17 ,I02=17*I0;

2.4.2 DAC(PWM)模块  (脉冲宽度调制) 

 输出电压     Vout=(PWM占空比)×Vh;

 

2.4.2.1 什么是PWM

​脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 ​

2.4.2.2 PWM的频率

是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);

也就是说一秒钟PWM有多少个周期
单位: Hz
表示方式: 50Hz 100Hz

2.4.2.3 PWM的周期

T=1/f
周期=1/频率
50Hz = 20ms 一个周期

如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期

2.4.2.4 占空比


是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)
表示方式:20% 

周期为T
T1为高电平时间
T2 为低电平时间

假设周期T为 1s 那么频率就是 1Hz 那么高电平时间0.5s ,低电平时间0.5s 总的占空比就是 0.5 /1 =50%

 控制LED的通断时间比例,占空比。如下图

2.5 AD 

输出数字量    (D7~D0)=V_IN/V_REF×256 …… 结果取整

 

其实以上的工作原理是利用的二分法查找这种方法

比如,输入一个在0V~5V范围的模拟电压,我们首先让DAC产生一个2.5V的中间值和这个未知电压进行比较,如果这个未知电压比2.5V小的话,我们就把DAC调成(0+2.5)/2=1.25V再进行对比,如果比未知电压大的话,我们就把ADC调成(1.25+2.5)/2的电压和它对比,如此循环,最终8次对比就可以和未知电压的值接近了。

根据这个例子,我们其实是将DAC的8位数据从左往右,就是将第一位置1,第二位置1......这样开始和未知电压进行对比。那么比如首先把DAC的2.5V,即1000 0000(也即128)和未知电压进行对比,如果未知量比这个数小,那么我们把第一位置0,第二位置1,即0100 0000(表示64,也即1.25V),如果未知量比这个数大,那么这个1就保留,再把第三个置1,即0110 0000(表示96,也即(1.25+2.5)/2)再比较......依次判断8位,最终这8位数据取出来就是表示我们的未知电压。

2.6 AD/DA芯片

我们主要介绍ADC0809和DA0832,这两个芯片是比较老旧的,但是它比较经典。所以我们主要了解它们的原理,实际应用的话还是可以用现在新的一些开发板上的AD、DA芯片。 

2.6.1 DA0832

2.6.2 ADC0809

 2.6.3 XPT2046

2.6.3.1 简介

XPT2046是一款4线制电阻式触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/0接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带⒉.5V参考电压,可以作为辅助输入、温度测量和电池监测之用,电池监测的电压范围可以从OV到6V。XPT2046片内集成有一个温度传感器。在2.7V的典型工作状态下,关闭参考电压,功耗可小于0.75mW。XPT2046采用微小的封装形式:TSSOP-16,QFN-16和VFBGA一48。工作温度范围为-40℃~~+85℃。与 ADS7846、TSC2046、AK4182A完全兼容。

2.6.3.2 电路图

 单端模式输入配置 如下表

 差分模式输入配置 

 

2.6.3.3  时序图

24时钟周期转换时序

16时钟转换时序 

 详细时序如下 

 准备读数据

XPT2046_CS=0;//低电平Delay_ms(1);XPT2046_DCLK=0;//低电平Delay_ms(1);
 写入地址
//发地址for(i=0;i<8;i++){XPT2046_DIN=Addr&(0x80>>i);    XPT2046_DCLK=1;//高电平    Delay_ms(1);XPT2046_DCLK=0;//低电平Delay_ms(1);}
接收数据 

 

//收数据for(i=0;i<12;i++){AD_Value=AD_Value<<1;Delay_ms(1);XPT2046_DCLK=1;//高电平Delay_ms(1);XPT2046_DCLK=0;//置低电平,下降沿输出数据Delay_ms(1);AD_Value=AD_Value|XPT2046_DOUT;//取数,转换  }
 重置

只需要将CS置高电平

//重置XPT2046_CS=1;
 2.6.3.4 读取数据完整代码

/*** 函    数:读取信号值* 参    数:Addr 信号值地址* 返 回 值:无*/
int XPT2046_ReadAD(unsigned char Addr)
{int AD_Value,i;XPT2046_CS=0;//低电平Delay_ms(1);XPT2046_DCLK=0;//低电平Delay_ms(1);//发地址for(i=0;i<8;i++){XPT2046_DIN=Addr&(0x80>>i);    XPT2046_DCLK=1;//高电平    Delay_ms(1);XPT2046_DCLK=0;//低电平Delay_ms(1);}//收数据for(i=0;i<12;i++){AD_Value=AD_Value<<1;Delay_ms(1);XPT2046_DCLK=1;//高电平Delay_ms(1);XPT2046_DCLK=0;//置低电平,下降沿输出数据Delay_ms(1);AD_Value=AD_Value|XPT2046_DOUT;//取数,转换  }//重置XPT2046_CS=1;//return AD_Value;
}

三,创建Keil项目

 详细参考:51单片机STC89C52RC——创建Keil项目-CSDN博客

四,代码 

项目完整代码请参考《STC89C52RC: 51单片机学习资料、代码 - Gitee.com》

main.c

#include <REGX52.H>#include "XPT2046.h"
#include "Delay.h"
#include "lcd1602.h"
#include "timer0.h"
unsigned int Counter,Compare=90,Model=0;// 模式切换  0-AD(模数),1-DA(数模)
/*** 函    数:显示可调电位器的值* 参    数:无* 返 回 值:无*/
void ShowDianWei()
{int  AIN0;float ADC_VOL;AIN0=XPT2046_ReadAD(0x94);//LCD_ShowBinNum(1,1,AIN0,12);ADC_VOL=(5.0*AIN0/4096)*10;LCD_ShowNum(2,1,((int)ADC_VOL)/10,1);LCD_ShowString(2,2,".");LCD_ShowNum(2,3,((int)ADC_VOL)%10,1);LCD_ShowNum(2,4,((int)(ADC_VOL*10))%10,1);LCD_ShowNum(2,5,((int)(ADC_VOL*100))%10,1);
}
/*** 函    数:显示光敏电阻的值* 参    数:无* 返 回 值:无*/
void ShowGuangMin()
{int  AIN1;AIN1=XPT2046_ReadAD(0xA4);//LCD_ShowBinNum(1,1,AIN1,12);LCD_ShowNum(2,7,AIN1/1000,1);LCD_ShowNum(2,8,AIN1%1000/100,1);LCD_ShowNum(2,9,AIN1%100/10,1);LCD_ShowNum(2,10,AIN1%10,1);}
/*** 函    数:显示热敏电阻的值* 参    数:无* 返 回 值:无*/
void ShowReMin()
{int  AIN2;AIN2=XPT2046_ReadAD(0xD4);//LCD_ShowBinNum(1,1,AIN2,12);LCD_ShowNum(2,12,AIN2/1000,1);LCD_ShowNum(2,13,AIN2%1000/100,1);LCD_ShowNum(2,14,AIN2%1000%100/10,1);LCD_ShowNum(2,15,AIN2%1000%100%10,1);
}
/*** 函    数: 数字型号 转 模拟信号* 参    数:无* 返 回 值:无*/
void SetDA()
{int i=0;for(i=0;i<100;i++){Compare=i;Delay_ms(5);}for(i=100;i>0;i--){Compare=i;Delay_ms(5);}
}
/*** 函    数:主函数* 参    数:无* 返 回 值:无*/
void main()
{if(Model==1) {Timer0_Init();//初始化定时器 }LCD_Init();while(1){switch(Model){case 0:{//依次显示 电位器   光敏   热敏LCD_ShowString(1,1," DW    GM   RM");ShowDianWei();//电位器Delay_ms(10);ShowGuangMin();//光敏电阻Delay_ms(10);ShowReMin();//热敏电阻Delay_ms(10); break;}case 1:{      LCD_ShowString(1,1,"DA            ");LCD_ShowString(2,1,"                ");SetDA();break;}}}  while(1){}
}/*** 函    数:定时器中断函数* 参    数:无* 返 回 值:无*/
void Timer0_Routine() interrupt 1
{TL0 = 0x9C;			//设置定时初值TH0 = 0xFF;			//设置定时初值Counter++;Counter%=100;if(Counter>=Compare){P2_1=1;//熄灭}else {P2_1=0;//点亮}
}

五,代码编译、下载到51单片机

代码编译请参考

《51单片机STC89C52RC——代码编译-CSDN博客》

代码下载请参考

《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第1章 项目背景(学成在线),项目介绍,环境搭建

1.项目背景 1.1 在线教育市场环境 以下内容摘自https://report.iresearch.cn/content/2021/01/358854.shtml 在线教育行业是一个有着极强的广度和深度的行业&#xff0c;从校内到校外&#xff1b;从早幼教到职业培训&#xff1b;从教育工具到全信息化平台等等。 2020年的新…

用Excel处理数据图像,出现交叉怎么办?

一、问题描述 用excel制作X-Y散点图&#xff0c;意外的出现了4个交叉点&#xff0c;而实际上的图表数据是没有交叉的。 二、模拟图表 模拟部分数据&#xff0c;并创建X-Y散点图&#xff0c;数据区域&#xff0c;X轴数据是依次增加的&#xff0c;因此散点图应该是没有交叉的。…

linux centos 安装niginx并且添加ssl(https)模块

文章目录 前言一、nginx安装教程1.流程步骤 总结 前言 一、nginx安装教程 1.流程步骤 代码如下&#xff08;示例&#xff09;&#xff1a; 1.先下载linux安装包 2.解压安装命令 sudo tar -zxvf nginx-1.20.1.tar.gz3.进入解压后的目录 sudo cd nginx-1.20.14.安装 sudo y…

欢迎加入国家智能网联汽车创新中心OS开发训练营大家庭

欢迎加入国家智能网联汽车创新中心OS开发训练营大家庭。&#x1f680; 导学阶段启动 在正式开营之前&#xff0c;我们特别设置了导学阶段&#xff0c;旨在帮助大家更好地迎接颇具挑战性的项目实战。导学阶段包括一系列精心准备的视频课程和配套习题。github链接&#xff1a;htt…

vue侦听器watch()

侦听器watch&#xff08;&#xff09; 侦听器侦听数据变化&#xff0c;我们可以使用watch 选项在每次响应式属性变化时触发一个函数。 <template><h3>侦听器watch</h3><hr> <p>{{nessage}}</p> <button click"exchage">…

基于YOLOv10+YOLOP+PYQT的可视化系统,实现多类别目标检测+可行驶区域分割+车道线分割【附代码】

文章目录 前言视频效果必要环境一、代码结构1、 训练参数解析2、 核心代码解析1.初始化Detector类2. torch.no_grad()3. 复制输入图像并初始化计数器4. 调用YOLOv10模型进行目标检测5. 提取检测结果信息6. 遍历检测结果并在图像上绘制边界框和标签7. 准备输入图像以适应End-to-…

【致知功夫 各随分限】成长需要时间,助人须考虑对方的承受程度

帮助他人需考虑各人的分限所能及的&#xff0c;初学圣学需时间沉淀&#xff0c;存养心性 任何人都应该受到教育&#xff0c;不应受到贫富、贵贱的差异而排除在教育之外&#xff0c;对于不同材质的学生&#xff0c;需要因材施教&#xff1b; 每天都有新的认知&#xff0c;大我…

STL—容器—string类【对其结构和使用的了解】【对oj相关练习的训练】

STL—容器—string类 其实string类准确来说并不是容器&#xff0c;因为他出现的时间比STL要早&#xff0c;但是也可以说是容器吧。 1.为什么要学习string类&#xff1f; 1.1C语言当中的字符串 C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作…

CTFShow的RE题(三)

数学不及格 strtol 函数 long strtol(char str, char **endptr, int base); 将字符串转换为长整型 就是解这个方程组了 主要就是 v4, v9的关系&#xff0c; 3v9-(v10v11v12)62d10d4673 v4 v12 v11 v10 0x13A31412F8C 得到 3*v9v419D024E75FF(1773860189695) 重点&…

Windows ipconfig命令详解,Windows查看IP地址信息

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 ipconfig 1、基…

Android Studio Run窗口中文乱码解决办法

Android Studio Run窗口中文乱码解决办法 问题描述&#xff1a; AndroidStudio 编译项目时Run窗口中文乱码&#xff0c;如图&#xff1a; 解决方法&#xff1a; 依次打开菜单&#xff1a;Help--Edit Custom VM Options&#xff0c;打开studio64.exe.vmoptions编辑框&#xf…

计算机专业怎么选择电脑

现在高考录取结果基本已经全部出来了&#xff0c;很多同学都如愿以偿的进入到了计算机类专业&#xff0c;现在大部分同学都在为自己的大学生活做准备了&#xff0c;其中第一件事就是买电脑&#xff0c;那计算机类专业该怎么选择电脑呢&#xff1f; 计算机专业是个一类学科&…

网络中的网络 NiN

一、全连接层问题 1、卷积层的参数&#xff1a;输入的通道数乘以输出的通道数再乘以窗口的高宽 2、全连接层的参数就是输入的元素个数乘以输出的元素个数&#xff0c;也就是输入的通道数乘以输入的高宽&#xff0c;再乘以输出的通道数乘以输出的高宽&#xff0c;贼大的量级 …

NLP简介

自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此&#xff0c;这一领域的研究将涉及自…

【算法】(C语言):冒泡排序、选择排序、插入排序

冒泡排序 从第一个数据开始到第n-1个数据&#xff0c;依次和后面一个数据两两比较&#xff0c;数值小的在前。最终&#xff0c;最后一个数据&#xff08;第n个数据&#xff09;为最大值。从第一个数据开始到第n-2个数据&#xff0c;依次和后面一个数据两两比较&#xff0c;数值…

关于用户咨询华为擎云L410笔记本安装Windows系统的说明

同样也是单位购买的华为擎云L410 KLVU-WDU0笔记本电脑&#xff0c;国产UOS系统某些软件用着不是很方便&#xff0c;用户咨询是否能够安装Windows10或者Windows7&#xff1f; 带着种种疑问也做了一些查询&#xff0c;之前也给一些国产设备更改过操作系统&#xff0c;之前的国产设…

计算机网络浅谈—什么是 OSI 模型?

开放系统通信&#xff08;OSI&#xff09;模型是一个代表网络通信工作方式的概念模型。 思维导图 什么是 OSI 模型&#xff1f; 开放系统互连 (OSI) 模型是由国际标准化组织创建的概念模型&#xff0c;支持各种通信系统使用标准协议进行通信。简单而言&#xff0c;OSI 为保证…

智能交通(3)——Learning Phase Competition for Traffic Signal Control

论文分享 https://dl.acm.org/doi/pdf/10.1145/3357384.3357900https://dl.acm.org/doi/pdf/10.1145/3357384.3357900 论文代码 https://github.com/gjzheng93/frap-pubhttps://github.com/gjzheng93/frap-pub 摘要 越来越多可用的城市数据和先进的学习技术使人们能够提…

【pytorch19】交叉熵

分类问题的loss MSECross Entropy LossHinge Loss &#xff08;SVN用的比较多&#xff09; ∑ i m a x ( 0 , 1 − y i ∗ h θ ( x i ) ) \sum_imax(0,1-y_i*h_\theta(x_i)) ∑i​max(0,1−yi​∗hθ​(xi​)) Entropy&#xff08;熵&#xff09; Uncertainty&#xff08;…

ESP32——物联网小项目汇总

商品级ESP32智能手表 [文章链接] 用ESP32&#xff0c;做了个siri&#xff1f;&#xff01;开源了&#xff01; [文章链接]