蓝桥杯嵌入式综合实验真题-联网电压测量系统设计与实现

news2025/4/17 3:00:39

目录

实验要求:

实验思路:

核心代码:

(1)变量声明

(2)函数声明

(3)main主函数

(4)按键(长按/短按)

(5)B4短按单独书写一函数

(6)B4长按操作:数据清零

(7)LCD显示函数

(8)串口通信

(9)LED相关

(10)输入捕获回调函数

(11)串口中断回调函数

实验结果:

思考或体会


实验要求:

1) 通过 STM32 微控制器 PA1 引脚测量脉冲信号频率,在 PA7 引脚上输出符合

试题要求的脉冲信号(PWM

2) 通过 STM32 微控制器 PA4 和 PA5 检测输入模拟电压

3) 通过 E2PROM 存储工作参数。

4) 依试题要求,实现串口通信(USART功能。

5) 依试题要求,通过按键,实现界面切换与控制功能。

6) 依试题要求,通过 LCD、LED 完成数据显示和指示功能。

实验思路:

1.涉及到串口中断、ADC、PWM的相关函数,在CubeMX中也需要相关配置:外部时钟、GPIO引脚、TIM2(通道2 PA1输入捕获)、TIM17(通道1 PA7输出PWM)、ADC2(初始化通道17进行通道13初始化)、UART、NVIC优先级配置

2.按键是为LED、LCD服务的,因此最后书写按键状态切换的逻辑。

3.LCD屏幕一共三个屏幕界面,通过按键切换界面属性。 

4.PWM输出需要设置时钟,以及降频分频。

5.通过微控制器 PA1 引脚连续测量输入到该引脚的脉冲信号频率,通过 PA7 引脚输出脉冲信号,输出信号频率按照频率参数和脉冲输出模式进行配置。

6. 通过微控制器 PA4 和 PA5 引脚测量电压数据,测量过程通过按键 B4 在数据界面启动。7.屏幕翻转显示要学会:

 

核心代码:

(1)变量声明

unsigned char lcd_flag;//显示界面  0为数据界面 1为参数界面 2为记录界面

unsigned char out_mode;//输出模式 0为倍频模式 1为分频模式

unsigned char disp_mode;//LCD显示模式  0为正向显示模式 1为翻转显示模式

unsigned char rec_chanel;//通道记录结果 0为PA4通道记录结果 1为PA5通道记录结果

unsigned char f=1;//频率参数

unsigned char v=1;//电压参数

unsigned int  PA1;//PUSL1测频变量

unsigned char uled;//LED显示参数

unsigned char tx[21],rx,rx_buf[21],dex;//串口相关变量

unsigned char e2prom[5];//EEPROM存储数组

typedef struct

{

    float value;//当前测量电压数据

    float memrory[100];//记录电压数据数组

    float all;//已测所有电压数据的总和

    float average;//当前所测电压数据的平均值

    unsigned int n;//电压数据记录次数

} AO;

AO PA4,PA5;

(2)函数声明

void Key_Proc();

void Lcd_Proc();

void Uart_Proc();

void Led_Proc();

(3)main主函数

int main(void)

{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */

  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_ADC2_Init();

  MX_TIM2_Init();

  MX_TIM17_Init();

  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */

  LCD_Init();

  LCD_Clear(Black);

  LCD_SetBackColor(Black);

  LCD_SetTextColor(White);

   

  I2CInit();

  IIC_Read(e2prom,0,5);

  if((e2prom[2]==0x77)&&(e2prom[3]==0x7A)&&(e2prom[4]==0x64))//不是第一次上电

  {

        v=e2prom[0];//将EEPROM中存储的电压参数赋值给变量

        f=e2prom[1];//将EEPROM中存储的频率参数赋值给变量

  }

  else//是第一次上电

  {

        e2prom[0]=v;//将初始电压参数存储在EEPROM中

        e2prom[1]=f;//将初始频率参数存储在EEPROM中

        e2prom[2]=0x77;e2prom[3]=0x7A;e2prom[4]=0x64;//写入表示已经完成第一次上电的标志

        IIC_Write(e2prom,0,5);

  }

   

  HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);

  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);

  HAL_UART_Receive_IT(&huart1,&rx,1);

  HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);

  /* USER CODE END 2 */

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

        Key_Proc();

        Lcd_Proc();

        Uart_Proc();

        Led_Proc();

  }

  /* USER CODE END 3 */

}

