基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用

news2024/11/17 10:25:23

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用

  • STC12C5A60S2系列1T 8051单片机管脚图
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
  • 模数芯片ADC0809介绍
    • 通过模数芯片ADC0809把电压模拟量转化为电压数字量

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

模数芯片ADC0809介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

通过模数芯片ADC0809把电压模拟量转化为电压数字量

#include <stc12c5a60s2.h>
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint 
#define NixieTubeSegmentCode P0//自定义数码管段码为单片机P0组引脚
#define NixieTubeBitCode P2//自定义数码管位码为单片机P2组引脚
#define ADC0809Data P3//自定义ADC0809数据变量为单片机P3组引脚
//#define KeyPressDeshakeTime 10//自定义按键按下消抖时间为10ms
//#define KeyLongPressDelayTime 500//自定义按键长按延时时间为500ms
//#define KeyLongPressIntervalChangeTime 25//自定义按键长按间隔变化时间为25ms
//uchar AddKeyLockFlag;//声明增加按键锁定标志位变量
//uchar DecKeyLockFlag;//声明减少按键锁定标志位变量
//uchar KeyNumber = 0;//定义按键键值为0
//uchar AddKeyLongPressAddIntervalTime;//声明增加按键长按连增间隔时间变量
//uchar DecKeyLongPressDecIntervalTime;//声明减少按键长按连减间隔时间变量
//uchar NumberValue;//声明数字量变量
//uint AddKeyPressDelayTime;//声明增加按键按下延时时间变量
//uint DecKeyPressDelayTime;//声明减少按键按下延时时间变量
uchar Code NixieTubeBitCodeArray = [0xfe,0xfd,0xfb,0xf7];//定义共阴数码管位码数组变量
uchar NixieTubeDisplayDataArray[0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1,0x40,0x00];//定义共阴数码管显示0~F、0~F带小数点数据及符号“—”及熄灭数组变量
uchar NixieTubeCacheDataArray[];//定义数码管缓存数据数组变量
uint OutPutVoltage;//声明输出电压变量
uint AnalogFilterOutPutVoltage;//声明模拟滤波后输出电压变量
//uint Timer0TimeCount;//声明定时器0定时计数变量
//sbit AddKey = P2^0;//位定义增加按键为单片机P2.0引脚
//sbit DecKey = P2^1;//位定义减少按键为单片机P2.1引脚
sbit ADC0809ADDRA = P1^0;//位定义ADC0809ADDRA模拟通道变量为P1.0端口
sbit ADC0809ADDRB = P1^1;//位定义ADC0809ADDRB模拟通道变量为P1.1端口
sbit ADC0809ADDRC = P1^2;//位定义ADC0809ADDRC模拟通道输入变量为P1.2端口
sbit ADC0809CLK = P1^3;//位定义ADC0809CLK时钟变量为P1.3端口
sbit ADC0809Star = P1^4;//位定义ADC0809Star启动变量为P1.4端口
sbit ADC0809EOC = P1^5;//位定义ADC0809EOC输出引脚变量为P1.5端口
sbit ADC0809OE = P1^6;//位定义ADC0809OE输出使能变量为P1.6端口
 void ADC0809Change()//ADC0809转化函数
{
  uchar AnalogChangeResult;//声明模拟转换结果变量
  ADC0809OE = 0;//ADC0809OE输出使能变量置低电平
  ADC0809Star = 0;//ADC0809Star启动变量置低电平
  ADC0809ADDRA = 1;//选ADC0809模拟通道3
  ADC0809ADDRB = 1;
  ADC0809ADDRC = 0;
  ADC0809Star = 1;//ADC0809Star启动变量置高电平 锁存ADC0809模拟通道3输入
  ADC0809Star = 0;//启动ADC0809模数转化
  while(ADC0809EOC == 0);//当ADC0809EOC输出引脚变量置低电平 表示ADC0809正在模数转化
  ADC0809OE = 1;//ADC0809OE输出使能变量置高电平
  AnalogChangeResult = ADC0809Data;//ADC0809数据变量包含的数据赋给AnalogChangeResult模拟转换结果变量
  ADC0809OE = 0;//ADC0809OE输出使能变量置低电平
  return AnalogChangeResult;//返回模拟转换结果变量包含的数据
 }
 /****
 void KeyScan()//按键扫描函数 该函数放在定时器定时1ms的中断函数中扫描
{
  if(AddKey)//如果增加按键没按下或弹起
 {
   AddKeyLockFlag = 0;//增加按键锁定标志位清0
   AddKeyPressDelayTime = 0;//增加按键按下延时时间清0
  }   
  else if(!AddKeyLockFlag)//如果增加按键锁定标志位置1 即增加按键按下
 {
   AddKeyPressDelayTime++;//增加按键按下延时时间自加
   if(AddKeyPressDelayTime > KeyPressDeshakeTime)//如果增加按键按下延时时间大于按键按下消抖时间
  {
    AddKeyPressDelayTime = 0;//增加按键按下延时时间清0
    KeyNumber = 1;//按键键值置1 此处是单击增加 可赋给swicth()语句中的变量来对数值单击增加
    AddKeyLockFlag = 1;//增加按键锁定标志位置1
   }
  }
  else if(AddKeyPressDelayTime < KeyLongPressDelayTime)//如果增加按键按下延时时间小于按键长按延时时间
 {
   AddKeyPressDelayTime++;//增加按键按下延时时间自加
  }
  else//如果增加按键按下延时时间大于按键长按延时时间
 {
   AddKeyLongPressAddIntervalTime++;//增加按键长按连增间隔时间自加
   if(AddKeyLongPressAddIntervalTime > KeyLongPressIntervalChangeTime)//如果增加按键长按连增间隔时间大于按键长按间隔变化时间
  {
    AddKeyLongPressAddIntervalTime = 0;//增加按键长按连增间隔时间清0
    KeyNumber = 1;//按键键值置1 此处是连击增加 可赋给swicth()语句中的变量来对数值连击增加
   }
  }   
  if(DecKey)//如果减少按键没按下或弹起
 {
   DecKeyLockFlag = 0;//减少按键锁定标志位清0
   DecKeyPressDelayTime = 0;//减少按键按下延时时间清0
  }   
  else if(!DecKeyLockFlag)//如果减少按键锁定标志位置1 即减少按键按下
 {
   DecKeyPressDelayTime++;//减少按键按下延时时间自加
   if(DecKeyPressDelayTime > KeyPressDeshakeTime)//如果减少按键按下延时时间大于按键按下消抖时间
  {
    DecKeyPressDelayTime = 0;//减少按键按下延时时间清0
    KeyNumber = 2;//按键键值置2 此处是单击减少 可赋给swicth()语句中的变量来对数值单击减少
    DecKeyLockFlag = 1;//减少按键锁定标志位置1
   }
  }
  else if(DecKeyPressDelayTime < KeyLongPressDelayTime)//如果减少按键按下延时时间小于按键长按延时时间
 {
   DecKeyPressDelayTime++;//减少按键按下延时时间自加
  }
  else//如果减少按键按下延时时间大于按键长按延时时间
 {
   DecKeyLongPressDecIntervalTime++;//减少按键长按连减间隔时间自加
   if(DecKeyLongPressDecIntervalTime > KeyLongPressIntervalChangeTime)//如果减少按键长按连减间隔时间大于按键长按间隔变化时间
  {
    DecKeyLongPressDecIntervalTime = 0;//减少按键长按连减间隔时间清0
    KeyNumber = 2;//按键键值置2 此处是连击减少 可赋给swicth()语句中的变量来对数值连击减少
    }
   }
 }
 ****/
 /****
 void NumberValueSet()//数字量数值设置函数
{
  switch(KeyNumber)//按键类型筛选位
 {
   case 1 ://增加按键单击、长按触发位
           NumberValue++;//数字量数值自加
           if(NumberValue > 255)//如果数字量数值大于255 为啥数字量数值变量NumberValue取255来比较?由于数字量数值变量NumberValue要计入DAC0832转换器 而DAC0832转换器是八位寄存器 最大只能计入255 因此数字量数值变量NumberValue取255来比较
          {
            NumberValue = 255;//数字量数值等于255
           }
           KeyNumber = 0;//按键键值清0
           break;//跳出
   case 2 ://减少按键单击、长按触发位
           NumberValue--;//数字量数值自减
           if(NumberValue < 0)//如果数字量数值小于0
          {
            NumberValue = 0;//数字量数值清0
           }
           KeyNumber = 0;//按键键值清0
           break;//跳出
   default:break;//跳出
  }
 }
 ****/
 void NixieTubeDisplayDataSplit()//数码管显示数据分解函数
{
  uchar NixieTubeQianWei,NixieTubeBaiWei,NixieTubeShiWei,NixieTubeGewei;//声明数码管千位、百位、十位、个位变量
  NixieTubeQianWei = AnalogFilterOutPutVoltage / 1000 ;//数码管千位分解
  NixieTubeBaiWei = AnalogFilterOutPutVoltage / 100 % 10;//数码管百位分解
  NixieTubeShiWei = AnalogFilterOutPutVoltage / 10 % 10 ;//数码管十位分解
  NixieTubeGeWei = AnalogFilterOutPutVoltage % 10 ;//数码管个位分解
  NixieTubeCacheDataArray[0] = NixieTubeQianWei + 15;//数码管千位显示带小数点数据
  NixieTubeCacheDataArray[1] = NixieTubeBaiWei;//数码管百位显示数据
  NixieTubeCacheDataArray[2] = NixieTubeShiWei;//数码管十位显示数据
  NixieTubeCacheDataArray[3] = NixieTubeGeWei;//数码管个位显示数据
 }
 void NixieTubeDisplayData()//数码管显示数据函数  
{  
  static uchar i = 0;//定义静态数码管位变化变量
  switch(i)//数码管位变化筛选
 {
   case 0 ://数码管千位显示
           NixieTubeSegmentCode = 0x00;//数码管段码消影
           NixieTubeSegmentCode = NixieTubeDisplayDataArray[NixieTubeCacheDataArray[0]];//数码管千位的段码显示
           NixieTubeBitCode = NixieTubeBitCodeArray[0];//数码管千位码显示
           i++;//数码管位变化自加1
           break;//跳出
   case 1 ://数码管百位显示
           NixieTubeSegmentCode = 0x00;//数码管段码消影
           NixieTubeSegmentCode = NixieTubeDisplayDataArray[NixieTubeCacheDataArray[1]];//数码管百位的段码显示
           NixieTubeBitCode = NixieTubeBitCodeArray[1];//数码管百位码显示
           i++;//数码管位变化自加1
           break;//跳出 
   case 2 ://数码管十位显示
           NixieTubeSegmentCode = 0x00;//数码管段码消影
           NixieTubeSegmentCode = NixieTubeDisplayDataArray[NixieTubeCacheDataArray[2]];//数码管十位的段码显示
           NixieTubeBitCode = NixieTubeBitCodeArray[2];//数码管十位码显示
           i++;//数码管位变化自加1
           break;//跳出
   case 3 ://数码管个位显示
           NixieTubeSegmentCode = 0x00;//数码管段码消影
           NixieTubeSegmentCode = NixieTubeDisplayDataArray[NixieTubeCacheDataArray[3]];//数码管个位的段码显示
           NixieTubeBitCode = NixieTubeBitCodeArray[3];//数码管个位码显示
           i = 0;//数码管位变化清0
           break;//跳出
   default:break;//跳出
  }
 }  
