蓝桥杯2024/1/28----十二届省赛题笔记

题目要求:

2、 竞赛板配置要求

2.1将 IAP15F2K61S2 单片机内部振荡器频率设定为 12MHz。
2.2键盘工作模式跳线 J5 配置为 KBD 键盘模式。
2.3扩展方式跳线 J13 配置为 IO 模式。
2.4 请注意 选手需严格按照以上要求配置竞赛板,编写和调试程序 不符合以上
配置要求的作品将被评为零分或者被酌情扣分。

3、 硬件框图

4、 功能描述

4.1功能概述

1) 通过获取 DS18B20 温度传感器的温度数据,完成温度测量功能。
2) 通过 PCF8591 AD/DA 芯片完成 DAC 输出功能。
3) 通过数码管完成题目要求的数据显示功能。
4) 通过按键完成题目要求的显示界面切换和设置功能。
5) 通过 LED 指示灯完成题目要求的指示功能。

4.2性能要求

1) 温度数据刷新时间:≤1 秒。
2) DAC 输出电压刷新时间:≤0.5 秒。
3) 按键动作响应时间:≤0.2 秒。

4.3显示功能

4.4按键功能

1) 功能说明
S4 :定义为“界面”按键,按下 S4 按键,切换温度显示界面、参数
设置界面和 DAC 输出界面,按键 S4 切换模式如图 5 所示:
S8 :定义为“减”按键
在参数界面下按下 S8 按键,温度参数减 1。
S9 :定义为“加”按键
在参数界面下按下 S9 按键,温度参数加 1。
S5 :定义为“模式”切换按键。
模式 1: DAC 输出电压与温度相关。
通过 DS18B20 采集到的实时温度小于温度参数时,
DAC 输出 0V,否则,
DAC 输出 5V。
模式 2: DAC 按照图 7 给出的关系输出电压。
2) 其它要求
按键应做好消抖处理,避免出现一次按键动作导致功能多次触发等问
题。 按键动作不影响数码管显示和数据采集过程。
S8、S9 按键仅在参数设置界面有效。
设定的温度参数在退出参数设置界面时生效。

4.5LED 指示灯功能

1) 当前处于模式 1 状态,指示灯 L1 点亮,否则熄灭。
2) 当前处于温度显示界面,指示灯 L2 点亮,否则熄灭。
3) 当前处于参数设置界面,指示灯 L3 点亮,否则熄灭。
4) 当前处于 DAC 输出界面,指示灯 L4 点亮,否则熄灭。

4.6初始状态说明

请严格按照以下要求设计作品的上电初始状态。
1) 处于温度显示界面。
2) 处于模式 1。
3) 温度参数为 25℃

每次建好工程文件夹,里边包含User(放工程文件,mian.c,可以在这里写如同我这个文章的文本文档)、Driver(存放底层文件如Led.c,Led.h等)
新建的工程先搭建框架,可以先书写底层函数(此次书写了六个函数并包含相应的头文件共十二个底层文件)


底层函数内容:

1.初始化底层驱动专用文件

比如先用3个IO口控制74HC138译码器,控制Y4为低电平;当Y4为低电平时,或非门74HC02控制Y4C为高电平,使74HC573的OE端口有效,OE端口有效时,可使用P0口控制LED的亮灭。
可以去多了解74HC138译码器,74HC02或非门,74HC573八路输出透明锁存器的相关内容会更好理解
#include <Init.h>

//关闭外设
void System_Init()
{
    P0 = 0xff;
    P2 = P2 & 0x1f | 0x80;
    P2 &= 0x1f;
    P0 = 0x00;
    P2 = P2 & 0x1f | 0xa0;
    P2 &= 0x1f;
}
//头文件
#include <STC15F2K60S2.H>
void System_Init();

2.Led底层驱动专用文件

与初始化底层驱动专用文件同理,需要了解对应的锁存器控制,可以在使用的芯片数据手册查看
#include <Led.h>

