蓝桥杯2024/1/31----第十届省赛题笔记

题目要求:

1、 基本要求

1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计
与调试。
1.2 选手在程序设计与调试过程中,可参考组委会提供的“资源数据包”。
1.3 请注意: 程序编写、调试完成后选手应通过考试系统提交完整、可编译的 Keil
工程文件。选手提交的工程文件应是最终版本,要求 Keil 工程文件以准考证
号(8 位数字)命名,工程文件夹内应包含以准考证号命名的 hex 文件,该 hex
文件是成绩评审的依据。不符合以上文件提交要求的作品将被评为零分或者被
酌情扣分。
1.4 请勿上传与作品工程文件无关的其它文件。

2、 竞赛板配置要求

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

3、 硬件框图

系统硬件框图

4、 功能描述

4.1基本功能

1) 测量竞赛板上电位器 RB2 输出的模拟电压信号和 NE555 模块输出的频率信
号,以数码管、LED 等外围设备进行数据呈现。
2) 频率测量功能需将竞赛板 J3-SIGNAL 引脚与 P34 引脚短接。(P34 与 SIGNAL
的短接可以使用竞赛板上超声/红外切换等与本试题功能要求无关的跳线
帽完成)。
3) 使用 PCF8591 测量电位器 RB2 的输出电压,并根据试题要求通过其 DAC 功
能输出该电压值。
4) 电压、频率数据刷新时间要求
电压数据刷新时间≤0.5 秒。
频率数据刷新时间≤1 秒。
5) 电压、频率数据测量范围要求
电压数据测量范围:电位器 RB2 输出的最小电压值到最大电压值。
频率数据测量范围:NE555 模块输出的最低频率到最高频率值。

4.2显示功能

和之前一样建好工程文件夹,里边包含User(放工程文件,mian.c)、Driver(存放底层文件如Led.c,Led.h等)
新建的工程先搭建框架,可以先书写底层函数(此次书写了五个函数并包含相应的头文件共十个底层文件)

4.3按键功能

1) 按键功能说明
S4:定义为“显示界面切换”按键,按下 S4 按键,切换选择频率显
示界面和电压显示界面,按键 S4 切换模式如下图所示:
S5:定义为 PCF8591 DAC“输出模式切换”按键,按下 S5,DAC 输出
电压跟随电位器 RB2 输出电压 V RB2 变化而变化,保持与 V RB2 电压值一致;
再次按下 S5,DAC 输出固定电压 2.0V,不再跟随电位器 RB2 输出电压
变化。按键 S5 工作模式如下图所示:
S6:定义为“LED 指示灯功能控制”按键,按下 S6 按键,关闭或打开
LED 指示灯指示功能。按键 S6 工作模式如下图所示:
备注:关闭 LED 指示灯功能状态下,所有 LED 指示灯熄灭。
S7:定义为“数码管显示功能控制”按键,按下 S7 按键,关闭或打
开数码管显示功能。按键 S7 工作模式如下图所示:
备注:关闭数码管状态下,所有数码管熄灭。

4.4LED 指示灯功能

1) 电压测量功能指示:L1 点亮,L2 熄灭
2) 频率测量功能指示:L1 熄灭,L2 点亮
3) 指示灯 L3 功能:
4) 指示灯 L4 功能:
5) 指示灯 L5 功能:DAC 输出固定电压(2.0V)时,L5 熄灭,DAC 输出电压跟
随 RB2 电位器输出电压变化时,L5 点亮。
6) 本试题未涉及的 LED 指示灯应处于熄灭状态。

4.5初始状态说明

1) 初始状态上电默认处于电压测量状态,数码管显示和 LED 指示功能启用。
2) 初始状态上电默认 PCF8591 DAC 芯片输出固定电压值 2.0V。

底层函数内容:

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)
{
    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;
    }
}

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


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


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