/*****关于8051系列单片机定时器溢出率和定时器初值(定时计数初值)之间计算的知识点*****/ 
/****
一、定时器溢出率计算公式
1、定时器溢出率:定时器每秒溢出的次数
2、定时器溢出率计算公式表
    定时方式            分频方式                      公式
方式1:16位定时器  12分频(即12T 默认值)   Ft=晶振频率/12/(65536-定时器初值)
方式2:8位定时器   12分频(即12T 默认值)   Ft=晶振频率/12/(256-定时器初值)
方式1:16位定时器      1分频(即1T)       Ft=晶振频率/1/(65536-定时器初值)
方式2:8位定时器       1分频(即1T)       Ft=晶振频率/1/(256-定时器初值)
二、定时器初值(定时计数初值)计算公式
    定时方式            分频方式                      公式
方式1:16位定时器   12分频(即12T 默认值)  定时器初值(定时计数)=65536-晶振频率/12*定时时间
方式2:8位定时器    12分频(即12T 默认值)  定时器初值(定时计数)=256-晶振频率/12*定时时间
方式1:16位定时器       1分频(即1T)      定时器初值(定时计数)=65536-晶振频率*定时时间
方式2:8位定时器        1分频(即1T)      定时器初值(定时计数)=256-晶振频率*定时时间
****/
 void Timer0Init()//定时器0的16位定时模式1用12分频定时1ms初始化函数 晶振为12MHz
{
  AUXR &= 0x7f;//设定定时器/计数器模式为12T
  TMOD &= 0xf0;//设定定时器/计数器工作模式清0
  TMOD |= 0x01;//设定定时器/计数器为定时器 工作模式为16位定时器0模式1
  TH0 = 0xfc;//设定定时器0高8位初值 
  TL0 = 0x18;//设定定时器0低8位初值
  TF0 = 0;//定时器0溢出中断标志位清0
  ET0 = 1;//打开定时器中断开关
  EA = 1;//打开定时器中断总开关
  TR0 = 1//打开定时器0开关
 } 
 void Timer0() interrupt 1//定时器0的16位定时模式1用12分频定时1ms中断函数 晶振为12MHz
{
  TR0 = 0;//关定时器0开关
  /****
  Timer0TimeCount++;//定时器0定时计数自加
  if(Timer0TimeCount >= 10)//10ms时间到
 {
   Timer0TimeCount = 0;//定时器0定时计数清0
   DAC0832Change(NumberValue);//DAC0832转化函数 
  }
  ****/
  //KeyScan();//按键扫描函数
  NixieTubeDisplayData();//数码管显示数据函数  
  TH0 = 0xfc;//设定定时器0高8位初值
  TL0 = 0x18;//设定定时器0低8位初值
  TR0 = 1;//开定时器0开关
 } 
 void Timer1Init()//定时器1的8位自动重装模式2用12分频定时1us初始化函数 晶振为12MHz
{
  AUXR &= 0xbf;//设定定时器/计数器模式为12T
  TMOD &= 0x0f;//设定定时器/计数器工作模式清0
  TMOD |= 0x20;//设定定时器/计数器为定时器 工作模式为8位自动重装模式2
  TH1 = 0xff;//设定定时器0高8位初值 
  TL1 = 0xff;//设定定时器0低8位初值
  TF1 = 0;//定时器0溢出中断标志位清0
  ET1 = 1;//打开定时器中断开关
  EA = 1;//打开定时器中断总开关
  TR1 = 1//打开定时器0开关
 } 
 void Timer1() interrupt 3//定时器1的8位自动重装模式2用12分频定时1us中断函数 晶振为12MHz
{
  ADC0809CLK = !ADC0809CLK;//500KHz的时钟
 } 
 void main()//主函数
{
  uchar AnalogDataResult;//声明模拟数字结果变量
  uchar AnalogSamplingCount;//声明模拟采样计数变量
  uint AnalogFilterVoltage;//声明模拟滤波电压变量
  Timer0Init();//定时器0的16位定时模式1用12分频定时1ms初始化函数 晶振为12MHz
  Timer1Init();//定时器1的8位自动重装模式2用12分频定时1us初始化函数 晶振为12MHz
  //NumberValueSet();//数字量数值设置函数
  while(1)//主循环
 {
   AnalogDataResult = ADC0809Change();//ADC0809转化函数转化的模拟数据赋给模拟数据变量
   OutPutVoltage = (AnalogDataResult*1.0*5/255)*1000;//输出电压计算公式 5是基准电压5V 255是模数芯片ADC0809内部八位模拟转换寄存器储存的最大数值 为啥乘以1000?由于输出电压是用四位数码管来显示 需要乘以1000来把输出电压变成四位数在四位数码管上分解显示出来
   AnalogFilterVoltage = AnalogFilterVoltage + OutPutVoltage;//模拟滤波电压变量
   AnalogSamplingCount++;//模拟采样计数变量自加1
   if(AnalogSamplingCount >= 8)//模拟采样计数变量计8次
  {
    AnalogFilterOutPutVoltage = AnalogFilterVoltage >> 3;//模拟滤波电压变量右移三位 表示模拟滤波电压变量除以8取平均滤波后的输出电压
    AnalogSamplingCount = 0;//模拟采样计数变量清0
    AnalogFilterVoltage = 0;//模拟滤波电压变量清0  
   }
   NixieTubeDisplayDataSplit()//数码管显示数据分解函数
  }
 } 

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

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

