【蓝桥杯_练习】
蓝桥杯
- 1.创建工程
- 2.LED灯点亮
- led.c
- 3.LCD液晶屏显示
- lcd.c
- 4.定时器按键单机
- interrupt.h
- interrupt.c
- man.c
- 5.定时器(长按键)
- interrupt.h
- interrupt.c
- main.c
- 6.PWM
- main.c
- 7.定时器-输入捕获(频率,占空比测量)
- interrupt.c
- main.c
- 8.ADC模数转换
- myadc.h
- myadc.c
- main.c
- 9.IIC
- i2c - hal.c
- main.c
- 10.uart串口通信
- interrupter.c
- mian.c
1.创建工程









2.LED灯点亮



- 高电平为默认不点亮
- PD2电平为低不用设置








led.c
#include "main.h"
#include "gpio.h"
#include "led.h"void LED_Disp(uchar dsLED)
{HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
/*
* GPIO_PIN_RESET: 1有效置0 0无效保持原来状态
* GPIO_PIN_SET : 1有效置1 0无效保持原来状态
* GPIOC 1111 1111 1111 1111
*///LED的引脚GPIO的C组的前八位所以左移八位HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);
/*
* dsLED=0x00<<8 0000 0000 0000 0000 GPIOC 1111 1111 1111 1111
* dsLED=0xff<<8 1111 1111 0000 0000 GPIOC 0000 0000 0000 0000
*///打开锁存器HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}main()
{HAL_Init();SystemClock_Config();MX_GPIO_Init();LED_Disp(0x00);//全部熄灭while (1){LED_Disp(0x00);HAL_Delay(500);LED_Disp(0xff);//全点亮HAL_Delay(500);}
}
3.LCD液晶屏显示







lcd.c
int main(void)
{char text[30];uint i=5;HAL_Init();SystemClock_Config();MX_GPIO_Init();LCD_Init();//LCD屏初始化 LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);sprintf(text," SCH%d ",i);LCD_DisplayStringLine(Line4, (uint8_t *)text);while (1){HAL_Delay(500);}
}
4.定时器按键单机








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
};#endif
interrupt.c
#include "interrupt.h"
struct keys key[4]={0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM3){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;else key[i].judge_sta=0;}break;case 1:{if(key[i].key_sta==0){key[i].judge_sta=2;key[i].single_flag=1;} elsekey[i].judge_sta=0; }break;case 2:{if(key[i].key_sta==1){key[i].judge_sta=0;}}break;}} }
}
man.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"extern struct keys key[];int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim3);//定时器中断char text[30];while (1){if(key[0].single_flag==1){key[0].single_flag=0;sprintf(text," Key0 ");LCD_DisplayStringLine(Line8, (uint8_t *)text);}if(key[1].single_flag==1){key[1].single_flag=0;sprintf(text," Key1 ");LCD_DisplayStringLine(Line8, (uint8_t *)text);}}
}
5.定时器(长按键)
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; //当按键按下为1bool long_flag; //长按键uint key_time; //按下累计的时间
};#endif
interrupt.c
#include "interrupt.h"
struct keys key[4]={0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM3){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;}else key[i].judge_sta=0;}break;case 1:{if(key[i].key_sta==0){key[i].judge_sta=2;} elsekey[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;}}}
}
main.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
extern struct keys key[];
uchar view;void key_pro(void);
void disp_pro(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim3);while (1){ key_pro();disp_pro();}
}void key_pro(void)
{if(key[0].single_flag==1){view=!view;key[0].single_flag=0;}
}void disp_pro(void)
{if(view==0){char text[30];sprintf(text," Data ");LCD_DisplayStringLine(Line1, (uint8_t *)text);}else{char text[30];sprintf(text," Para ");LCD_DisplayStringLine(Line1, (uint8_t *)text);}
}
6.PWM










main.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"extern struct keys key[];
uchar view;uchar pa6_duty=10;
uchar pa7_duty=10;void key_pro(void);
void disp_pro(void);void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();MX_TIM16_Init();MX_TIM17_Init();LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim3);//开启定时器3的中断HAL_TIM_PWM_Start (&htim16, TIM_CHANNEL_1);//PWM开启HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);while (1){key_pro();disp_pro();}
}/* USER CODE BEGIN 4 */
void key_pro(void)
{if(key[0].single_flag==1){view=!view;LCD_Clear(Black);key[0].single_flag=0;}if(key[1].single_flag==1){pa6_duty=pa6_duty%90+10;__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1,pa6_duty);//控制占空比key[1].single_flag=0;}if(key[2].single_flag==1){pa7_duty=pa7_duty%90+10;__HAL_TIM_SetCompare(&htim17, TIM_CHANNEL_1,pa7_duty);//控制占空比key[2].single_flag=0;}
}void disp_pro(void)
{if(view==0){char text[30];sprintf(text," Data ");LCD_DisplayStringLine(Line1, (uint8_t *)text);}else{char text[30];sprintf(text," Para ");LCD_DisplayStringLine(Line1, (uint8_t *)text);sprintf(text," PA6:%d ",pa6_duty);LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text," PA7:%d ",pa7_duty);LCD_DisplayStringLine(Line3, (uint8_t *)text);}
}
7.定时器-输入捕获(频率,占空比测量)









