基于STC12C5A60S2系列1T 8051单片的IIC总线器件模数芯片PCF8591实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的IIC总线器件模数芯片PCF8591实现模数转换应用

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

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

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

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

在这里插入图片描述

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

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

IIC总线器件模数芯片PCF8591介绍

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

通过IIC总线器件模数芯片PCF8591把电压模拟量转化为电压数字量

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

#include <stc12c5a60s2.h>
#include <intrins.h>
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint 
#define NixieTubeSegmentCode P0//自定义数码管段码为单片机P0组引脚
#define NixieTubeBitCode P2//自定义数码管位码为单片机P2组引脚
//#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;//声明数字量变量
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,0x40,0x00];//定义共阴数码管显示0~F数据、符号“—”及熄灭数组变量
uchar NixieTubeCacheDataArray[];//定义数码管缓存数据数组变量
//uint AddKeyPressDelayTime;//声明增加按键按下延时时间变量
//uint DecKeyPressDelayTime;//声明减少按键按下延时时间变量
float OutPutVoltage;//声明输出电压变量
float AnalogFilterOutPutVoltage;//声明模拟滤波后输出电压变量
//uint Timer0TimeCount;//声明定时器0定时计数变量
//sbit AddKey = P3^0;//位定义增加按键为单片机P3.0引脚
//sbit DecKey = P3^1;//位定义减少按键为单片机P3.1引脚
sbit I2CSCL = P1^0;//位定义I2C时钟变量为P1.0端口
sbit I2CSDA = P1^1;//位定义I2C数据变量为P1.1端口
 void PCF8591Change(uchar Address,uchar Channel)//PCF8591转化函数
{
  uchar AnalogChangeResult;//声明模拟转换结果变量
  I2CStar();//I2C启动函数
  if(I2CWriteByte(Address << 1))//判断I2C写器件地址是否有应答 如果括号里面条件为真 执行{}里面代码跳出 表示I2C写器件地址没有应答 即没连接上I2C器件
 {
   I2CStop();//I2C停止函数
   return 0;//返回0
  }
  I2CWriteByte(Channel);//选I2C模拟通道
  I2CStar();//I2C启动函数
  I2CWriteByte((Address << 1)| 0x01);//I2C读操作
  I2CReadByte();//I2C读字节函数
  SendAck(0);//I2C发送应答
  AnalogChangeResult = I2CReadByte();//I2C读到的数据赋给模拟转换结果变量
  SendAck(1);//I2C不应答
  I2CStop();//I2C停止函数
  return AnalogChangeResult;//返回模拟转换结果变量包含的模拟数据
 }
 void I2CDelay()//I2C延时函数
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
 }
 void I2CStar()//I2C启动函数
{
  I2CSCL = 1;//空闲时 I2C时钟变量置高电平
  I2CSDA = 1;//空闲时 I2C数据变量置高电平
  I2CDelay();//I2C延时
  I2CSDA = 0;//I2C数据变量置低电平
  I2CDelay();//I2C延时
  I2CSCL = 0;//I2C时钟变量置低电平
 }
 bit I2CWriteByte(uchar Data)//I2C写字节函数
{
  uchar Temp;//声明临时变量
  bit Ack;//声明一位应答变量
  for(Temp = 0x80;Temp = !0;Temp >>= 1)//从某八位二进制数的最高位往最低位每次移出一位二进制数 取变化后的八位二进制数进行下一步从最高位往最低位每次右移出一位二进制数 直到写完某八位二进制数的每一位二进制数
 {
   if((Temp & Data) == 0)//判断临时变量包含的数据与上输入数模芯片PCF8591的八位二进制数得出八位二进制数最高位是否为0
   I2CSDA = 0;//I2C数据变量写0
   else//否则
   I2CSDA = 1;//I2C数据变量写1
   I2CDelay();//I2C延时
   I2CSCL = 1;//I2C时钟变量置高电平
   I2CDelay();//I2C延时
   I2CSCL = 0;//I2C时钟变量置低电平
  }
  Ack = I2CReceiveAck();//I2C接收应答函数接收应答赋给应答变量
  return (Ack);//返回应答
 }
 void SendAck(bit Ack)//I2C发送应答函数
{
  I2CSDA = Ack;//应答变量赋给I2C数据变量
  I2CDelay();//I2C延时
  I2CSCL = 1;//I2C时钟变量置高电平
  I2CDelay();//I2C延时
  I2CSCL = 0;//I2C时钟变量置低电平
 }
 bit ReceiveAck()//I2C接收应答函数
{
  bit Ack;//声明一位应答变量
  I2CSDA = 1;//I2C数据变量置高电平
  I2CDelay();//I2C延时
  I2CSCL = 1;//I2C时钟变量置高电平
  Ack = I2CSDA;//I2C数据变量
  I2CDelay();//I2C延时
  I2CSCL = 0;//I2C时钟变量置低电平
  return (Ack);//返回应答
 }
 uchar I2CReadByte()//I2C读字节函数
{
  uchar Data;//声明数据变量
  uchar Temp;//声明临时变量
  I2CSDA = 1;//I2C数据变量置高电平
  for(Temp = 0x80;Temp = !0;Temp >>= 1)//从某八位二进制数的最高位往最低位每次右移出一位二进制数 取变化后的八位二进制数进行下一步从最高位往最低位每次右移出一位二进制数 直到读完某八位二进制数的每一位二进制数
 {
   I2CDelay();//I2C延时
   I2CSCL = 1;//I2C时钟变量置高电平
   if(I2CSDA == 1)//判断I2C数据变量是否置高电平
  {
    Data |= Temp;//临时变量包含的数据或上某八位二进制数读出八位二进制数最高位为1
   }
   else//否则
  {
    Data &= ~Temp;//临时变量包含的数据与上某八位二进制数读出八位二进制数最高位为0
   }
   I2CDelay();//I2C延时
   I2CSCL = 0;//I2C时钟变量置低电平
  }
  return Data;//返回数据变量
 }
 void I2CStop()//I2C停止函数
{
  I2CSCL = 0;//I2C时钟变量置低电平
  I2CSDA = 0;//I2C数据变量置低电平
  I2CDelay();//I2C延时
  I2CSCL = 1;//I2C时钟变量置高电平
  I2CDelay();//I2C延时
  I2CSDA = 1;//I2C数据变量置高电平
  I2CDelay();//I2C延时
 }
 /****
 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要计入PCF8591转换器 而PCF8591转换器是十位寄存器 最大只能计入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;//数码管千位显示数据
  NixieTubeCacheDataArray[1] = NixieTubeBaiWei +15;//数码管百位带小数点显示数据
  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;//跳出
  }
 } 
 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
   PCF8591Change(NumberValue);//PCF8591转化函数 
  }
  ***/
  //KeyScan();//按键扫描函数
  NixieTubeDisplayData();//数码管显示数据函数
  TH0 = 0xfc;//设定定时器0高8位初值
  TL0 = 0x18;//设定定时器0低8位初值
  TR0 = 1;//开定时器0开关
 } 
 void main()//主函数
{
  uchar AnalogDataResult;//声明模拟数字结果变量
  uchar AnalogSamplingCount;//声明模拟采样计数变量
  uint AnalogFilterVoltage;//声明模拟滤波电压变量
  Timer0Init();//定时器0的16位定时模式1用12分频定时1ms初始化函数 晶振为12MHz
  //NumberValueSet();//数字量数值设置函数
  while(1)//主循环
 {
   AnalogDataResult = PCF8591Change(0x48,0);//PCF8591转化函数转化的模拟数据赋给模拟数据结果变量  
   OutPutVoltage = AnalogDataResult*1.0*250/255;//输出电压计算公式 250是基准电压2.5V转化成250mv 255是模数芯片PCF8591内部八位模拟转换寄存器能够储存的最大数值
   AnalogFilterVoltage = AnalogFilterVoltage + OutPutVoltage;//模拟滤波电压变量
   AnalogSamplingCount++;//模拟采样计数变量自加1
   if(AnalogSamplingCount >= 8)//模拟采样计数变量计8次
  {
    AnalogFilterOutPutVoltage = AnalogFilterVoltage >> 3;//模拟滤波电压变量右移三位 表示模拟滤波电压变量除以8取平均滤波后的输出电压
    AnalogSamplingCount = 0;//模拟采样计数变量清0
    AnalogFilterVoltage = 0;//模拟滤波电压变量清0  
   }
   NixieTubeDisplayDataSplit()//数码管显示数据分解函数
  }
 }  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