unsigned char Key_Read()
{
    unsigned char temp = 0;
    if(P33 == 0) temp = 4;
    if(P32 == 0) temp = 5;
    if(P31 == 0) temp = 6;
    if(P30 == 0) temp = 7;
    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};//数码管段码储存数组
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.数模转换底层驱动专用头文件

/*
  程序说明: 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;    
}

//函数名:ADC转换函数,这个要自己写
//入口参数:要进行转换的通道控制位
//返回值:ADC转换的数值
//函数功能:对指定的通道进行ADC转换,函数返回转换的数值

unsigned char Ad_Read(unsigned char addr)//AD读取,要有一个入口参数
{
    unsigned char temp;//接收返回值变量
    IIC_Start();//启动单总线
    IIC_SendByte(0x90);//发送一个0x90,告诉单片机要写数据了
    IIC_WaitAck();//等待应答
    IIC_SendByte(addr);//发送一个地址(获取的数据)
    IIC_WaitAck();//等待应答
    
    IIC_Start();//启动单总线
    IIC_SendByte(0x91);//写一个0x91
    IIC_WaitAck();//等待应答
    temp = IIC_RecByte();//读取数据
    IIC_SendAck(1);//发送一个非应答信号
    IIC_Stop();//停止
    return temp;
}

//函数名:DAC转换函数,这个要自己写
//入口参数:要进行转换的数值
//返回值:无
//函数功能:对入口参数要转换的DA数据进行转换

void Da_Write(unsigned char dat)
{
    IIC_Start();//启动单总线
    IIC_SendByte(0x90);//发送一个0x90,告诉单片机要写数据了
    IIC_WaitAck();//等待应答
    IIC_SendByte(0x41);//使能DAC转换
    IIC_WaitAck();//等待应答
    IIC_SendByte(dat);//发送一个地址(获取的数据)
    IIC_WaitAck();//等待应答
    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); 

unsigned char Ad_Read(unsigned char addr);
void Da_Write(unsigned char dat);
 

工程主函数内容:

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

#include <STC15F2K60S2.H>//单片机寄存器专用头文件
#include "Init.h"//初始化底层驱动专用头文件
#include "Led.h"//Led底层驱动专用头文件
#include "Key.h"//按键底层驱动专用头文件
#include "Seg.h"//数码管底层驱动专用头文件
#include "iic.h"//数模转换底层驱动专用头文件

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

unsigned char Key_Val,Key_Old,Key_Down,Key_Up;//按键专用变量
unsigned char Seg_Pos;//数码管扫描专用变量
unsigned char Key_Slow_Down;//按键减速专用变量
unsigned char Seg_Slow_Down;//数码管减速专用变量
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 int Timer_1000ms;//1000毫秒计时变量
unsigned int Freq;//实时频率值
bit Seg_Disp_Mode;//数码管显示模式变量 0-频率显示界面 1-电压显示界面
float Voltage;//实时电压值
bit Output_Mode;//DAC输出模式标志位 0-固定2V 1-随AD变化
float Vlotage_Output;//实时输出电压
bit Seg_Flag = 1;//数码管使能标志位 默认开启
bit Led_Flag = 1;//Led使能标志位 默认开启

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://显示界面切换
            Seg_Disp_Mode ^= 1;
        break;
        case 5://输出模式切换
            Output_Mode ^= 1;
        break;
        case 6://LED 指示灯功能控制
            Led_Flag ^= 1;
        break;
        case 7://数码管显示功能控制
            Seg_Flag ^= 1;
        break;
    }

}

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

void Seg_Proc()
{
    unsigned char i = 3;//高位熄灭专用变量
    if(Seg_Slow_Down)return;
    Seg_Slow_Down = 1;//数码管减速程序
    
    /*信息读取区*/
    Voltage = Ad_Read(0x43) / 51.0;//实时获取电压值
    
    if(Output_Mode == 0)//处于固定输出模式
        Vlotage_Output = 2;
    else//处于随AD输出模式
        Vlotage_Output = Voltage;
    
        /*数据显示区*/
    Seg_Point[5] = Seg_Disp_Mode;//小数点使能
    if(Seg_Disp_Mode == 0)//频率显示
    {
        
        Seg_Buf[0] = 11;//显示F
        Seg_Buf[3] = Freq / 10000 % 10;
        Seg_Buf[4] = Freq / 1000 % 10;
        Seg_Buf[5] = Freq / 100 % 10;
        Seg_Buf[6] = Freq / 10 % 10;
        Seg_Buf[7] = Freq % 10;
        while(Seg_Buf[i] == 0)//数码管高位熄灭
        {
            Seg_Buf[i] = 10;
            if(++i == 7)break;//保证最低位不熄灭 避免程序卡死
        }
    }
    else//处于电压显示界面
    {
        Seg_Buf[0] = 12;//显示U
        Seg_Buf[3] = 10;
        Seg_Buf[4] = 10;
        Seg_Buf[5] = (unsigned char)Voltage;
        Seg_Buf[6] = (unsigned int)(Voltage * 100) / 10 % 10;
        Seg_Buf[7] = (unsigned int)(Voltage * 100) % 10;
    }
}

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