void Led_Disp(unsigned char addr,enable)//LED
{
    static unsigned char temp = 0x00;
    static unsigned char temp_Old = 0xff;
    if(enable)
        temp |=0x01 << addr;
    else
        temp&= ~ (0x01 << addr);
    if(temp != temp_Old)
    {
        P0 = ~ temp;
        P2 = P2 & 0x1f | 0x80;
        P2 &= 0x1f;
        temp_Old = temp;
    }
}
void Beep(unsigned char flag)//蜂鸣器
{
    static unsigned char temp = 0x00;
    static unsigned char temp_Old = 0xff;
    if(flag)
        temp |=0x40 ;
    else
        temp &= ~ 0x40 ;
    if(temp != temp_Old)
    {
        P0 = ~ temp;
        P2 = P2 & 0x1f | 0xa0;
        P2 &= 0x1f;
        temp_Old = temp;
    }
}
void Relay(unsigned char flag)//继电器
{
    static unsigned char temp = 0x00;
    static unsigned char temp_Old = 0xff;
    if(flag)
        temp |= 0x10 ;
    else
        temp &= ~ 0x10 ;
    if(temp != temp_Old)
    {
        P0 = ~ temp;
        P2 = P2 & 0x1f | 0xa0;
        P2 &= 0x1f;
        temp_Old = temp;
    }
}

//头文件
#include <STC15F2K60S2.H>
void Led_Disp(unsigned char addr,enable);

3.按键底层驱动专用文件

(板子上的按键从按键4开始到按键19,可根据实际硬件修改)
#include <Key.h>

unsigned char Key_Read()
{
    unsigned char temp = 0;
    P44 = 0; P42 = 1; P35 = 1; P34 = 1;//实际板子的连接
    //P37 = 0; P36 = 1; P35 = 1; P34 = 1;//这个是仿真使用的
    if(P33 == 0)temp = 4;
    if(P32 == 0)temp = 5;
    if(P31 == 0)temp = 6;
    if(P30 == 0)temp = 7;
    P44 = 1; P42 = 0; P35 = 1; P34 = 1;
    if(P33 == 0)temp = 8;
    if(P32 == 0)temp = 9;
    if(P31 == 0)temp = 10;
    if(P30 == 0)temp = 11;
    P44 = 1; P42 = 1; P35 = 0; P34 = 1;
    if(P33 == 0)temp = 12;
    if(P32 == 0)temp = 13;
    if(P31 == 0)temp = 14;
    if(P30 == 0)temp = 15;
    P44 = 1; P42 = 1; P35 = 1; P34 = 0;
    if(P33 == 0)temp = 16;
    if(P32 == 0)temp = 17;
    if(P31 == 0)temp = 18;
    if(P30 == 0)temp = 19;
    return temp;
    
}
//头文件
#include <STC15F2K60S2.H>

unsigned char Key_Read();

4.数码管底层驱动专用文件

#include <Seg.h>

unsigned char Seg_Dula[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc6,0x8c,0x88};//数码管段码储存数组
unsigned char Seg_Wela[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管位码储存数组

void Seg_Disp(unsigned char wela,dula,point)//数码管显示函数
{
    P0 = 0xff; //
    P2 = P2 & 0x1f |0xe0;
    P2 &= 0x1f;
    P0 = Seg_Wela[wela];
    P2 = P2 & 0x1f |0xc0;
    P2 &= 0x1f;
    P0 = Seg_Dula[dula];
    if(point)
        P0 &= 0x7f;
    P2 = P2 & 0x1f |0xe0;
    P2 &= 0x1f;
}
//头文件
#include <STC15F2K60S2.H>

void Seg_Disp(unsigned char wela,dula,point);

5.//DAC底层驱动专用头文件

/*
  程序说明: IIC总线驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/

#include "iic.h"


#include "intrins.h"

#define DELAY_TIME 5

#define Photo_Res_Channel 0x41
#define Adj_Res_Channel 0x43


//总线引脚定义


sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */

void IIC_Delay(unsigned char i)
{
    do{_nop_();}
    while(i--);        
}

//总线启动条件


void IIC_Start(void)
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;    
}

//总线停止条件


void IIC_Stop(void)
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//发送应答


void IIC_SendAck(bit ackbit)
{
    SCL = 0;
    SDA = ackbit;                      // 0:应答,1:非应答
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0; 
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//等待应答


bit IIC_WaitAck(void)
{
    bit ackbit;
    
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    return ackbit;
}

//通过I2C总线发送数据


void IIC_SendByte(unsigned char byt)
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) SDA  = 1;
        else SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