interrupt.c
#include"interrupt.h"
/测量频率+占空比///
double ccr1_val1a=0,ccr1_val2a=0;
double 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)//中断消息来源 选择直接输入的通道{ccr1_val1a=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);//直接ccr1_val1b=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);//间接__HAL_TIM_SetCounter(htim,0);frq1=(80000000/80)/ccr1_val1a;duty1=(ccr1_val1b/ccr1_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)//中断消息来源 选择直接输入的通道{ccr1_val2a=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);ccr1_val2b=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);__HAL_TIM_SetCounter(htim,0);frq2=(80000000/80)/ccr1_val2a;duty2=(ccr1_val2b/ccr1_val2a)*100;HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);}}
}
main.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"extern struct keys key[];
extern uint frq1,frq2;
extern float duty1,duty2;uchar view;
uchar pa6_duty=10;
uchar pa7_duty=10;void key_pro(void);
void disp_pro(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();MX_TIM16_Init();MX_TIM17_Init();MX_TIM2_Init();MX_TIM4_Init();LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim4);//开启定时器4的中断HAL_TIM_PWM_Start (&htim16, TIM_CHANNEL_1);//PWM开启HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//频率测量捕获定时器开启HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);//频率测量捕获定时器开启 间接通道HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
// __HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);//设置初始pwm频率__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);while (1){key_pro();disp_pro();}
}void key_pro(void)
{if(key[0].single_flag==1){view=!view;LCD_Clear(Black);key[0].single_flag=0;}if(key[1].single_flag==1){pa6_duty=pa6_duty%90+10;__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1,pa6_duty);//控制占空比key[1].single_flag=0;}if(key[2].single_flag==1){pa7_duty=pa7_duty%90+10;__HAL_TIM_SetCompare(&htim17, TIM_CHANNEL_1,pa7_duty);//控制占空比key[2].single_flag=0;}
}void disp_pro(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);}else if(view==1){char text[30]; sprintf(text," Para ");LCD_DisplayStringLine(Line1, (uint8_t *)text);sprintf(text," PA6:%d ",pa6_duty);LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text," PA7:%d ",pa7_duty);LCD_DisplayStringLine(Line4, (uint8_t *)text);}
}
8.ADC模数转换





myadc.h
#ifndef _MYADC_H_
#define _MYADC_H_#include "main.h"
double getADC(ADC_HandleTypeDef *pin);#endif
myadc.c
#include "myadc.h"double getADC(ADC_HandleTypeDef *pin)
{uint adc; HAL_ADC_Start (pin); adc = HAL_ADC_GetValue (pin); return adc*3.3/4096;
}
main.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
#include "myadc.h"extern struct keys key[];
extern uint frq1,frq2;
extern float duty1,duty2;uchar view;uchar pa6_duty=10;
uchar pa7_duty=10;void key_pro(void);
void disp_pro(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();MX_TIM16_Init();MX_TIM17_Init();MX_TIM2_Init();MX_TIM4_Init();MX_ADC1_Init();MX_ADC2_Init();/* USER CODE BEGIN 2 */LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim4);//开启定时器4的中断HAL_TIM_PWM_Start (&htim16, TIM_CHANNEL_1);//PWM开启HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//频率测量捕获定时器开启HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);//频率测量捕获定时器开启 间接通道HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);//设置初始pwm频率__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);while (1){key_pro();disp_pro();}
}void disp_pro(void)
{if(view==0){char text[30];sprintf(text," ADC1=%.2f ",getADC(&hadc1));LCD_DisplayStringLine(Line6, (uint8_t *)text);sprintf(text," ADC2=%.2f ",getADC(&hadc2));LCD_DisplayStringLine(Line7, (uint8_t *)text);}else if(view==1){}
}
9.IIC