相关文章

kubenetes-Service和EndpointSlice

一、Service 二、Endpoint Endpoint记录一个 Service 对应一组 Pod 的访问地址&#xff0c;一个 Service 只有一个 Endpoint资源。Endpoint资源会去监测Pod 集合&#xff0c;只要服务中的某个 Pod 发生变更&#xff0c;Endpoint 就会进行同步更新。 三、Service、Endpoint和 P…

青少年CTF-WEB-2048

题目环境&#xff1a; 针对这种游戏通关类题目&#xff0c;常见的有两种情况 一、有参数改参数的数值达到题目规定的分数即可拿到flag 二、没有参数那么flag就是被编码了&#xff0c;找编码即可 这道题并没有说题目通关即可获得flag&#xff0c;也并没有发现参数 所以这里猜测f…

域名的理解

域名的分类 见下图 这里引用的阿里云对域名的定义&#xff0c;个人理解是有两种叫法&#xff0c;一种是传统的叫法&#xff0c;也就是将sample.org.cn划分成了三级域名&#xff0c;还有一种叫法是基于用户注册的域名来说的&#xff0c;将用户注册的整体域名称作一级域名&…

1、cvpr2024

CVPR2024官网&#xff1a; Overleaf模板&#xff1a; 更改作者&#xff08;去掉CVPR标识&#xff09; % \usepackage{cvpr} % To produce the CAMERA-READY version \usepackage[review]{cvpr} % To produce the REVIEW version改成 \usepackage{cvpr} …