注解方式优雅的实现 Redisson 分布式锁

1前言 日常开发中&#xff0c;难免遇到一些并发的场景&#xff0c;为了保证接口执行的一致性&#xff0c;通常采用加锁的方式&#xff0c;因为服务是分布式部署模式&#xff0c;本地锁Reentrantlock和Synchnorized这些就先放到一边了&#xff0c;Redis的setnx锁存在无法抱保证…

asp.net健身会所管理系统sqlserver

asp.net健身会所管理系统sqlserver说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; 首页 会员注册 教练预约 系统公告 健身课程 在线办卡 用户中心[修改个人信息 修…

Modbus RTU 使用教程(modbus教程、modbus协议)

参考文章&#xff1a;这节课带你吃透Modbus通信协议 文章目录 Modbus RTU 使用教程第1部分&#xff1a;Modbus RTU 协议概述什么是Modbus RTU协议Modbus RTU的特点工作原理 第2部分&#xff1a;硬件和软件要求硬件要求软件要求 第3部分&#xff1a;Modbus RTU数据结构数据帧格式…

android适配鸿蒙系统开发

将一个Android应用迁移到鸿蒙系统需要进行细致的工作&#xff0c;因为两者之间存在一些根本性的差异&#xff0c;涉及到代码、架构、界面等多个方面的修改和适配。以下是迁移工作可能涉及的一些主要方面&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专…

各品牌PLC元件在modbus内区域

1台达&#xff1a; 输出在0区&#xff0c; 040961是在 0区 0xA000~0xA0FF 【Y0~Y377】 输入在1区&#xff0c;124577是在 1区 0x6000~0x60FF 【X0~X377】 M寄存器0区&#xff0c;0000001是 0区&#xff0c;0x000~0x1FFF 【M0~M8191】 D寄存器4区&#xff0c;400000…

CTFhub-RCE-过滤运算符

检查网页源代码发现如果用户输入 || &#xff08;逻辑或操作符&#xff09; 或者是 & &#xff08;按位与操作符&#xff09;&#xff0c;就不会执行。直接进行测试&#xff0c;在 URL 后输入本地 IP 进行 ping 命令测试&#xff0c;发现可以正常回显。检查网页源代码发现如…

2018年五一杯数学建模B题商业银行人民币贷款规模分配及盈利问题解题全过程文档及程序

2019年五一杯数学建模 B题 商业银行人民币贷款规模分配及盈利问题 原题再现 商业银行贷款投放的简单模型是&#xff1a;从客户端吸收存款&#xff0c;缴存法定准备金&#xff08;法定准备金率&#xff1a;大型金融机构15.5%&#xff0c;中小金融机构12%&#xff1b;法定准备金…

Spring Boot Actuator:自定义端点

要在Spring Boot Actuator中实现自定义端点&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.创建一个自定义端点类 该类需要使用Endpoint注解进行标记&#xff0c;并使用Component注解将其作为Spring Bean进行管理。 package com.example.highactuator.point;import lo…

flowable消息事件

一&#xff1a;启动事件 定义消息。 引用消息。 <startEvent id"msgStart" name"消息启动事件" isInterrupting"true"><messageEventDefinition messageRef"myMsgStart"></messageEventDefinition> </startE…

机器学习第6天:线性回归模型正则化

文章目录 机器学习专栏 正则化介绍 岭回归 岭回归成本函数 核心代码 示例 Lasso回归 Lasso回归损失函数 核心代码 弹性网络 弹性网络成本函数 核心代码 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 正则化介绍 作用&#xff1a;正则化是为了防止模型过拟合…

es使用客户端,“grunt” 不是内部或外部命令,多种解决方法

”grunt“不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 4、问题排查 查看node的安装根目录 npm root -g 在运行grunt -version还是不行 网上找了很多&#xff0c;给出正确解决方案的没几个&#xff0c;所以自己摸索&#xff0c;最后确定了加环境变量的解…

Python实验项目7 :tkinter GUI编程

&#xff08;1&#xff09;利用tkinter 制作界面&#xff0c;效果图如下&#xff1a; from tkinter import * # winTk() for i in range(1,20):Button(width5,height10,bg"black" if i%20 else"white").pack(side"left") win.geometry("8…

Android 屏幕适配

目录 一、为什么要适配 二、几个重要的概念 2.1 屏幕尺寸 2.2 屏幕分辨率 2.3 屏幕像素密度 2.4 屏幕尺寸、分辨率、像素密度三者关系 三、常用单位 3.1 密度无关像素(dp) 3.2 独立比例像素&#xff08;sp&#xff09; 3.3 dp与px的转换 四、解决方案 4.1 今日头条…

Docker之DockerFile解析

DockerFile解析 是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 概述 官网 https://docs.docker.com/engine/reference/builder/ 构建三步骤 编写Dockerfile文件 docker build命令构建镜像 docker run依镜像运…

李沐的学习Pytorch环境配置

https://github.com/Miraclelucy/dive_into_deep_learning/tree/main 上面是别人的笔记 可以学一下。 如果没有梯子&#xff0c;按照清华源配置 清华源conda配置 最好下载 1.11版本torch那一套 然后装d2l版本可以装 pip install d2l0.17.6然后可以用 http://localhost:8889/…

DolphinScheduler V3.1.8 海豚调度器【概述、安装、功能介绍、项目运用、邮箱预警设置】轻松拿捏!

概述 Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系&#xff0c;并为应…

Diffusion Models CLIP

Introduction to Diffusion Models 生成模型 主要指的是无监督学习中的生成模型&#xff0c;在无监督学习中的主要任务是让机器学习给定的样本&#xff0c;然后生成一些新的东西出来。比如&#xff1a;给机器看一些图片&#xff0c;能够生成一些新的图片出来&#xff0c;给机器…

.locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 随着科技的不断发展&#xff0c;网络空间的威胁也日益增加。其中&#xff0c;.locked勒索病毒作为一种恶意软件&#xff0c;给用户的数据安全带来了极大的威胁。本文91数据恢复将介绍.locked勒索病毒的特点&#xff0c;以及如何有效恢复被它加密的数据文件&a…

Java入门篇 之 多态

本篇碎碎念&#xff1a;个人认为&#xff0c;一切都不是不学习的理由&#xff0c;在如今这个"内卷"的时代&#xff0c;唯有认真学习&#xff0c;掌握知识&#xff0c;才能把握命运 今日份励志文案:你必须拼尽全力&#xff0c;才有资格说运气不好 加油吧&#xff0c;少…

Elasticsearch基础条件查询

条件查询 query&#xff1a;查询 match&#xff1a;匹配 match_all&#xff1a;匹配所有 #第一种 GET /shopping/_search?q名字:张三#第二种 GET /shopping/_search {"query": {"match": {"名字": "张三"}} }#全量查询 match_all G…