i2c - hal.c
#include "i2c - hal.h"
uchar eeprom_read(uchar addr)
{uchar dat;I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();//I2CStop();I2CStart();I2CSendByte(0xa1);I2CWaitAck();dat=I2CReceiveByte();//I2CWaitAck();I2CStop();return dat;
}void eeprom_write (uchar addr,uchar dat)
{I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CSendByte(dat);I2CWaitAck();I2CStop();
}
main.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
#include "myadc.h"
#include "i2c - hal.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern struct keys key[];
extern uint frq1,frq2;
extern float duty1,duty2;uchar view=0;uchar pa6_duty=10;
uchar pa7_duty=10;void key_pro(void);
void disp_pro(void);
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief The application entry point.* @retval int*/
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_TIM3_Init();MX_TIM16_Init();MX_TIM17_Init();MX_TIM2_Init();MX_TIM4_Init();MX_ADC1_Init();MX_ADC2_Init();/* USER CODE BEGIN 2 */LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim4);//开启定时器4的中断HAL_TIM_PWM_Start (&htim16, TIM_CHANNEL_1);//PWM开启HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//频率测量捕获定时器开启HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);//频率测量捕获定时器开启 间接通道HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);//设置初始pwm频率__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);while (1){if(key[3].single_flag==1){uchar frq_h=frq1>>8;uchar frq_l=frq1&0xff;eeprom_write(1,frq_h);HAL_Delay(10);eeprom_write(2,frq_l);key[3].single_flag=0;}uint eeprom_val=(eeprom_read(1)<<8)+eeprom_read(2);sprintf(text," FRQ_eep=%d ",eeprom_val);LCD_DisplayStringLine(Line8, (uint8_t *)text); }
}
10.uart串口通信