(4)按键(长按/短按)

void Key_Proc()

{

    static __IO uint32_t Key_Tick,DKey_Tick;

    static unsigned char key_old,key_flag;

    unsigned char key_value,key_down,key_up;

   

   

    if(uwTick-Key_Tick<50)

        return;

    Key_Tick=uwTick;

   

    key_value=Key_Scan();

    key_down=key_value&(key_value^key_old);

    key_up=~key_value&(key_value^key_old);

    key_old=key_value;

   

    if(key_down!=0)

        DKey_Tick=uwTick;

   

    if(uwTick-DKey_Tick>1000)

    {

        switch(key_up)

        {

            case 4:

                B4_Long_Proc();

            break;

        }

    }

    else

    {

        switch(key_up)

        {

            case 1:

                if(++jiemian>2)//按下B1按键可以往复切换数据、参数和记录三个界面

                    jiemian=0;

                rec_chanel=0;//每次从其它界面切换到记录界面,默认为PA4通道记录结果

                LCD_Clear(Black);

            break;

           

            case 2:

                if(jiemian==1)//参数界面

                {

                    if(++f>4)//调整频率参数(X)的值

                        f=1;

                    IIC_Write(&f,1,1);//写入E2PROM内部地址1

                }

            break;

           

            case 3:

                if(jiemian==1)//参数界面

                {

                    if(++v>4)//调整电压参数(Y)的值

                        v=1;

                    IIC_Write(&v,0,1);//写入E2PROM内部地址0

                }

            break;

           

            case 4:

                B4_Short_Proc();

            break;

        }

    }

}

(5)B4短按单独书写一函数

void B4_Short_Proc()

{

    unsigned char i,j;

    float temp;

   

    if(jiemian==0)//数据界面

    {

        PA4.value=Get_PA4()*3.3/4095;PA5.value=Get_PA5()*3.3/4095;//启动一次电压测量

       

        PA4.memrory[PA4.n]=PA4.value;PA5.memrory[PA5.n]=PA5.value;//将测得的电压数据存入数组中

       

        for(i=0;i<PA4.n;i++)//冒泡法排序

        {

            for(j=i+1;j<PA4.n+1;j++)

            {

                if(PA4.memrory[i]>PA4.memrory[j])

                {

                    temp=PA4.memrory[i];

                    PA4.memrory[i]=PA4.memrory[j];

                    PA4.memrory[j]=temp;

                }

            }

        }

        PA4.n++;//表示当前PA4的测量次数

       

        for(i=0;i<PA5.n;i++)//冒泡法排序

        {

            for(j=i+1;j<PA5.n+1;j++)

            {

                if(PA5.memrory[i]>PA5.memrory[j])

                {

                    temp=PA5.memrory[i];

                    PA5.memrory[i]=PA5.memrory[j];

                    PA5.memrory[j]=temp;

                }

            }

        }

        PA5.n++;//表示当前PA5的测量次数

       

        for(i=0;i<PA4.n;i++)//计算当前已测量PA4电压数据的总和

        {

            PA4.all+=PA4.memrory[i];

        }

        PA4.average=PA4.all/PA4.n;//当前所测PA4电压数据的平均值

        PA4.all=0;//当前已测量PA4电压数据的总和清零  以防止下次计算出错

       

        for(i=0;i<PA5.n;i++)//计算当前已测量PA5电压数据的总和

        {

            PA5.all+=PA5.memrory[i];

        }

        PA5.average=PA5.all/PA5.n;//当前所测PA5电压数据的平均值

        PA5.all=0;//当前已测量PA5电压数据的总和清零  以防止下次计算出错

    }

    else if(jiemian==1)//参数界面

        out_mode^=1;//PA7脉冲输出模式切换

    else//记录界面

        rec_chanel^=1;//不同测量通道的记录结果切换

}

(6)B4长按操作:数据清零

void B4_Long_Proc()