void Led_Proc()
{
    unsigned char i;//For循环专用变量
    /* DAC相关 */
    Da_Write(Vlotage_Output * 51);//实时输出电压值
    /* Led相关 */
    for(i=0;i<2;i++) //互斥点亮
    ucLed[i] = (i == Seg_Disp_Mode);
    ucLed[2] = ((Voltage >= 1.5 && Voltage <= 2.5) || (Voltage >= 3.5));
    ucLed[3] = ((Freq >= 1000 && Freq < 5000) || (Freq >= 10000));
    ucLed[4] = Output_Mode;
}

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


(这个可以使用STC的定时器计算那里生成c代码,后面要自己添加ET0,EA打开中断)这里使用定时器0计数,定时器1计时

/* 定时器1中断初始化函数 */


void Timer1Init(void)        //1毫秒@12.000MHz
{
    AUXR &= 0xBF;        //定时器时钟12T模式
    TMOD &= 0x0F;        //设置定时器模式
    TL1 = 0x18;        //设置定时初值
    TH1 = 0xFC;        //设置定时初值
    TF1 = 0;        //清除TF1标志
    TR1 = 1;        //定时器1开始计时
    ET1 = 1;
    EA = 1;
}

//频率测量定时器配置/* 定时器0中断初始化函数 */

void Timer0Init(void)        //0毫秒@12.000MHz
{
    TMOD &= 0xF0;        //设置定时器模式
    TMOD |= 0x05;        //GATE = 0 计数模式 16位不自动重装//设置计数模式
    TL0 = 0x00;        //设置定时初值
    TH0 = 0x00;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
}

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


(为了定时执行特定的任务,如此处设置了定时的时间触发了数码管和LED产生特定反应)//中断在测试时可以先注释掉,但是这里按键状态有延时,测试按键时可以解除注释void Timer1server()interrupt 3
{
    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;//数码管显示专用
    if(Seg_Flag == 1)//数码管使能
    Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);
    else
        Seg_Disp(Seg_Pos,10,0);//熄灭所有数码管
    if(Led_Flag == 1)//Led使能
        Led_Disp(Seg_Pos,ucLed[Seg_Pos]);
    else
        Led_Disp(Seg_Pos,0);//熄灭所有Led
    if(++Timer_1000ms == 1000)//实时读取频率值
    {
        Timer_1000ms = 0;
        Freq = TH0 << 8 | TL0;
        TH0 = TL0 = 0;
        
    }
}

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

void main()
{
    Sys_Init();
    Timer0Init();
    Timer1Init();
    while(1)
    {

        Key_proc();
        Seg_Proc();
        Led_Proc();
    }
}

NE555相关资料:

通过Rb3调节,电压测量可以在这个图的19,20脚测量。

GATE = 0,定时器计数;C/T = 1,连接P34。