//从I2C总线上接收数据


unsigned char IIC_RecByte(void)
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
        SCL = 1;
    IIC_Delay(DELAY_TIME);
    da <<= 1;
    if(SDA) da |= 1;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    }
    return da;    
}


//函数名:DAC转换函数


//入口参数:要进行转换的数值
//返回值:无
//函数功能:对入口参数要转换的DA数据进行转换
void Da_Write(unsigned char dat)
{
    IIC_Start();//发送开启信号
    IIC_SendByte(0x90);//选择PCF8591芯片,确定写的模式
    IIC_WaitAck();//等待PCF8591反馈
    IIC_SendByte(0x41);//使能DA转换(随便写通道编号,不影响,主要的功能是使能DA)
    IIC_WaitAck();//等待PCF8591反馈
    IIC_SendByte(dat);//将待转换的数据发送出去
    IIC_WaitAck();//等待PCF8591反馈
    IIC_Stop();//停止发送
}
//头文件
# include "STC15F2K60S2.H"


void IIC_Start(void); 
void IIC_Stop(void);  
bit IIC_WaitAck(void);  
void IIC_SendAck(bit ackbit); 
void IIC_SendByte(unsigned char byt); 
unsigned char IIC_RecByte(void); 
//函数名:DAC转换函数
//入口参数:要进行转换的数值
//返回值:无
//函数功能:对入口参数要转换的DA数据进行转换
void Da_Write(unsigned char dat);

6.//温度底层驱动专用头文件

/*    #     单总线代码片段说明
    1.     本文件夹中提供的驱动代码供参赛选手完成程序设计参考。
    2.     参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题
        中对单片机时钟频率的要求,进行代码调试和修改。
*/

#include "onewire.h"
#include "reg52.h"

sbit DQ = P1^4;

//单总线内部延时函数


void Delay_OneWire(unsigned int t) //12T 或1T,根据需要修改
{
    t *= 12;//用了温度这句必须写,设置为12T,这句官方不会写,这两句和下面的功能一样
    while(t--);
//    unsigned char i;
//    while(t--)
//        {
//            for(i=0;i<12;i++);
//        }
}

//单总线写操作


void Write_DS18B20(unsigned char dat)//写
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        DQ = 0;
        DQ = dat&0x01;
        Delay_OneWire(5);
        DQ = 1;
        dat >>= 1;
    }
    Delay_OneWire(5);
}

//单总线读操作


unsigned char Read_DS18B20(void)//读
{
    unsigned char i;
    unsigned char dat;
  
    for(i=0;i<8;i++)
    {
        DQ = 0;
        dat >>= 1;
        DQ = 1;
        if(DQ)
        {
            dat |= 0x80;
        }        
        Delay_OneWire(5);
    }
    return dat;
}

//DS18B20初始化


bit init_ds18b20(void)//初始化
{
      bit initflag = 0;
      
      DQ = 1;
      Delay_OneWire(12);
      DQ = 0;
      Delay_OneWire(80);
      DQ = 1;
      Delay_OneWire(10); 
    initflag = DQ;     
      Delay_OneWire(5);
  
      return initflag;
}


//函数名:读取温度函数


//入口参数:无
//函数功能:完成温度转换,并返回转换之后的温度数据
float Read_t()
{
    unsigned char high,low;//返回的温度数据的高低八位
    init_ds18b20();//初始化
    Write_DS18B20(0xcc);//跳过ROM
    Write_DS18B20(0x44);//进行温度转换
    init_ds18b20();//初始化
    Write_DS18B20(0xcc);//跳过ROM
    Write_DS18B20(0xbe);//读取温度
    low = Read_DS18B20();//读取低位
    high = Read_DS18B20();//读取高位
    return ((high << 8) |low) / 16.0;
}
//头文件
#ifndef __ONEWIRE_H
#define __ONEWIRE_H

float Read_t();

#endif

工程主函数内容:

1.头文件声明(把需要用到的头文件添加进来)