高效背单词——单词APP安利

大英赛&#xff0c;CET四六级&#xff0c;以及考研英语&#xff0c;都在不远的未来再度来临&#xff0c;年复一年的考试不曾停息&#xff0c;想要取得好成绩&#xff0c;需要我们的重视并赋予相应的努力。对于应试英语&#xff0c;词汇量是不可忽略的硬性要求。相比于传统默写&…

翻译软件Mate Translate mac中文版介绍说明

Mate Translate mac可以帮你翻译超过100种语言的单词和短语&#xff0c;使用文本到语音转换&#xff0c;并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版软件介绍 Mate Translate 可以在你的所有设备之间轻松同步&#x…

EDA实验-----4*4矩阵键盘与数码管显示测试

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理&#xff1b;掌握4*4矩阵键盘和数码管显示的编…

如何解决msvcr100.dll丢失问题?5个实用的解决方法分享

在日常计算机操作过程中&#xff0c;相信不少小伙伴都经历过这样一种困扰&#xff0c;那便是某款应用程序或者游戏无法正常启动并弹出“找不到msvcr100.dll”的提示信息。这类问题让人头疼不已&#xff0c;严重影响到了我们的工作效率和休闲娱乐。接下来&#xff0c;就让小编带…

Node.js环境配置级安装vue-cli脚手架