根据这两个信息可知,定时器0设置成0101的模式,使用计数器。

定时器1计时

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

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

相关文章

RocksDB是如何实现存算分离的

核心参考文献&#xff1a; Dong, S., P, S. S., Pan, S., Ananthabhotla, A., Ekambaram, D., Sharma, A., Dayal, S., Parikh, N. V., Jin, Y., Kim, A., Patil, S., Zhuang, J., Dunster, S., Mahajan, A., Chelluri, A., Datye, C., Santana, L. V., Garg, N., & Gawde,…

Flink CEP实现10秒内连续登录失败用户分析

1、什么是CEP&#xff1f; Flink CEP即 Flink Complex Event Processing&#xff0c;是基于DataStream流式数据提供的一套复杂事件处理编程模型。你可以把他理解为基于无界流的一套正则匹配模型&#xff0c;即对于无界流中的各种数据(称为事件)&#xff0c;提供一种组合匹配的…

Python完善APC netbotz 250报告功能实现主动式运维。

首先介绍一下APC netbotz 250, 这是施耐德推出的一款机架式监控主机&#xff0c;能够对所有IT环境进行经济有效而且灵活的监控&#xff0c;号称APC史上性价比最高的环境监测方案&#xff0c;这可不是我吹的&#xff0c;是APC官网的介绍&#xff0c;可参考下面的官网截图。 我们…

【原创】VMware创建子网,并使用软路由获得访问互联网的能力,并通过静态路由让上层网络访问位于虚拟机的子网

前言 一看标题就很离谱&#xff0c;确实内容也有点复杂&#xff0c;我的初衷是为后面搞软路由做准备&#xff0c;先通过VMware进行可行性验证&#xff0c;确定方案是否可行&#xff0c;再做下一步的计划。结论当然可以的&#xff0c;能通能访问&#xff0c;强的不行。 网络拓…

重大进展:国产200层存储芯片实现量产,超越国际领先企业

近日&#xff0c;中国芯片技术领域迎来了一项历史性突破&#xff1a;200层以上的存储芯片率先实现量产&#xff0c;这一成就不仅超越了国外存储芯片巨头&#xff0c;更预示着中国有望成为全球行业的领军者。 后起之秀&#xff0c;鱼跃龙门 在这场技术的赛跑中&#xff0c;中国…

“死“社群先不要扔,想办法激活一下,隔壁的运营都馋哭了

私域运营已成为当下很多企业寻求增长的标配。在这过程中&#xff0c;社群运营就是极为重要的一个环节。过去我们为了流量&#xff0c;疯狂建群拉人。但建社群容易活跃难&#xff0c;活跃一段时间后&#xff0c;社群会越来越安静。 不仅如此&#xff0c;群主和管理员也渐渐疏于…

行为型设计模式—迭代器模式

迭代器模式&#xff1a;也叫作游标模式&#xff0c;能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。在迭代器的帮助下&#xff0c; 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。 当集合背后为复杂的数据结构&#xff0c;且希望对客户端隐藏其复…

双非本科准备秋招(12.2)—— 力扣栈与队列

复习一下栈和队列的基础知识&#xff0c;刷几道题上上手。 1、102. 二叉树的层序遍历 广度优先遍历嘛&#xff0c;每次拓展一个新结点&#xff0c;就把新结点加入队列&#xff0c;这样遍历完队列中的元素&#xff0c;顺序就是层序遍历。 class Solution {public List<Lis…

分布式搜索引擎_学习笔记_3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合&#xff08;aggregations&#xff09;**可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售…

91 C++对象模型探索。RTTI运行时类型识别回顾 与 存储位置介绍

一&#xff0c;RTTI 运行时类型识别&#xff0c;简单回顾 C运行时类型识别RTTI&#xff0c;要求父类这种必须 至少有一个虚函数&#xff0c;如果父类中没有虚函数&#xff0c;那么得到的RTTI就不准确&#xff1b; RTTI就可以在执行期间查询一个多态指针&#xff0c;或者多态应…

