蓝桥杯速成教程{三}(adc,i2c,uart)

news2025/1/1 11:16:48

目录

一、adc

原理图​编辑引脚配置

Adc通道使能配置 

实例测试

​编辑效果显示

案例程序

 badc

按键相关函数

测量频率+占空比

main

按键的过程

显示界面的过程 

二、IIC通信-eeprom

原理图AT24C02

引脚配置

不可用状态,用的软件IIC 

官方库移植

At24c02手册 

​编辑真题案例

​编辑实验现象

案例程序

 i2c.c

读的函数

 写的函数

 main

 主函数

 按键的过程、参数显示界面

案例显现展示

三、uart

原理图

官方给的代码的测试现象

 cube配置

参数设置

波特率设置

​编辑中断使能

 案例代码呈现

main

主函数

按键设置及界面显示 

 现象效果展示


一、adc

原理图引脚配置

Adc通道使能配置 

Adc是将一个模拟的值Adc通道使能配置

转化为一个电压的值

ADC2通道使能及模式设置

之后点击生成即可 

实例测试

效果显示

显示在第三行

案例程序

 


 badc

/----------------------------badc.h---------------------------------------------/

#ifndef __BADC_H__
#define __BADC_H__

#include "main.h"
double getADC(ADC_HandleTypeDef *pin);

#endif

/-----------------------------badc.c---------------------------------------------/

#include "badc.h"



//读取adc值的函数

double getADC(ADC_HandleTypeDef *pin)
{
	uint adc;//读出的原始值
	HAL_ADC_Start(pin);//开启adc
	adc = HAL_ADC_GetValue(pin);
	return adc*3.3/4096;// 读取到的电压值,均分一个等分看在3.3所占的比例
}	

/---------------------------------interrupt.h----------------------------------/

#ifndef __INTERRUPT_H__
#define __INTERRUPT_H__

#include "main.h"
#include "stdbool.h"
struct keys
{
	uchar judge_sta;
	bool key_sta;
	bool single_flag;//确认被按下他为1
	uint key_time;  //判断按下的时间,时间比较长
	uchar long_flag;
};

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);


#endif

/---------------------------------interrupt.c----------------------------------/

按键相关函数

struct keys key[4] = {0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM4)
	{
		key[0].key_sta  = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
		key[1].key_sta  = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
		key[2].key_sta  = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
		key[3].key_sta  = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
		
		for(int i = 0;i<4;i++)
		{
			switch (key[i].judge_sta)
			{
			
				case 0:
				{
				if(key[i].key_sta == 0) //发现按键被按下
				{		
				key[i].judge_sta=1;
				key[i].key_time=0;//将时间清零
					
				}
				}
				break;
				case 1:
				{
					if(key[i].key_sta ==0)//消抖的过程里面就不能确定他短按键会与长按键冲突
				{
						 key[i].judge_sta=2;
				}
				else key[i].judge_sta=0;
				}
				break;
				case 2:
				{
				if(key[i].key_sta==1)//长按
				{
					key[i].judge_sta=0;				

					if(key[i].key_time<70)
					{
						key[i].single_flag = 1;
					}
				}
				else
				{
					key[i].key_time++;//在他没有松开的打断时间内
					if(key[i].key_time>70) 	key[i].long_flag=1;
				}
				
				}
				break;
				case 3:
				{
				
				}
				break;
			}
		}
	}
}

测量频率+占空比

double  ccrl_val1a  = 0,ccrl_val2a  = 0;
uint ccr1_val1b=0,ccr1_val2b=0;
uint frq1=0,frq2=0;  //频率
float duty1=0,duty2=0;//占空比


void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{
		if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)//中段消息来源 选择直接输入的通道
		{
		ccrl_val1a= HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1); //计时值hal库的计时函数  直接
		ccr1_val1b= HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2); //计时值hal库的计时函数  间接
		__HAL_TIM_SetCounter(htim,0);//计时值清零
		frq1=(80000000/80)/ccrl_val1a;//计算频率
		duty1=(ccr1_val1b/ccrl_val1a)*100;
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);//从小打开定时器
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);//从小打开定时器
		}
	}
	
	
	if(htim->Instance==TIM3)
	{
		if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)//中段消息来源 选择直接输入的通道
		{
		ccrl_val2a= HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1); //计时值hal库的计时函数  直接
		ccr1_val2b= HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2); //计时值hal库的计时函数  间接
		__HAL_TIM_SetCounter(htim,0);//计时值清零
		frq2=(80000000/80)/ccrl_val2a;//计算频率
		duty2=(ccr1_val2b/ccrl_val2a)*100;
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);//从小打开定时器
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);//从小打开定时器
		}
	}
}