/*头文件声明区*/
#include <STC15F2K60S2.H>//单片机寄存器专用头文件
#include <Init.h>//初始化底层驱动专用头文件
#include <Led.h>//Led底层驱动专用头文件
#include <Key.h>//按键底层驱动专用头文件
#include <Seg.h>//数码管底层驱动专用头文件
#include "onewire.h"//温度底层驱动专用头文件
#include "iic.h"//DAC底层驱动专用头文件

2.变量声明(把需要用到的所有变量现在这里进行声明)


/*变量声明区*/
unsigned char Key_Val,Key_Old,Key_Down,Key_Up;//按键专用变量
unsigned char Key_Slow_Down;//按键减速专用变量
unsigned char Seg_Slow_Down;//数码管减速专用变量
unsigned char Seg_Pos;//数码管扫描专用变量
unsigned char Seg_Buf[8] = {10,10,10,10,10,10,10,10};//数码管显示数据存放数组
unsigned char Seg_Point[8] = {0,0,0,0,0,0,0,0};//数码管小数点数据存放数组
unsigned char ucLed[8] = {0,0,0,0,0,0,0,0};//Led显示数据存放数组
unsigned char Seg_Disp_Mode;//数码管显示模式 0-温度显示界面 1-参数设置界面 2-DAC输出界面
float Temperature;//实时温度变量
unsigned char Temp_Disp = 25;//温度参数变量(用于设置显示)
unsigned char Temp_Ctrol = 25;//温度参数控制变量(用于实际控制) 初始值:25
float Voltage_Output;//实时输出电压
bit Output_Mode;//DAC输出模式 0-DAC输出电压与温度相关 1-DAC给出的关系输出电压

3.按键处理函数(在这里编写按键控制的函数)


/*键盘处理函数*/
void Key_Proc()
{
    if(Key_Slow_Down)return;
    Key_Slow_Down = 1;//键盘减速程序
    
    Key_Val = Key_Read();//实时读取键码值
    Key_Down = Key_Val & (Key_Val ^ Key_Old);//捕捉按键下降沿
    Key_Up = ~ Key_Val & (Key_Val ^ Key_Old);//捕捉按键上升沿
    Key_Old = Key_Val;//辅助扫描变量
    
    switch(Key_Down)
    {
        case 4://界面切换按键
            if(++Seg_Disp_Mode == 3)
            Seg_Disp_Mode = 0;//数码管显示模式在0-2之间循环切换
            if(Seg_Disp_Mode == 1)//当前处于温度参数设置界面
            Temp_Disp = Temp_Ctrol;//将实际控制数据赋值给设置变量 便于数据更改
            if(Seg_Disp_Mode == 2) //当界面从参数设置切换出去后
            Temp_Ctrol = Temp_Disp;//将设置数据保存到控制变量
        break;
        case 8://参数自减按键
            if(Seg_Disp_Mode == 1)//当前处于温度参数设置界面
            {
                if(--Temp_Disp == 255)//限制温度下限为0
                    Temp_Disp = 0;
            }
        break;
            case 9://参数自加按键
            if(Seg_Disp_Mode == 1)//当前处于温度参数设置界面
            {
                if(++Temp_Disp == 100)//限制温度上限为99
                    Temp_Disp = 99;
            }
        break;
            case 5://模式切换按键
                Output_Mode ^= 1;//切换输出模式
            break;
    }
    
}

4.信息处理函数(需要使用到到的函数进行简单的预处理)


/*信息处理函数*/
void Seg_Proc()
{
    if(Seg_Slow_Down)return;
    Seg_Slow_Down = 1;
    /*信息获取区域*/
    Temperature = Read_t();//实时读取温度值
    /*数据显示区域*/

        switch(Seg_Disp_Mode)
        {
            case 0://温度显示界面
                Seg_Buf[0] = 11;//显示C
                Seg_Buf[4] = (unsigned char)Temperature / 10 % 10;
                Seg_Buf[5] = (unsigned char)Temperature % 10;
                Seg_Buf[6] = (unsigned int)(Temperature * 100 )/ 10 % 10;
                Seg_Buf[7] = (unsigned int)(Temperature * 100 )% 10;
                //Seg_Point[5] = 1;//使能小数点
            break;
            case 1://参数设置界面
                Seg_Buf[0] = 12;//显示P
                Seg_Buf[4] = Seg_Buf[5] = 10;//熄灭第五、第六个数码管
                Seg_Buf[6] = Temp_Disp / 10 % 10;
                Seg_Buf[7] = Temp_Disp % 10;
                Seg_Point[5] = 0;
            break;
            case 2://DAC输出界面
                Seg_Buf[0] = 13;//显示A
                Seg_Buf[5] = (unsigned char)Voltage_Output % 10;
                Seg_Buf[6] = (unsigned int)(Voltage_Output * 100 )/ 10 % 10;
                Seg_Buf[7] = (unsigned int)(Voltage_Output * 100 )% 10;
                Seg_Point[5] = 1;
            break;
        }
            
}
int cnt1=0;