{

    unsigned char i,j;

   

    if(jiemian==2)//记录界面

    {

        if(rec_chanel==0)//当前为PA4测量通道的记录结果

        {

            for(i=0;i<PA4.n;i++)

            {

                PA4.memrory[i]=0;//将数组中测得的PA4电压数据清零

            }

            PA4.average=0;//当前所测PA4电压数据的平均值清零

            PA4.value=0;//当前测量PA4电压数据清零

            PA4.n=0;//当前测量PA4电压数据次数清零

        }

        else//当前为PA5测量通道的记录结果

        {

            for(i=0;i<PA5.n;i++)

            {

                PA5.memrory[i]=0;//将数组中测得的PA5电压数据清零

            }

            PA5.average=0;//当前所测PA5电压数据的平均值清零

            PA5.value=0;//当前测量PA5电压数据清零

            PA5.n=0;//当前测量PA5电压数据次数清零

        }

    }

}

(7)LCD显示函数

void Lcd_Proc()

{

    static __IO uint32_t Lcd_Tick;

    unsigned char lcd_string[21];

   

    if(uwTick-Lcd_Tick<100)//减速

        return;

    Lcd_Tick=uwTick;

       

    if(out_mode==0)//倍频模式

    {

        __HAL_TIM_SET_AUTORELOAD(&htim17,PA1/f-1);//设置频率

        __HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,0.5*PA1/f);//设置占空比

    }

    else//分频模式

    {

        __HAL_TIM_SET_AUTORELOAD(&htim17,PA1*f-1);//设置频率

        __HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,0.5*PA1*f);//设置占空比

    }

   

    if(jiemian==0)//数据界面

    {

        sprintf((char*)lcd_string,"        DATA");//显示界面名称DATA

        LCD_DisplayStringLine(Line1,lcd_string);

        sprintf((char*)lcd_string,"     PA4=%4.2f",PA4.value);//显示PA4电压数据

        LCD_DisplayStringLine(Line3,lcd_string);

        sprintf((char*)lcd_string,"     PA5=%4.2f",PA5.value);//显示PA5电压数据

        LCD_DisplayStringLine(Line4,lcd_string);

        sprintf((char*)lcd_string,"     PA1=%d    ",1000000/PA1);//显示PA1脉冲频率

        LCD_DisplayStringLine(Line5,lcd_string);

    }

    else if(jiemian==1)//参数界面

    {

        sprintf((char*)lcd_string,"        PARA");//显示界面名称PARA

        LCD_DisplayStringLine(Line1,lcd_string);

        sprintf((char*)lcd_string,"     X=%d",f);//显示频率参数(X)

        LCD_DisplayStringLine(Line3,lcd_string);

        sprintf((char*)lcd_string,"     Y=%d",v);//显示电压参数(Y)

        LCD_DisplayStringLine(Line4,lcd_string);

    }

    else//记录界面

    {

        if(rec_chanel==0)//当前为PA4测量通道的记录结果

        {

            sprintf((char*)lcd_string,"        REC-PA4");//显示界面名称REC-PA4

            LCD_DisplayStringLine(Line1,lcd_string);

            sprintf((char*)lcd_string,"     N=%d   ",PA4.n);//显示电压数据记录次数(N)

            LCD_DisplayStringLine(Line3,lcd_string);

            sprintf((char*)lcd_string,"     A=%4.2f",PA4.memrory[PA4.n-1]);//显示电压最大值(A)

            LCD_DisplayStringLine(Line4,lcd_string);

            sprintf((char*)lcd_string,"     T=%4.2f",PA4.memrory[0]);//显示电压最小值(T)

            LCD_DisplayStringLine(Line5,lcd_string);

            sprintf((char*)lcd_string,"     H=%4.2f",PA4.average);//显示平均值(H)

            LCD_DisplayStringLine(Line6,lcd_string);

        }

        else//当前为PA5测量通道的记录结果

        {

            sprintf((char*)lcd_string,"        REC-PA5");//显示界面名称REC-PA5

            LCD_DisplayStringLine(Line1,lcd_string);

            sprintf((char*)lcd_string,"     N=%d   ",PA5.n);//显示电压数据记录次数(N)

            LCD_DisplayStringLine(Line3,lcd_string);

            sprintf((char*)lcd_string,"     A=%4.2f",PA5.memrory[PA5.n-1]);//显示电压最大值(A)

            LCD_DisplayStringLine(Line4,lcd_string);

            sprintf((char*)lcd_string,"     T=%4.2f",PA5.memrory[0]);//显示电压最小值(T)

            LCD_DisplayStringLine(Line5,lcd_string);

            sprintf((char*)lcd_string,"     H=%4.2f",PA5.average);//显示平均值(H)

            LCD_DisplayStringLine(Line6,lcd_string);

        }

    }

}