main.h

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "tim.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
#include "badc.h"
/* USER CODE END Includes */

/* USER CODE BEGIN PTD */
void key_proc(void);//按键的过程
void disp_proc(void);//显示界面的过程

extern struct keys key[];
extern uint frq1,frq2;//计算的到的回调值
extern float duty1,duty2;
uchar view=0;

uchar pa6_duty = 10;
uchar pa7_duty = 10;



/* USER CODE END PTD */

main

int main(void)
{

/* USER CODE BEGIN 2 */
	LED_Disp(0x00);//LED初始化
	LCD_Init();//LCD初始化
	
		LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
	
	HAL_TIM_Base_Start_IT(&htim4);  //定时器中断
	
	HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);//打开pwm的输出通道
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);//打开pwm的输通道
																					 //打开定时器
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);  //定时器中断   频率测量捕获定时器开启
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);  //定时器中断



  /* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
	
  while (1)
  {
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
			key_proc();
			disp_proc();
//		LED_Disp(0x02);
//		HAL_Delay(500);
//		LED_Disp(0x00);
//		HAL_Delay(1000);

  }
  /* USER CODE END 3 */
}

按键的过程

/* USER CODE BEGIN 4 */

void key_proc(void)//按键的过程
{
	if(key[0].single_flag ==1)
	{
		view=!view;
		key[0].single_flag=0;
	}
	
	if(key[1].single_flag ==1)//按键2按下一次加10%
	{
		pa6_duty+=10;
		if(pa6_duty>=100) pa6_duty=10;
		__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);//设置比较
		key[1].single_flag=0;
		
	}
	if(key[2].single_flag ==1)//按键3 按下一次加10%
	{
		pa7_duty+=10;
		if(pa7_duty>=100) pa7_duty=10;
		__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);//设置比较
		key[2].single_flag=0;
		
	}
}

显示界面的过程 

void disp_proc(void)//显示界面的过程
{
	if(view==0)
	{
		char text[30];
		sprintf(text,"       Data     ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"     FRQ1=%d     ",frq1);
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"     duty1=%.3f  ",duty1);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"     FRQ2=%d     ",frq2);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
		sprintf(text,"     duty2=%.3f   ",duty2);
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		
		//ADC显示  1  测量的是靠左的电位器
		sprintf(text,"     V:=%.2f   ",getADC(&hadc1));//在mx中配置了
		LCD_DisplayStringLine(Line6, (uint8_t *)text);
		
		//2
		sprintf(text,"     V:=%.2f   ",getADC(&hadc2));//在mx中配置了
		LCD_DisplayStringLine(Line7, (uint8_t *)text);
	}
	
	if(view==1)//参数显示界面
	{
		char text[30];
		sprintf(text,"       Para     ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"     PA6:%d      ",pa6_duty);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"     PA7:%d      ",pa7_duty);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
	
//界面清理		
		sprintf(text,"                  ");
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"                  ");
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		
	}
}

/* USER CODE END 4 */

二、IIC通信-eeprom

原理图AT24C02

引脚配置

为什么要配置成output模式因为官方会提供一个i2c的库,可以直接用用的是软件IIC

不可用状态,用的软件IIC 

之后直接生成就可 

官方库移植

将这两个文件复制到bsp文件下面

At24c02手册 

1k,2k是容量

一个总线上可以挂很多很多芯片

真题案例

实验现象

问题   ---按键没有用只显示1038

案例程序

#include "i2c - hal.h"官方给的参考程序的头文件有问题所以要改成这样

 I2c.h

#ifndef __I2C_H
#define __I2C_H

#include "main.h"

