当前位置: 首页 > news >正文

【蓝桥杯_练习】

蓝桥杯

  • 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.定时器&#xff08;长按键&#xff09;interrupt.hinterrupt.cmain.c6.PWMmain.c7.定时器-输入捕获&#xff08;频率&#xff0c;占空比测量&#xff09;interrupt.cmain.c…...

【C语言蓝桥杯每日一题】——跑步锻炼

【C语言蓝桥杯每日一题】—— 跑步锻炼&#x1f60e;前言&#x1f64c;排序&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#xff01; &#x1f60a;作者简介…...

Qt之实现类似软件安装时的新功能介绍界面

一.效果 在软件安装时,一般会轮播软件的新功能,安装后,如果还想查看这些新功能该怎么办呢,我们可以把这个介绍新新功能的小应用集成到软件的“帮助”菜单中,比起纯黑文字的无趣介绍,图文方式的呈现会生动得多。 最近在看《赘婿》,借几张图过来用用。 二.原理 1.分层结…...

echarts地图不同地区设置不同的颜色

var myChart ec.init(document.getElementById(main));let option {tooltip: {trigger: item,},dataRange: {//左下角的颜色块。start&#xff1a;值域开始值&#xff1b;end&#xff1a;值域结束值&#xff1b;label&#xff1a;图例名称&#xff1b;color&#xff1a;自定义…...

网易云音乐API部署Vercel获取接口过程

前提&#xff1a;部署自己的网易云接口主要用途在于在完成前端的仿网易云播放器的时候&#xff0c;根据自己部署的接口可以用于获取数据。大体流程是通过在github上fork别人的API接口项目&#xff0c;然后在Vercel部署即可获得自己的网易云后端数据接口了&#xff0c;不过根据我…...

Java基础:字符串(String)及常用操作

目录 字符串的声明及创建 字符串的操作 连接字符串&#xff08;或concat&#xff09; 获取字符串的长度 length 查找字符串 indexOf 获取字符串某个位置的字符 charAt 查询某个字符串是否存在 contains 截取字符串 substring&#xff08;一&#xff09; 截取字符串 su…...

FL Studio 21中文版支持主题随心换,FL Studio 21Mac版新增对苹果M2/1家族芯片原生支持。

FL Studio 21.0.0 官方中文版重磅发布 纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01; Mac版新增对苹果M2/1家族芯片原生支持。 更新版本&#xff1a;21.0.0支持语言&#xff1a;简体中文/英语更新时间&#xff1a;2022.12…...

【蓝桥杯集训·周赛】AcWing 第96场周赛

文章目录第一题 AcWing 4876. 完美数一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4877. 最大价值一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4878. 维护数组一、题目1、原…...

【数据结构】顺序表的深度刨剖析

前言&#xff1a;在上一篇文章中&#xff0c;我们已经对数据结构有了一定了解&#xff0c;我们可以通过优化空间复杂度或者时间复杂度从而提高我们程序运行或存储速率。至此我们就知道了数据结构的重要性&#xff0c;所以今天我们将要了解和学习一种实用的数据结构——线性表。…...

Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例

Unity 之 使用原生UGUI实现随手移动摇杆功能实现效果一&#xff0c;实现思路1.1 原理解析1.2 思路概述二&#xff0c;实现代码2.1 随手落下2.2 摇杆转动三&#xff0c;源码分享3.1 场景搭建3.2 完整代码3.3 实现效果实现效果 本文最终实现效果&#xff1a; 一&#xff0c;实现…...

Linux内核源代码概述

Linux内核源代码非常庞大&#xff0c;截止到2015年据统计代码总量就已经超过1500万行&#xff08;LOC&#xff0c;Line of Code&#xff09;&#xff0c;看代码总量非常吓人&#xff0c;具体看这1500万行代码的大致分布情况如下图。 显然占比最大的drivers和arch目录下的代码合…...

Nginx 教程-动静分离

一、Nginx 动静分离理论1、概念今天学习和梳理Nginx动静分离&#xff0c;动静分离是将网站静态资源&#xff08;HTML&#xff0c;JavaScript&#xff0c;CSS&#xff0c;img等文件&#xff09;与后台应用分开部署&#xff0c;之所以要进行动静分离&#xff0c;其一为了提高前端…...

自己设计的网站,如何实现分页功能?(详细代码+注释)

目录 前言 实现分页功能 需求分析 客户端开发 服务器开发 前后端交互——两种前端得到 文章总页数 的方法&#xff0c;那种更合适&#xff1f; 前言 你在设计网站的时候是否有过这样的烦恼&#xff1a;“我设计的网站怎么就是从上到下一条线内容全部展开&#xff0c;一点都…...

STM32F407控制微型推拉式电磁铁(通过继电器)

1、继电器 继电器相当于开关&#xff0c;单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压&#xff08;如32单片机控制220V的电压&#xff09;外&#xff0c;还可以防止电流反冲&#xff0c;弄烧单片机。 本文采用3.3v的电磁铁&am…...

VS Code工作区用法

背景VS Code可以通过"文件/打开文件夹"来打开本地项目&#xff0c;但是想要打开多个项目便需要来回切换&#xff0c;比较费劲。此时就可以使用工作区功能&#xff0c;将不同的项目放置到同一个工作区中&#xff0c;这样切换项目的时候就会非常方便。操作方法打开其中…...

Mybatis-Plus SQLFeatureNotSupportedException: getObject with type问题解决

问题描述&#xff1a; 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文件&#xff08;1&#xff09;直接根据不同平台指定url路径IEnumerator AITalPredZhanHui(){string url;string fileName "girl.json"; #if UNITY_EDITOR || UNITY_STANDALONEurl "file://" Applicat…...

git为什么要先commit,然后pull,最后再push?而不是commit完直接push?

情况是这样的&#xff0c;现在远程有一个仓库&#xff0c;分支就一个&#xff0c;是master。然后我本地的仓库是从远程的master上clone下来的。大家都是clone下来&#xff0c;再在自己本地改好&#xff0c;再commit然后pull然后push&#xff0c;大家都是这么做的。那么现在问题…...

若依框架----源码分析(@RateLimiter)

若依作为最近非常火的脚手架&#xff0c;分析它的源码&#xff0c;不仅可以更好的使用它&#xff0c;在出错时及时定位&#xff0c;也可以在需要个性化功能时轻车熟路的修改它以满足我们自己的需求&#xff0c;同时也可以学习人家解决问题的思路&#xff0c;提升自己的技术水平…...

页面的重排和重绘?

思路&#xff1a; 网页渲染HTML文件到浏览器的过程->定义->如何优化网页渲染HTML文件到浏览器的过程HTML 文件通过HTML解析器解析生成DOM树&#xff1b;CSS文件通过CSS解析器生成CSSOM树&#xff1b;DOM树和CSSOM树生成渲染树&#xff08;render tree&#xff09;&#x…...

人脸检测-python和c++实现

人脸检测是计算机视觉领域中的一个重要应用,其目的是从图像或视频中自动检测出其中的人脸,并对其进行识别、跟踪等操作。人脸检测技术已经广泛应用于安防、人机交互、娱乐等领域,具有广泛的应用前景。 人脸检测的基本思路可以分为以下几个步骤: 图像预处理:首先需要对输入…...

PowerJob源码环境搭建

一、IEDA导入PowerJob源码 gitgithub.com:PowerJob/PowerJob.gitPowerJob 由调度服务器&#xff08;powerjob-server&#xff09;和执行器&#xff08;powerjob-worker&#xff09;两部分组成 powerjob-server 负责提供 Web 服务和完成任务的调度powerjob-worker 则负责执行用…...

天梯赛刷题小记 —— L2

最近在重刷 天梯赛&#xff0c;浅浅记录一下&#xff0c;进入L2阶段了 L2-001 紧急救援 解题思路&#xff1a;典型的dijkstra模板题&#xff0c;带路径记录与权重&#xff0c;方案数记录&#xff0c;解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…...

Prometheus监控实战系列十九:监控Kubernetes集群(上)

Kuberentes是一款开源的容器编排产品&#xff0c;由Google开发后发布到社区&#xff0c;并在2015年将该项目捐献给了云原生基金会&#xff08;Cloud Native Computing Foundation&#xff09;。从2014年第一个版本发布以来&#xff0c;Kubernetes便迅速获得开源社区的追捧&…...

番茄学习法——亲测超级好用

今天给大家分享下我最近使用的学习方法&#xff0c;真的非常好用&#xff01;大家用起来&#xff01; 在日常的学习和工作中&#xff0c;我们经常会遇到一些难以克服的问题&#xff1a;分心、效率低下、焦虑等。为了帮助人们更好地学习和工作&#xff0c;一些学习方法和工具应运…...

vue 项目中使用高德地图

一、账号准备 首先&#xff0c;需要注册并登录高德地图开放平台&#xff0c;申请密钥。操作指引&#xff1a;高德地图开放平台 二、安装高德地图加载器 npm 安装&#xff1a; npm i amap/amap-jsapi-loader --save或者 yarn 安装&#xff1a; yarn add amap/amap-jsapi-loa…...

【每日一题】病人排队

题目描述小理是个热爱生活的孩子。病人登记看病&#xff0c;小理想编写一个程序&#xff0c;将登记的病人按照以下原则排出看病的先后顺序&#xff1a;1. 老年人&#xff08;年龄 ≥≥ 60岁&#xff09;比非老年人优先看病。2. 老年人按年龄从大到小的顺序看病&#xff0c;年龄…...

【数据结构】链表OJ题

目录面试题 02.04 分割链表剑指 Offer II 027 回文链表160 相交链表141 环形链表142 环形链表 II138 复制带随机指针的链表面试题 02.04 分割链表 定义lesshead和greaterhead链接小于和大于等于k的值分别设置哨兵位和尾节点指针最后将两表去除哨兵位再链接 struct ListNode* p…...

冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)

文章目录什么样的“排序算法”更加优质&#xff1f;排序算法的执行效率排序算法的内存消耗排序算法的稳定性冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;最终的胜利者&#x1f…...

[python tools] 今天看到另一个配置工具 YACS,所以做下笔记

YACS 实际上就只是把别人的readme翻译了一下 github: https://github.com/rbgirshick/yacs 样例代码: https://github.com/Wuziyi616/multi_part_assembly/blob/master/docs/config.md 一、使用方法 1. 首先搞一个config的python文件&#xff0c;用来存一下基本的配置信息 比…...

局域网搭建wordpress慢/百度基木鱼建站

文章目录前言本次测试注解介绍注解使用SecuredPreAuthorizePostAuthorizePostFilterPreFilter代码下载前言 之前security中&#xff0c;针对配置项进行了相关的配置和测试。 但是这些都是基于在security.config.MyConfig#configure(org.springframework.security.config.annot…...

建设厅官方网站新资质标准/百度网络推广怎么收费

关键词&#xff1a; Visio Studio2010 WinForm Sqlserver2008 ReportingService 报表身份验证问题分析&#xff1a;Sqlserver2008自带的Reporting Service报表提供了功能强大&#xff0c;多种样式可供选择的报表服务&#xff1b;利用它自己的Reporting站点&#xff0c;我们可以…...

做博彩网站要找谁/成都高端品牌网站建设

文章目录一、chiner介绍二、值得关注的功能点2.1. 兼容各种格式的数据建模文件2.2. 支持多数据库、代码生成2.3. 支持逻辑视图与物理视图设计2.4. 自动生成数据库文档三、总结一、chiner介绍 在chiner出现之前进行数据库建模设计的时候&#xff0c;大部分时间使用的是PowerDes…...

苏州seo网站诊断/b站推广平台

PWC6038&#xff1a;"${empty data.code?001:fn:substring(data.code,0,8)}" contains invalid expression(s):javax.el.ELException:Error Parsing:${empty data.code?001:fn:substring(data.code,0,8)} 上面红色内容部分是错的&#xff0c;在问号?和冒号:两边添…...

做网站是用什么语言的/免费十八种禁用网站

所谓帧定格 Frame Hold&#xff0c;就是获取视频中的某一静帧画面&#xff0c;这一静帧既可以作为素材文件添加到项目面板以备后用&#xff0c;也可直接附加在剪辑上构成定格效果。导出帧在节目面板或源面板的下方都有一个相机图标&#xff0c;用于“导出帧” Export Frame&…...

wordpress 主题结构/seo优化网络

package mainimport "fmt"/** 切片的操作*/ func main() {func4() }/** 数组切片可以基于一个已存在的数组创建&#xff0c;数组切片可以值使用数组的一部分元素或者整个数组来创建&#xff0c;甚至可以创建一个比所基于的数组还要打的数组切片*/ func func1() {arra…...