(8)串口通信

void Uart_Proc()

{

    static __IO uint32_t Uart_Tick;

   

    if(uwTick-Uart_Tick<50)

        return;

    Uart_Tick=uwTick;

   

    if(isRxCplt()==1)//返回当前频率参数

    {

        sprintf((char*)tx,"X:%d\r\n",f);

        HAL_UART_Transmit(&huart1,tx,strlen(tx),50);

    }

    else if(isRxCplt()==2)//返回当前电压参数

    {

        sprintf((char*)tx,"Y:%d\r\n",v);

        HAL_UART_Transmit(&huart1,tx,strlen(tx),50);

    }

    else if(isRxCplt()==3)//返回PA1通道实时测量到的频率数据

    {

        sprintf((char*)tx,"PA1:%d\r\n",1000000/PA1);

        HAL_UART_Transmit(&huart1,tx,strlen(tx),50);

    }

    else if(isRxCplt()==4)//返回PA4通道当前测量到的电压数据

    {

        sprintf((char*)tx,"PA4:%4.2f\r\n",PA4.value);

        HAL_UART_Transmit(&huart1,tx,strlen(tx),50);

    }

    else if(isRxCplt()==5)//返回PA5通道当前测量到的电压数据

    {

        sprintf((char*)tx,"PA5:%4.2f\r\n",PA5.value);

        HAL_UART_Transmit(&huart1,tx,strlen(tx),50);

    }

    else if(isRxCplt()==6)//切换LCD屏幕显示模式

    {

        disp_mode^=1;

        if(disp_mode==0)//正向显示模式

        {

            LCD_WriteReg(R1  , 0x0000);

            LCD_WriteReg(R96 , 0x2700);

            LCD_Clear(Black);

        }

        else//翻转显示模式

        {

            LCD_WriteReg(R1  , 0x0100);

            LCD_WriteReg(R96 , 0xA700);

            LCD_Clear(Black);

        }

    }

    else if(isRxCplt()==7)//接收错误数据  返回ERROR

    {

        sprintf((char*)tx,"ERROR\r\n");

        HAL_UART_Transmit(&huart1,tx,strlen(tx),50);

    }

   

    dex=0;//串口缓冲数组索引清零

}

(9)LED相关

void Led_Proc()

{

    static __IO uint32_t Led_Tick;

   

    if(uwTick-Led_Tick<100)//以0.1秒为间隔扫描

        return;

    Led_Tick=uwTick;

   

    if(out_mode==0)//脉冲输出模式为倍频时点亮

        uled|=0x01;

    else//否则熄灭

        uled&=~0x01;

   

    if(out_mode==1)//脉冲输出模式为分频时点亮

        uled|=0x02;

    else//否则熄灭

        uled&=~0x02;

   

    if(PA4.value>PA5.value*v)//当VPA4>VPA5*电压参数时,指示灯LD3以0.1秒为间隔切换亮灭状态

        uled^=0x04;

    else//否则熄灭

        uled&=~0x04;

   

    if(disp_mode==0)//正向显示模式点亮

        uled|=0x08;

    else//翻转显示模式熄灭

        uled&=~0x08;

   

    Led_Disp(uled);//LED显示函数

}

(10)输入捕获回调函数

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

{

    if(htim->Instance==TIM2)//发生中断的定时器为定时器2

    {

        if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)//发生中断的通道为通道2

        {

            PA1=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2)+1;//读取当前定时器的数值

            if(1000000/PA1>10000)//频率<100时 钳制在100

                PA1=100;

            else if(1000000/PA1<100)//频率>10k时 钳制在10k

                PA1=10000;

        }

    }

}