void I2CStart(void);
void I2CStop(void);
unsigned char I2CWaitAck(void);
void I2CSendAck(void);
void I2CSendNotAck(void);
void I2CSendByte(unsigned char cSendByte);
unsigned char I2CReceiveByte(void);
void I2CInit(void);
void eeprom_write(uchar addr,uchar dat);
uchar eeprom_read(uchar addr);


#endif

 i2c.c

读的函数

//读的函数

uchar eeprom_read(uchar addr)
{
	//正常代码
//	uchar dat;
//	I2CStart();//i2c开启
//	I2CSendByte(0xa0);//联系芯片   
//	I2CWaitAck();
//	I2CSendByte(addr);//传递的参数
//	I2CWaitAck();
//	
//	//将真实的数据读回
//	I2CStart();
//	I2CSendByte(0xa1);
//	I2CWaitAck();//发送完等待
//	dat=I2CReceiveByte();
//	I2CSendNotAck();
//	I2CStop();
//	return dat;//返回结果
	
		uchar dat;
	I2CStart();//i2c开启
	I2CSendByte(0xa0);//联系芯片   
	I2CWaitAck();
	I2CSendByte(addr);//传递的参数
	I2CWaitAck();
	I2CStop();
	
	I2CStart();//i2c开启
	I2CSendByte(0xa1);//联系芯片   
	I2CWaitAck();
	dat=I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();
	return dat;//返回结果

	
}

 写的函数

void eeprom_write(uchar addr,uchar dat)
{

	
	
	I2CStart();//i2c开启
	I2CSendByte(0xa0);//联系芯片   
	I2CWaitAck();//等待应答
	I2CSendByte(addr);//传递的参数
	I2CWaitAck();
	I2CSendByte(dat);//数据发送给芯片
	I2CWaitAck();
	I2CStop();
}

 main

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
#include "badc.h"
#include "i2c - hal.h"


/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
void key_proc(void);//按键的过程
void disp_proc(void);//显示界面的过程

extern struct keys key[];
extern uint frq1,frq2;//计算的到的回调值
extern float duty1,duty2;
uchar view=0;

uchar pa6_duty = 10;
uchar pa7_duty = 10;



/* USER CODE END PTD */

 主函数

int main(void)
{
/* USER CODE BEGIN 2 */
	LED_Disp(0x00);//LED初始化
	LCD_Init();//LCD初始化
	
		LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
	
	HAL_TIM_Base_Start_IT(&htim4);  //定时器中断
	
	HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);//打开pwm的输出通道
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);//打开pwm的输通道
																					 //打开定时器
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);  //定时器中断   频率测量捕获定时器开启
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);  //定时器中断



  /* USER CODE END 2 */

 /* USER CODE BEGIN WHILE */
	
  while (1)
  {

 /* USER CODE BEGIN 3 */
			key_proc();
			disp_proc();
//		LED_Disp(0x02);
//		HAL_Delay(500);
//		LED_Disp(0x00);
//		HAL_Delay(1000);

  }
  /* USER CODE END 3 */
}

 按键的过程、参数显示界面

/* USER CODE BEGIN 4 */

void key_proc(void)//按键的过程
{
	if(key[0].single_flag ==1)
	{
		view=!view;
		key[0].single_flag=0;
	}
	
	if(key[1].single_flag ==1)//按键2按下一次加10%
	{
		pa6_duty+=10;
		if(pa6_duty>=100) pa6_duty=10;
		__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);//设置比较
		key[1].single_flag=0;
		
	}
	if(key[2].single_flag ==1)//按键3 按下一次加10%
	{
		pa7_duty+=10;
		if(pa7_duty>=100) pa7_duty=10;
		__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);//设置比较
		key[2].single_flag=0;
		
	}
	
	//显示按键频率  eeprom只能存一个8位,所以要将他拆成高八位和低八位
	if(key[3].single_flag ==1)//按键3
	{
		uchar frq_h = frq1 >> 8;
		uchar frq_l = frq1 & 0xff;
		eeprom_write(1,frq_h);//写入高位
		HAL_Delay(10);//太快会发不出去
		eeprom_write(2,frq_l);//写入低8位
		
		key[3].single_flag = 0;
			
	}
}