一、下载安装Node.js (略) 二、验证node.js并配置 1、下载安装后&#xff0c;cmd面板输入node -v查询版本、npm -v ,查看npm是否安装成功&#xff08;有版本号就行了&#xff09; 2、选择npm镜像&#xff08;npm config set registry https://registry.npm.taobao.org&…

大数据HCIE成神之路之数学(3)——概率论

概率论 1.1 概率论内容介绍1.1.1 概率论介绍1.1.2 实验介绍 1.2 概率论内容实现1.2.1 均值实现1.2.2 方差实现1.2.3 标准差实现1.2.4 协方差实现1.2.5 相关系数1.2.6 二项分布实现1.2.7 泊松分布实现1.2.8 正态分布1.2.9 指数分布1.2.10 中心极限定理的验证 1.1 概率论内容介绍…

视频合并:掌握视频嵌套合并技巧,剪辑高手的必备秘籍

在视频剪辑的过程中&#xff0c;掌握视频合并的技巧是每个剪辑高手必备的技能之一。通过合理的合并视频&#xff0c;可以增强视频的视觉效果&#xff0c;提高观看体验。 一、视频合并的准备工作 收集素材&#xff1a;在进行视频合并之前&#xff0c;首先需要收集足够的素材&a…

IIC 通信协议之stm32 驱动OLED