(11)串口中断回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

    rx_buf[dex++]=rx;//一位一位存入缓存数组,索引+1

   

    HAL_UART_Receive_IT(&huart1,&rx,1);//重新开启接收中断

}

实验结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

思考或体会

1.实验内容涉及到了多个模块,题目量相当于省赛题目的两倍,因此在做题时更需要将模块化铭记于心,做完一个模块后备份一下,保证代码少出错,多模块顺利通过。

2.USART的使用和PWM的中断最大区别就是是否在while循环前预先Receive一次,这一点要注意。

3.一些基础的计算例如保存还有电压频率的采集是必须熟练掌握的。

4.题目本身不难,就是任务多,需要更加沉住气,经过这次练习后就知道想要拿到国奖需要达到什么的水平。

5.LCD屏幕的翻转,这是头一次见到,网上查阅相关资料得知本质是靠寄存器内数据的翻转,说明官方给的lcd.c需要更加深入学习,包括i2c以后或许也会有进阶要求。

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

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

相关文章

K8s——Service、代理模式演示(二)

Service 演示 SVC 创建svc-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: myapp-deploynamespace: default spec:replicas: 3selector:matchLabels:app: myapprelease: stabeltemplate:metadata:labels:app: myapprelease: stabelenv: testspec: c…

学习UI设计有哪些figma插件

自2016年推出以来&#xff0c;Figma已发展成为市场领先者UI设计工具之一。 因为它不仅简单易用&#xff0c;功能优秀&#xff0c;而且基于云服务&#xff0c;可以实时编辑&#xff0c;节省大量手动下载或复制文件的时间。不仅如此&#xff0c;Figma还提供合作功能&#xff0c;…

一文读懂PFMEA(过程失效模式及后果分析)

PFMEA是过程失效模式及后果分析(Process Failure Mode andEffects Analysis)的英文简称&#xff0c;是由负责制造/装配的工程师/小组主要采用的一种分析技术&#xff0c;用以最大限度地保证各种潜在的失效模式及其相关的起因/机理已得到充分的考虑和论述。 名词解释&#xff1a…

springboot介绍

笔记来源于 动力节点springboot Javaconfig xml方式 在创建模块时&#xff0c;idea2022新版选择internal即可&#xff1a; pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xs…

圆顶光源特点及应用——塑料包装袋、PCB板检测

照明系统是机器视觉系统较为关键的部分之一&#xff0c;机器视觉光源直接影响到图像的质量&#xff0c;进而影响到系统的性能。其重要性无论如何强调都是不过分的。好的打光设计能够使我们得到一幅好的图象&#xff0c;从而改善整个整个系统的分辨率&#xff0c;简化软件的运算…

Java JNA 调用DLL(动态连接库) 回调函数

首先准备好动态链接库dll 参考连接 visual studio 2017 创建dll文件并使用https://blog.csdn.net/miss_na/article/details/113524280 Visual Studio 2017 动态链接库(.dll)生成与使用的简明教程https://blog.csdn.net/Hide_on_Stream/article/details/109172054 jni之jni与…

【记录】U盘安装Ubuntu20.04系统

之前电脑安装的Centos7系统&#xff0c;但是在启动过程中遇到了文件异常&#xff0c;就开不了机了&#xff0c;另外貌似Centos7已经停止维护了&#xff0c;想了下&#xff0c;果断不要数据了&#xff0c;直接重装系统吧&#xff0c;这次选用的是Ubuntu 20.04【ps: 没有选择最新…

「含元量」激增,这届世界杯的看点不止足球

文|智能相对论 作者|青月 半决赛结束&#xff0c;卡塔尔世界杯已经正式进入倒计时阶段。 这届世界杯诞生了不少精彩瞬间&#xff0c;在小组赛中&#xff0c;日本、韩国、沙特接连打败西班牙、葡萄牙、阿根廷等传统强队&#xff0c;摩洛哥也代表非洲球队首次挺进四强&#xf…

v8垃圾回收

文章目录内存的生命周期v8垃圾回收算法新生代Scavenge图例老生代Mark-SweepMark-Compact图例v8垃圾回收的弊端v8垃圾回收优化内存的生命周期 内存的生命周期可以分为三个阶段&#xff1a; 内存分配&#xff1a;按需分配内存内存食用&#xff1a;读写已经分配的内存内存释放&a…