5.其他函数(其他编写的函数,在这里书写会比较方便理解)


/*其他函数*/
void Led_Proc()
{
    unsigned char i;//用于For循环
    /*DAC相关*/
    if(Output_Mode == 0)//DAC输出电压与温度相关,当前处于模式 1 状态,指示灯 L1 点亮,否则熄灭
    {
        if(Temperature < Temp_Ctrol)//当实时温度小于温度参数时
            Voltage_Output = 0;//DAC输出0V
        else//当实时温度大于参数设置时
            Voltage_Output = 5;//DAC输出5V
    }
    else    //当前处于 DAC 输出界面,指示灯 L4 点亮,否则熄灭。
    {
        if(Temperature < 20)//当实时温度小于20度时,测试时难以达到相应温度可以修改实际温度看显示状况
            Voltage_Output = 1;//DAC输出1V
        else if(Temperature > 40)//当实时温度小于40度时,测试时难以达到相应温度可以修改实际温度看显示状况
            Voltage_Output = 4;//DAC输出4V
        else//当实时温度在20-40之间时
            Voltage_Output = 0.15*(Temperature - 20) + 1;//DAC输出与实时温度为一次函数关系,0.15=(40-20)/(4-1)V
    }
    Da_Write(Voltage_Output * 51);//实时输出DAC,0-255的范围和0-5V要对应上则*51
    
    /*LED相关*/
    //    ucLed[0] = !Ouput_Mode;//当前处于模式 1 状态,指示灯 L1 点亮,否则熄灭
    //    for(i=0;i<3;i++)//模式指示灯
    //     ucLed[1+i] = (i == Seg_Disp_Mode);
//这几个同样可以实现指示灯的状态,但是在上电时L1常亮出现异常,当前并非为模式一界面,切换到模式一界面后L4没有熄灭,按下S5后L4才会熄灭
    for(i= 0;i<3;i++)//模式指示灯,无异常
    {
        if( Output_Mode == 0)
        {
            if(i == Seg_Disp_Mode )//上电显示界面
            {
                cnt1=i+1;
                if(cnt1==3)//DAC显示界面两种模式和输出模式
                {
                    Led_Disp(0,1);//L1
                    Led_Disp(3,0);//当L1亮起熄灭L4
                }
                else
                {
                    Led_Disp(i+1,1);
                }
                
            }
            else
            {
                //Led_Disp(i+1,0);
                cnt1=i+1;
                if(cnt1==3) Led_Disp(0,0);
                else Led_Disp(i+1,0);
            }
        }
        else    //DAC
        {
            if(i == Seg_Disp_Mode )
            {
                Led_Disp(0,0);
                Led_Disp(i+1,1);
            }
            else
                Led_Disp(i+1,0);
        }

    }    
}

6.定时器0中断初始化函数

(这个可以使用STC的定时器计算那里生成c代码,后面要自己添加ET0,EA打开中断)
/*定时器0初始化函数*/
void Timer0Init(void)        //1毫秒@12.000MHz
{
    AUXR &= 0x7F;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0x18;        //设置定时初值
    TH0 = 0xFC;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
    ET0 = 1;
    EA = 1;
}


7.定时器0中断服务函数