void disp_proc(void)//显示界面的过程
{
	if(view==0)
	{
		char text[30];
		sprintf(text,"       Data     ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"     FRQ1=%d     ",frq1);
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"     duty1=%.3f  ",duty1);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"     FRQ2=%d     ",frq2);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
		sprintf(text,"     duty2=%.3f   ",duty2);
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		
		//ADC显示  1  测量的是靠左的电位器
		sprintf(text,"     V:=%.2f   ",getADC(&hadc1));//在mx中配置了
		LCD_DisplayStringLine(Line6, (uint8_t *)text);
		
		//2
		sprintf(text,"     V:=%.2f   ",getADC(&hadc2));//在mx中配置了
		LCD_DisplayStringLine(Line7, (uint8_t *)text);
		
		uint eep_temp=(eeprom_read(1)<<8)+eeprom_read(2);//读取数据,高8位放第1位,低8位放2为
		
		sprintf(text,"     FRQ_eep=%d   ",eep_temp);//将存入的数据显示出来
		LCD_DisplayStringLine(Line8, (uint8_t *)text);
	}
	
	if(view==1)//参数显示界面
	{
		char text[30];
		sprintf(text,"       Para     ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"     PA6:%d      ",pa6_duty);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"     PA7:%d      ",pa7_duty);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
	
//界面清理		
		sprintf(text,"                  ");
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"                  ");
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		
	}
}

/* USER CODE END 4 */

案例显现展示

三、uart

原理图

 

2022年1月~2月购买的可能会有硬件故障 --

官方给的代码的测试现象

 cube配置

改为异步模式,同步模式其他端口被占用,串口参数设置,如果没有设置lcd的话他会默认PC4和PC5,所以需要手动更改

参数设置

波特率设置

根据题目要求设置

中断使能

之后生成代码即可 

 案例代码呈现

interrupt同上

main

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
#include "badc.h"
#include "i2c - hal.h"
#include "string.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
void key_proc(void);//按键的过程
void disp_proc(void);//显示界面的过程

extern struct keys key[];
extern uint frq1,frq2;//计算的到的回调值
extern float duty1,duty2;
uchar view=0;

uchar pa6_duty = 10;
uchar pa7_duty = 10;



/* USER CODE END PTD */
主函数
int main(void)
{

/* USER CODE BEGIN 2 */
    LED_Disp(0x00);//LED初始化
    LCD_Init();//LCD初始化
    
        LCD_Clear(Black);
    LCD_SetBackColor(Black);
    LCD_SetTextColor(White);
    
    HAL_TIM_Base_Start_IT(&htim4);  //定时器中断
    
    HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);//打开pwm的输出通道
    HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);//打开pwm的输通道
                                                                                     //打开定时器
    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);  //定时器中断   频率测量捕获定时器开启
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);  //定时器中断

  /* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
	
  while (1)
  {
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
			key_proc();
			disp_proc();
		
		//简单的发送
			char temp[20];
			sprintf(temp,"frq=%d\r\n",frq1);    //打印频率再电脑
			HAL_UART_Transmit(&huart1,(uint8_t *)temp,strlen(temp),50);
			HAL_Delay(500);
  }
  /* USER CODE END 3 */
}
按键设置及界面显示 
/* USER CODE BEGIN 4 */

void key_proc(void)//按键的过程
{
	if(key[0].single_flag ==1)
	{
		view=!view;
		key[0].single_flag=0;
	}
	
	if(key[1].single_flag ==1)//按键2按下一次加10%
	{
		pa6_duty+=10;
		if(pa6_duty>=100) pa6_duty=10;
		__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);//设置比较
		key[1].single_flag=0;
		
	}
	if(key[2].single_flag ==1)//按键3 按下一次加10%
	{
		pa7_duty+=10;
		if(pa7_duty>=100) pa7_duty=10;
		__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);//设置比较
		key[2].single_flag=0;
		
	}
	
	//显示按键频率  eeprom只能存一个8位,所以要将他拆成高八位和低八位
	if(key[3].single_flag ==1)//按键3
	{
		uchar frq_h = frq1 >> 8;
		uchar frq_l = frq1 & 0xff;
		eeprom_write(1,frq_h);//写入高位
		HAL_Delay(10);//太快会发不出去
		eeprom_write(2,frq_l);//写入低8位
		
		key[3].single_flag = 0;
			
	}
}