C++:第十四讲动态规划初步

每日C知识 想要在做C小游戏里实现等待效果&#xff0c;可以用Sleep。 Sleep函数可以使计算机程序&#xff08;进程&#xff0c;任务或线程&#xff09;进入休眠&#xff0c;使其在一段时间内处于非活动状态。 一般需要头文件windows.h。 注意"Sleep"首字母要大写…

k8s Sidecar filebeat 收集容器中的trace日志和app日志

目录 一、背景 二、设计 三、具体实现 Filebeat配置 K8S SideCar yaml Logstash配置 一、背景 将容器中服务的trace日志和应用日志收集到KAFKA&#xff0c;需要注意的是 trace 日志和app 日志需要存放在同一个KAFKA两个不同的topic中。分别为APP_TOPIC和TRACE_TOPIC 二、…

LLM之Agent(十)| 本地安装Microsoft AutoGen Studio 2.0教程

2021年3月&#xff0c;微软发布了AutoGen[2]&#xff0c;这是一个使用多个代理开发LLM应用程序的框架&#xff0c;这些代理可以协作解决任务。 2024年1月&#xff0c;微软推出了一款新的应用程序&#xff0c;它名为AutoGen Studio[3]&#xff0c;可以简化AI Agent执行过程。 一…

JavaScript入门

第二个知识点&#xff1a;javascript的基本语法 定义变量 在JavaScript里面&#xff0c;没有int&#xff0c;string 之类的数据类型&#xff0c;只有 var var num 1; var string "天玄地号"; 在javascript中&#xff0c;写完一句语句之后可以不加分号&#xff…

MyBatis概述与MyBatis入门程序

MyBatis概述与MyBatis入门程序 一、MyBatis概述二、入门程序1.准备开发环境&#xff08;1&#xff09;准备数据库&#xff08;2&#xff09;创建一个maven项目 2.编写代码&#xff08;1&#xff09;打包方式和引入依赖&#xff08;2&#xff09;新建mybatis-config.xml配置⽂件…

直方图均衡化原理与代码实现

1. 简介 直方图均衡化是一种用于增强图像对比度的图像处理技术。通过调整图像的灰度级别分布&#xff0c;直方图均衡化能够使图像中的像素值更加均匀分布&#xff0c;从而增强图像的细节和对比度。 2. 原理 直方图均衡化的原理是通过调整图像的累积分布函数&#xff08;CDF&…

H2数据库学习总结

H2数据库-简介 H2 是开源的轻量级Java数据库。它可以嵌入Java应用程序中或以客户端-服务器模式运行。 H2 数据库主要可以配置为作为内存数据库运行&#xff0c;这意味着数据将不会持久存储在磁盘上。 由于具有嵌入式数据库&#xff0c;因此它不用于生产开发&#xff0c;而主要…

017 JavaDoc生成文档

什么是JavaDoc 示例 package se;/*** 用于学习Java* author Admin* version 1.0* since 1.8*/ public class Test20240119 {/*** 主方法* param args*/public static void main(String[] args) {// 你好&#xff0c;世界System.out.println("Hello world");} } 写一…

C语言实战项目<贪吃蛇>

我们这篇会使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇 实现基本的功能&#xff1a; 结果如下: 1.一些Win32 API知识 本次实现呢我们会用到一些Win32 API的知识(WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口): 1)控制窗口大小 我们可以使用…

43 漏洞发现-WEB应用之漏洞探针类型利用修复

目录 已知CMS开发框架末知CMS演示案例:开发框架类源码渗透测试报告-资讯-thinkphp开发框架类源码渗透测试-咨讯-spring已知CMS非框架类渗透测试报告-工具脚本-wordpress已知CMS非框架类渗透测试报告-代码审计-qqyewu_php未知CMS非框架类渗透测试报告-人工-你我都爱的wg哦~ 已知…