(为了定时执行特定的任务,如此处设置了定时的时间触发了数码管和LED产生特定反应)
/*定时器0中断服务函数*/
void Timer0server() interrupt  1
{
    if(++Key_Slow_Down == 10)Key_Slow_Down = 0;//键盘减速专用
    if(++Seg_Slow_Down == 500)Seg_Slow_Down = 0;//数码管减速专用
    if(++Seg_Pos == 8)Seg_Pos = 0;//数码管显示专用
    Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);
    
    //Led_Disp(Seg_Pos,ucLed[Seg_Pos]);//0  +1
}


/*延时函数*/


void Delay750ms()        //@12.000MHz
{
    unsigned char i, j, k;
    i = 35;
    j = 51;
    k = 182;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

8.主函数Main(调用书写的函数实现所需的相应功能)


/*Main*/
void main()
{
    Read_t();//上电读取一次温度并且延时750ms避免数据出现85
    Delay750ms();
    Sys_Init();
    Timer0Init();
    while(1)
    {
        Key_Proc();
        Seg_Proc();
        Led_Proc();
    }
}

DS18B20相关资料:

Bit15-bit11:符号位;bit10-bit4:整数位;bit3-bit0:小数位

后面返回值的时候有一个/ 16.0 ,等价于*0.625;这两个都是计算精度的。

这两个为了更好的运行效果,可以直接在主函数调用,当把这两个语句放到while循环里面,或者读取的语句放入while循环里会产生大约10秒的延时才会显示数据,与预期750ms的效果相差较大。产生这么久的延时主要由于中断的数码管显示延时占用了较多次,可以把延时改小尝试。

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

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

相关文章

C语言基础13

今天是学习嵌入式相关内容的第十四天&#xff0c;以下是今日所学内容 1.结构体: 1.结构体类型定义 2.结构体变量的定义 3.结构体元素的访问 4.结构体的存储 内存对齐 结构体整体的大小必须为最大基本类型长度的整数倍 5.结构体作为函数参数 值传递 练习:定…

数据中心IP代理是什么?有何优缺点?海外代理IP全解

海外代理IP中&#xff0c;数据中心代理IP是很热门的选择。这些代理服务器为用户分配不属于 ISP&#xff08;互联网服务提供商&#xff09;且来自第三方云服务提供商的 IP 地址&#xff0c;是分配给位于数据中心的服务器的 IP 地址&#xff0c;通常由托管和云公司拥有。 这些 I…

使用Huggingface镜像站hf-mirror.com下载资源

前言 在使用Huggingface的过程中&#xff0c;有时我们可能会遇到无法访问官方网站huggingface.co的情况&#xff0c;这可能是由于网络监管或者网络连接问题所致。然而&#xff0c;幸运的是&#xff0c;我们可以通过hf-mirror.com这个Huggingface镜像站来解决这个问题。本篇博客…

shell脚本之多行重定向 免交互 expect ssh scp; 字符处理

多行重定向 使用I/O重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 Here Document 是标准输 入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可…

TypeScript(十) Map对象、元组、联合类型、接口

1. Map对象 1.1. 简述 Map对象保存键值对&#xff0c;并且能够记住键的原始插入顺序。   任何值都可以作为一个键或一个值。 1.2. 创建 Map 使用Map类型和new 关键字来创建Map&#xff1a; 如&#xff1a; let myMap new Map([["key1", "value1"],[&…

Prometheus---图形化界面grafana(二进制)

前言 Prometheus是一个开源的监控以及报警系统。整合zabbix的功能&#xff0c;系统&#xff0c;网络&#xff0c;设备。 proetheus可以兼容网络&#xff0c;设备。容器的监控。告警系统。因为他和k8s是一个项目基金开发的产品&#xff0c;天生匹配k8s的原生系统。容器化和云原…

iOS App审核状态和审核时间管理指

引言 对于一款开发完成并准备上架的 iOS 应用程序来说&#xff0c;通过苹果公司的审核是非常重要的一步。苹果公司会对应用程序进行严格的检查&#xff0c;以确保应用程序的质量和安全性。本文将介绍 iOS 应用程序审核的流程和时间&#xff0c;希望能够帮助开发者更好地了解和…

《Is dataset condensation a silver bullet for healthcare data sharing?》

一篇数据浓缩在医疗数据集应用中的论文。 其实就是在医疗数据集上使用了data condensation的方法&#xff0c;这里使用了DM的方式&#xff0c;并且新增了浓缩时候使用不同的网络。 1. 方法 数据浓缩DC的目的是&#xff1a; E x ∼ P D [ L ( φ θ O ( x ) , y ) ] ≃ E x ∼…

CPU-Cache结构查看

参考【Ubuntu 查看 CPU 缓存】 本文主要介绍cpu的cache查看&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花…

【昕宝爸爸小模块】深入浅出详解之常见的语法糖

深入浅出详解之常见的语法糖 一、&#x1f7e2;关于语法糖的典型解析二、&#x1f7e2;如何解语法糖&#xff1f;2.1&#x1f7e2;糖块一、switch 支持 String 与枚举2.2&#x1f4d9;糖块二、泛型2.3&#x1f4dd;糖块三、自动装箱与拆箱2.4&#x1f341;糖块四、方法变长参数…

什么是图形组态软件?可视化组态工具的特点

组态软件的定义 组态软件主要作为SCADA系统及其他控制系统的上位机人机界面的开发平台&#xff0c;为用户提供快速地构建工业自动化系统数据采集和实时监控功能服务。它使用灵活的组态方式&#xff0c;提供快速构建工业自动控制系统监控功能的通用层次的软件工具。 组态软件的…

【学网攻】 第(17)节 -- 命名ACL访问控制列表

系列文章目录 目录 前言 一、ACL(访问控制列表)是什么&#xff1f; 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第…

对于this.$nextTick代码的理解

我们都知道DOM的更新是异步的,Vue的绑定原理就是用数据区驱动视图,视图也能驱动数据&#xff0c;两者是双向绑定的。 如何立马获取到更新之后的DOM呢&#xff1f; 可以使用: <template><div class"" ref"aa">{{ a }}<button click"f…

TortoiseSVN各版本汉化包下载

首先进入下载版本列表 1.下载地址&#xff1a;https://sourceforge.net/projects/tortoisesvn/files ​ 2.选择自己版本进入​ 3.选择Language Packs进入&#xff0c;选择对应语言包下载。 ​ 4.在TortoiseSVN根目录下点击安装即可。 ​

Leetcode—1265. 逆序打印不可变链表【中等】Plus

2024每日刷题&#xff08;一零三&#xff09; Leetcode—1265. 逆序打印不可变链表 实现代码 /*** // This is the ImmutableListNodes API interface.* // You should not implement it, or speculate about its implementation.* class ImmutableListNode {* public:* v…

Django模型(六)

一、其它查询 文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#count 1.1、排序 Queryset.order_by(*fields) 默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的 可以通过使用 order_by 方法在每个 QueryS…

《QDebug 2024年1月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Repeator 的 delegate 在 remove 移除时的注意事项 Qt Bug Tracker&#xff1a;https://bugreports.qt.io/browse/QTBUG-47500 Repeator 在调用 remove 函数之后&#xff0c;对应的 Item 会立即释放&#xff0c;后续就…

百川终入海 ,一站式海量数据迁移工具 X2Doris 正式发布

在大数据分析领域&#xff0c;Apache Doris 作为广受认可的开源实时数据仓库&#xff0c;已经在越来越多行业用户的真实业务场景中得到广泛应用&#xff0c;成为许多企业数据分析基础设施的重要基座。尤其在过去一年多的时间里&#xff0c;越来越多企业选择基于 Apache Doris 进…

【Linux驱动】块设备驱动(一)—— 注册块设备

针对块设备驱动将分为两部分介绍&#xff0c;第一部分是注册块设备&#xff0c;即将块设备成功添加到内核&#xff1b;第二部分是介绍如何读写块设备&#xff0c;因为没有实际块设备&#xff0c;这里选择使用内存来模拟块设备。 一、认识块设备 1、什么是块设备 块设备针对的…

抵御.360勒索病毒威胁:解密文件的有效方法与预防措施

导言&#xff1a; 近来&#xff0c;网络犯罪的一种新型形式——.360勒索病毒&#xff0c;备受关注。这种病毒通过加密用户文件&#xff0c;要求支付赎金以获取解密密钥。本文91数据恢复将深入介绍.360勒索病毒的特点&#xff0c;同时提供一些有效的恢复方法&#xff0c;并分享…
最新文章