void disp_proc(void)//显示界面的过程
{
	if(view==0)
	{
		char text[30];
		sprintf(text,"       Data     ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"     FRQ1=%d     ",frq1);
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"     duty1=%.3f  ",duty1);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"     FRQ2=%d     ",frq2);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
		sprintf(text,"     duty2=%.3f   ",duty2);
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		
		//ADC显示  1  测量的是靠左的电位器
		sprintf(text,"     V:=%.2f   ",getADC(&hadc1));//在mx中配置了
		LCD_DisplayStringLine(Line6, (uint8_t *)text);
		
		//2
		sprintf(text,"     V:=%.2f   ",getADC(&hadc2));//在mx中配置了
		LCD_DisplayStringLine(Line7, (uint8_t *)text);
		
        串口相关代码//
		/
        uint eep_temp=(eeprom_read(1)<<8)+eeprom_read(2);//读取数据,高8位放第1位,低8位放2为
		
		sprintf(text,"     FRQ_eep=%d   ",eep_temp);//将存入的数据显示出来
		LCD_DisplayStringLine(Line8, (uint8_t *)text);
	}
	
	if(view==1)//参数显示界面
	{
		char text[30];
		sprintf(text,"       Para     ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"     PA6:%d      ",pa6_duty);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"     PA7:%d      ",pa7_duty);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
	
//界面清理		
		sprintf(text,"                  ");
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"                  ");
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		
	}
}

/* USER CODE END 4 */

 现象效果展示

串口数据

lcd显示


 

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

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

相关文章

第6章 图论

2024年12月25日一稿 &#x1f430;6.1 图的基本概念 6.1.1 图的定义和表示 6.1.2 图的同构 6.1.3 完全图与正则图 6.1.4 子图与补图 6.1.5 通路与回路 6.2 图的连通性 6.2.1 无向图的连通性 6.2.2 有向图的连通性 6.3 图的矩阵表示 6.3.1 关联矩阵 6.3.2 有向图的邻接矩阵…

数据库原理及应用(MySQL版-李月军)-习题参考答案

数据库原理及应用&#xff08;MySQL版&#xff09;-微课视频版 习题参考答案 习 题一 一&#xff0e;选择题 1、D 2、C 3、C 4、B 5、D 6、B 7、A 8、B 9、C 10、A 11、B 12、C 13、①A②B③C 14、①E②B 15、①B②C③B 16、B 17、A 18、D 二&#xff0e;填空题 1、文件…

从家谱的层级结构 - 组合模式(Composite Pattern)

组合模式&#xff08;Composite Pattern&#xff09; 组合模式&#xff08;Composite Pattern&#xff09;组合模式概述组合模式涉及的角色talk is cheap&#xff0c; show you my code总结 组合模式&#xff08;Composite Pattern&#xff09; 组合模式&#xff08;Composite…

路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度

何在路由器上设置代理服务器&#xff1f; 如何在路由器上设置代理服务器&#xff1f; 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择&#xff0c;特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤&#xff0c;使用路由器…

免费干净!付费软件的平替款!

今天给大家介绍一个非常好用的电脑录屏软件&#xff0c;完全没有广告界面&#xff0c;非常的干净简洁。 电脑录屏 无广告的录屏软件 这个软件不需要安装&#xff0c;打开就能看到界面直接使用了。 软件可以全屏录制&#xff0c;也可以自定义尺寸进行录制。 录制的声音选择也非…

Pandas03

Pandas01 Pandas02 文章目录 内容回顾1 排序和统计函数2 缺失值处理2.1 认识缺失值2.2 缺失值处理- 删除2.3 缺失值处理- 填充非时序数据时序数据 3 Pandas数据类型3.1 数值类型和字符串类型之间的转换3.2 日期时间类型3.3 日期时间索引 4 分组聚合4.1 分组聚合的API使用4.2 分…

vue3使用element-plus,解决 el-table 多选框,选中后翻页再回来选中失效问题

问题&#xff1a;勾选的数据分页再回来回消失 1.在el-table中加 :row-key"getRowKey" const getRowKey (row) > { return row.id; // id必须是唯一的 }; 2.给type为selection的el-table-column添加上reserve-selection属性 <el-tableref"multipleTab…

BUU BRUTE 1