interrupter.c
char rxdata[30];
uint8_t rxdat;
uchar rx_pointer;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *hurat)
{rxdata[rx_pointer++]=rxdat;HAL_UART_Receive_IT(&huart1,&rxdat,1);
}
mian.c
#include "led.h"
#include "lcd.h"
#include "stdio.h"
#include "interrupt.h"
#include "myadc.h"
#include "i2c - hal.h"
#include "string.h"extern struct keys key[];
extern char rxdata[30];
extern uint8_t rxdat;
extern uchar rx_pointer;uchar view=0;char car_type[5];
char car_data[5];
char car_time[13];void key_pro(void);
void disp_pro(void);
void uart_rx_proc(void);
int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();MX_TIM16_Init();MX_TIM17_Init();MX_TIM2_Init();MX_TIM4_Init();MX_ADC1_Init();MX_ADC2_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */LED_Disp(0x00);//LCD初始化LCD_Init();//LCD屏初始化HAL_UART_Receive_IT(&huart1,&rxdat,1);//打开串口中断LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);while (1){key_pro();disp_pro();if(rx_pointer!=0){int temp=rx_pointer;HAL_Delay(1);if (temp==rx_pointer)uart_rx_proc();//完成接收}}
}void key_pro(void)
{if(key[0].single_flag==1){view=0;LCD_Clear(Black);key[0].single_flag=0;}
}void disp_pro(void)
{if(view==0){char text[30]; sprintf(text," Car_msg ");LCD_DisplayStringLine(Line1, (uint8_t *)text);sprintf(text,"car_type=%s ",car_type);LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text,"car_data=%s ",car_data);LCD_DisplayStringLine(Line3, (uint8_t *)text);sprintf(text,"cat_time=%s ",car_time);LCD_DisplayStringLine(Line4, (uint8_t *)text); }
}void uart_rx_proc()
{if(rx_pointer>0){if(rx_pointer==22){sscanf(rxdata,"%4s:%4s:%12s",car_type,car_data,car_time);}else {char temp[20];sprintf(temp,"Error");HAL_UART_Transmit(&huart1,(uint8_t *)temp,strlen(temp),50);}rx_pointer=0;memset(rxdata,0,30);}
}
相关文章:
【蓝桥杯_练习】
蓝桥杯1.创建工程2.LED灯点亮led.c3.LCD液晶屏显示lcd.c4.定时器按键单机interrupt.hinterrupt.cman.c5.定时器(长按键)interrupt.hinterrupt.cmain.c6.PWMmain.c7.定时器-输入捕获(频率,占空比测量)interrupt.cmain.c…...
【C语言蓝桥杯每日一题】——跑步锻炼
【C语言蓝桥杯每日一题】—— 跑步锻炼😎前言🙌排序🙌总结撒花💞😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介…...
Qt之实现类似软件安装时的新功能介绍界面
一.效果 在软件安装时,一般会轮播软件的新功能,安装后,如果还想查看这些新功能该怎么办呢,我们可以把这个介绍新新功能的小应用集成到软件的“帮助”菜单中,比起纯黑文字的无趣介绍,图文方式的呈现会生动得多。 最近在看《赘婿》,借几张图过来用用。 二.原理 1.分层结…...
echarts地图不同地区设置不同的颜色
var myChart ec.init(document.getElementById(main));let option {tooltip: {trigger: item,},dataRange: {//左下角的颜色块。start:值域开始值;end:值域结束值;label:图例名称;color:自定义…...
网易云音乐API部署Vercel获取接口过程
前提:部署自己的网易云接口主要用途在于在完成前端的仿网易云播放器的时候,根据自己部署的接口可以用于获取数据。大体流程是通过在github上fork别人的API接口项目,然后在Vercel部署即可获得自己的网易云后端数据接口了,不过根据我…...
Java基础:字符串(String)及常用操作
目录 字符串的声明及创建 字符串的操作 连接字符串(或concat) 获取字符串的长度 length 查找字符串 indexOf 获取字符串某个位置的字符 charAt 查询某个字符串是否存在 contains 截取字符串 substring(一) 截取字符串 su…...
FL Studio 21中文版支持主题随心换,FL Studio 21Mac版新增对苹果M2/1家族芯片原生支持。
FL Studio 21.0.0 官方中文版重磅发布 纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换! Mac版新增对苹果M2/1家族芯片原生支持。 更新版本:21.0.0支持语言:简体中文/英语更新时间:2022.12…...
【蓝桥杯集训·周赛】AcWing 第96场周赛
文章目录第一题 AcWing 4876. 完美数一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4877. 最大价值一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4878. 维护数组一、题目1、原…...
【数据结构】顺序表的深度刨剖析
前言:在上一篇文章中,我们已经对数据结构有了一定了解,我们可以通过优化空间复杂度或者时间复杂度从而提高我们程序运行或存储速率。至此我们就知道了数据结构的重要性,所以今天我们将要了解和学习一种实用的数据结构——线性表。…...
Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例
Unity 之 使用原生UGUI实现随手移动摇杆功能实现效果一,实现思路1.1 原理解析1.2 思路概述二,实现代码2.1 随手落下2.2 摇杆转动三,源码分享3.1 场景搭建3.2 完整代码3.3 实现效果实现效果 本文最终实现效果: 一,实现…...
Linux内核源代码概述
Linux内核源代码非常庞大,截止到2015年据统计代码总量就已经超过1500万行(LOC,Line of Code),看代码总量非常吓人,具体看这1500万行代码的大致分布情况如下图。 显然占比最大的drivers和arch目录下的代码合…...
Nginx 教程-动静分离
一、Nginx 动静分离理论1、概念今天学习和梳理Nginx动静分离,动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,之所以要进行动静分离,其一为了提高前端…...
自己设计的网站,如何实现分页功能?(详细代码+注释)
目录 前言 实现分页功能 需求分析 客户端开发 服务器开发 前后端交互——两种前端得到 文章总页数 的方法,那种更合适? 前言 你在设计网站的时候是否有过这样的烦恼:“我设计的网站怎么就是从上到下一条线内容全部展开,一点都…...
STM32F407控制微型推拉式电磁铁(通过继电器)
1、继电器 继电器相当于开关,单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压(如32单片机控制220V的电压)外,还可以防止电流反冲,弄烧单片机。 本文采用3.3v的电磁铁&am…...
VS Code工作区用法
背景VS Code可以通过"文件/打开文件夹"来打开本地项目,但是想要打开多个项目便需要来回切换,比较费劲。此时就可以使用工作区功能,将不同的项目放置到同一个工作区中,这样切换项目的时候就会非常方便。操作方法打开其中…...
Mybatis-Plus SQLFeatureNotSupportedException: getObject with type问题解决
问题描述: Error attempting to get column modify_time from result set. Cause: java.sql.SQLFeatureNotSupportedException: getObject with type ; getObject with type; nested exception is java.sql.SQLFeatureNotSupportedException: getObject with type…...
Unity | 发布Android的那些事儿
1.使用UnityWebRequest获取StreamingAssets中的json文件(1)直接根据不同平台指定url路径IEnumerator AITalPredZhanHui(){string url;string fileName "girl.json"; #if UNITY_EDITOR || UNITY_STANDALONEurl "file://" Applicat…...
git为什么要先commit,然后pull,最后再push?而不是commit完直接push?
情况是这样的,现在远程有一个仓库,分支就一个,是master。然后我本地的仓库是从远程的master上clone下来的。大家都是clone下来,再在自己本地改好,再commit然后pull然后push,大家都是这么做的。那么现在问题…...
若依框架----源码分析(@RateLimiter)
若依作为最近非常火的脚手架,分析它的源码,不仅可以更好的使用它,在出错时及时定位,也可以在需要个性化功能时轻车熟路的修改它以满足我们自己的需求,同时也可以学习人家解决问题的思路,提升自己的技术水平…...
页面的重排和重绘?
思路: 网页渲染HTML文件到浏览器的过程->定义->如何优化网页渲染HTML文件到浏览器的过程HTML 文件通过HTML解析器解析生成DOM树;CSS文件通过CSS解析器生成CSSOM树;DOM树和CSSOM树生成渲染树(render tree)&#x…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