前言 使用stm32 驱动4 Pin 的OLED&#xff0c; 现在网上开源的资料多的是&#xff0c;但是为了锻炼自己使用第一手资料的能力&#xff0c;今天我还是从数据手册开始&#xff0c;从头造一波轮子&#xff0c;同时也是为了加深自己对 IIC 协议的理解 &#xff0c;本系列内容我会从…

数据库课后习题加真题

文章目录 第二章第三章第四到六章某年真题 第二章 第三章 3.8 对于教学数据库的三个基本表&#xff1a; s( 学号 ‾ \underline{学号} 学号​&#xff0c;姓名&#xff0c;年龄, 性别) sc( 学号 , 课程号 ‾ \underline{学号, 课程号} 学号,课程号​, 成绩) c( 课程号 ‾ \un…

详解ssh远程登录服务

华子目录 简介概念功能 分类文字接口图形接口 文字接口ssh连接服务器浅浅介绍一下加密技术凯撒加密加密分类对称加密非对称加密非对称加密方法&#xff08;也叫公钥加密&#xff09; ssh两大类认证方式&#xff1a;连接加密技术简介密钥解析 ssh工作过程版本协商阶段密钥和算法…

Jmeter配置脚本录制进行抓包并快速分析、定位接口问题

对于测试人员、开发人员来说&#xff0c;善用抓包工具确实是快速分析和定位问题的一大必备神技&#xff0c;现将配置过程记录如下: 1、打开jmeter后&#xff0c;首先添加—个线程组: 2、线程组可以重新命名按项目名称分类: 如果你想学习自动化测试&#xff0c;我这边给你推荐一…

苹果iOS系统开发APP应用启动几种速度优化技巧与实践

在移动应用开发过程中&#xff0c;启动速度是影响用户体验的关键因素之一。一个应用如果启动迅速&#xff0c;会给用户留下良好的第一印象&#xff0c;相反&#xff0c;如果启动缓慢&#xff0c;用户的耐心和满意度可能会大打折扣。对于iOS开发者而言&#xff0c;优化启动速度不…

图像分类(五) 全面解读复现ResNet

解读 Abstract—摘要 翻译 更深的神经网络往往更难以训练&#xff0c;我们在此提出一个残差学习的框架&#xff0c;以减轻网络的训练负担&#xff0c;这是个比以往的网络要深的多的网络。我们明确地将层作为输入学习残差函数&#xff0c;而不是学习未知的函数。我们提供了非…

【算法】最小生成树——普利姆 (Prim) 算法

目录 1.概述2.代码实现2.1.邻接矩阵存储图2.2.邻接表存储图2.3.测试 3.应用 1.概述 &#xff08;1&#xff09;在一给定的无向图 G (V, E) 中&#xff0c;(u, v) 代表连接顶点 u 与顶点 v 的边&#xff0c;而 w(u, v) 代表此边的权重&#xff0c;若存在 T 为 E 的子集且为无循…

浅谈滑动窗口

滑动窗口是什么&#xff1f; 滑动窗口其实是一个想象出来的数据结构。有左边界L和有边界R。 举例来说&#xff1a;数组 arr {3,1,5,7,6,5,8}; 其窗口就是我们规定的一个运动轨迹。 最开始时&#xff0c;边界LR都在数组的最左侧&#xff0c;此时没有包住任何数。 此时规定&…

测试老鸟总结,Web/APP与接口测试测试流程总结,避背黑锅...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、web测试流程 …