BUU BRUTE 1 启动靶机 让我们输入账户和密码&#xff0c;这里我们什么也不知道就随便输入一个试试 账户adimin密码1234 告诉我们密码错误&#xff0c;为四位数字&#xff0c;在这里没有说账号错误&#xff0c;说明账号就是admin 密码的话爆破一下从0000到9999 这里选择默认的…

Maple软件的安装和使用

文章目录 1.前言说明2.我为什么要学习Maple3.软件的安装4.如何使用4.1基本的赋值语句4.2函数的定义4.3三个类型的书写介质 5.指数运算5.1使用面板5.2自己输入 6.对数的使用 1.前言说明 众所周知&#xff0c;我虽然是一名这个计算机专业的学生&#xff0c;但是我对于数学&#…

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…

javaEE-多线程案例-单例模式

目录 啥是设计模式? 一.饿汉式 实现步骤&#xff1a; 二.懒汉式 实现步骤: 三、懒汉式优化1 四.懒汉式优化2 五.懒汉式优化3 总代码: 单例模式是一种设计模式。 啥是设计模式? 设计模式好⽐象棋中的"棋谱".红⽅当头炮,⿊⽅⻢来跳.针对红⽅的⼀些⾛法,⿊…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

鸿蒙开发实战之“使用HiLog和HiSysEvent进行日志与系统事件管理”

HiLog和HiSysEvent作为鸿蒙&#xff08;HarmonyOS&#xff09;系统中进行日志记录和系统事件管理的关键组件&#xff0c;为开发者提供了强大的工具来追踪系统行为、调试应用以及监控设备状态。它们不仅简化了日志管理和事件追踪的流程&#xff0c;还提高了开发效率和系统可维护…

机器学习之PCA降维

主成分分析&#xff08;PCA&#xff0c;Principal Component Analysis&#xff09; 主成分分析&#xff08;PCA&#xff09;是一种常见的无监督学习技术&#xff0c;广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间…

【CSS in Depth 2 精译_098】17.3:CSS 动画延迟技术与填充模式设置 + 17.4:通过 CSS 动画传递意图的秘诀

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 17 章 动画】 ✔️ 17.1 关键帧17.2 3D 变换下的动画设置 17.2.1 添加动画前页面布局的构建17.2.2 为布局添加动画 17.3 动画延迟与填充模式 ✔️17.4 通过动画传递意图…

python+PyMuPDF库:(一)创建pdf文件及内容读取和写入

目录 文档操作 打开文档 获取文档信息 删除页 复制页 移动页 选择重构合并 保存关闭 页对象操作 内容读取 获取页对象的字体样式 插入文本标签 插入文本内容 字体设置 insert_text添加文本 insert_textbox添加文本 插入图片 获取页面注释、链接、表单字段 …

Datawhale AI冬令营 动手学AI Agent

背景——什么是Agent 在人工智能领域&#xff0c;agent可以指一个能够感知环境并作出决策以实现特定目标的系统。比如&#xff0c;一个聊天机器人&#xff08;chatbot&#xff09;就是一个agent&#xff0c;它能够理解用户的输入并给出相应的回复。 学习目标 学会使用百宝箱…

高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用

面向信号处理的特征保持平滑技术 在数据分析领域&#xff0c;信号处理中的噪声问题始终是一个重要议题。无论是实验数据、金融时间序列还是其他形式的信号处理&#xff0c;噪声都会干扰目标模式和趋势的识别。尽管存在多种降噪方法&#xff0c;但在处理短时信号时&#xff0c;…

九点标定+旋转标定

眼在手外方式 1.夹取make点位置要求 机械手夹具夹持一个款标定板或者物料露出make点让视觉定位抓取 高度&#xff1a;与产品识别高度一致 左右位置&#xff1a;在相机视野内可以拍到make点 2.机械手走9个点移动位置要求&#xff08;九点标定&#xff09; 保证make在视野内…

RealityCapture导入视频序列失败

问题原因&#xff1a;如果导入的视频文件存在多余的元数据&#xff0c;那么在这里会发生导入失败。 以本人华为手机拍摄的一段.mp4视频为例&#xff1a; 利用ffmpeg在窗口命令行中检查你的视频—— ffmpeg -i your_video_name.mp4your_video_name是你的视频文件名 如下图所示&…