Linux 管理联网 配置网络的四种方法 配置临时连接( ip 命令)

配置网络 # 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口。这里,主要是 指计算机的网络接口即 网卡设备 # 网络接口 -- 网卡 的命名 &#xff1a; 从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名,该…

【Java笔记】 深入理解序列化和反序列化

深入理解序列化和反序列化 文章目录深入理解序列化和反序列化1.是什么2.为什么3.怎么做3.1 实现Serializable接口3.2 实现Externalizable接口3.3 注意知识点3.4 serialVersionUID的作用4 扩展1.是什么 序列化&#xff1a;就是讲对象转化成字节序列的过程。 反序列化&#xff…

C++开发,这些GUI库一定不要错过

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 如果问Python这类集成度非常高的编程语言GUI开发用什么库&#xff0c;可以列举出很多不错的第三方库。 但是&#xff0c;如果这个问题放在C这种基础的编程语言上&#xff0c;很多同学估计一时间都无从…

用Gurobi+python求解设施选址问题(facility location)

参考&#xff1a;Gurobi 官方资源 设施选址&#xff08;Facility Location&#xff09; 1.背景介绍 设施选址问题在许多工业领域如物流&#xff0c;通信等都有应用&#xff0c;在本案例中展示如何解决设施选址问题&#xff0c;决策出仓库的数量和地点&#xff0c;为一些超市…

Crash Consistency on File Systems: 文件系统一致性保证 (1) Journaling File System

文件系统是操作系统中管理用户数据的重要模块。其中一项重要的任务就是确保用户数据的在系统突然崩溃之后&#xff0c;系统能够恢复出完整、一致的用户数据。本文将会分析两种流行的文件系统&#xff0c;Journaling File System 和 Log-structured File System是如何确保数据的…

dataFactory连接mysql详细配置教程

场景&#xff1a;最近项目提出机构用户中其中一个部门下用户人数有20万&#xff0c;加载的时候十分缓慢&#xff0c;本地想重现的一下&#xff0c;这就需要在本地表中生成>20万的数据&#xff0c;搜索了网上的教程写的都是很粗略。 目录 dataFactory连接mysql配置 安装包下…

第二证券|“20cm”涨停!盘中暴涨110%,又有港股暴力拉升

A股商场今日上午窄幅动摇&#xff0c;电子等板块领涨。北向资金半响净买入额到达26.10亿元。 港股商场今日上午动摇也较为温和。不过&#xff0c;仍有个股剧烈动摇。比如浦江世界上午暴升&#xff0c;盘中涨幅一度超过110%。 A股窄幅动摇 电子板块领涨 今日上午A股商场全体体…

STL六大组件之算法

文章目录56、STL六大组件之遍历算法57、STL六大组件之查找算法158、STL六大组件之查找算法259、STL六大组件之统计算法60、STL六大组件之合并算法61、随机数&#xff08;rand&#xff09;和随机数种子&#xff08;srand&#xff09;的理解62、STL六大组件之随机算法(洗牌算法)6…

javaweb笔记

javaweb数据库jdbcmaven数据库 1.chart定长 2.分组查询:where>聚合函数>having 3.分页查询: select 字段列表 from limit 起始索引&#xff0c; 查询条目数 计算公式: 起始索引&#xff08;当前页码-1&#xff09;每页显示的条数 不同数据库分页查询不一样 4.like模糊查…

8种常见python运行错误,看看你中招了没?

人生苦短 我用python 对于刚入门Python的新手同学来说&#xff0c; 在运行代码时总免不了报错。 如何通过报错查找错误代码&#xff1f; 今天给大家总结了一些常见的报错类型&#xff0c; 每种报错都会有标有错误细节和错误行。 大家以后看到了&#xff0c;就更容易找出自…

使用navicat工具生成表的新增字段sql

1、在需要的表右键&#xff0c;设计表 2、点击【添加字段】 3、创建字段及注释&#xff0c;不要点【保存】和CtrlS 4、点击【SQL预览】 5、复制生成的sql语句