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

第十五届蓝桥杯单片机省赛程序设计试题

同时也是积分赛——测量NE555输出脉冲频率

第十五届 蓝桥杯 单片机设计与开发项目 省赛1

第二部分 程序设计试题(85 分)

(大学组)

 基本要求


1、使用大赛组委会统一提供的四梯单片机竞赛实训平台,完成本试题程序设计与调试。

2、参考资料:选手在程序设计与调试过程中,可参考组委会提供的“资源数据包”。

3、提交要求:程序编写、调试完成后,选手应通过考试系统提交完整、可编译的 Keil工程压缩包,压缩包以准考证号命名。选手提交的工程应是最终版本,工程文件夹内应包含以准考证号命名的 hex 文件,该 hex 文件是成绩评审的依据。请勿上传与作品工程文件无关的其他文件,不符合文件提交和命名要求的作品将被评为零分,最终上传的压缩文件大小控制在 30MB 以内。

4、硬件配置

① 将 IAP15F2K61S2 单片机内部振荡器频率设定为 12MHz。

② 键盘工作模式跳线 J5 配置为矩阵键盘(KBD)模式。

③ 扩展方式跳线 J13 配置为 IO 模式。

选手需严格按照以上要求配置竞赛板,编写和调试程序不符合以上配置要求的作品将被评为零分。

注意:以上提交要求为第十五届蓝桥杯正式比赛提交要求。

本次评审提交要求:程序编写、调试完成后,选手需通过考试系统提交以准考证号命名的hex文件。

 硬件框图


图 1 系统硬件框图

 功能描述


3.1 功能概述

1、通过单片机 P34 引脚测量 NE555 输出的脉冲信号频率。

2、支持频率数据校准功能。

3、支持频率超限报警功能。

4、通过读取 DS1302 RTC 芯片,获取时间数据。

5、通过数码管完成题目要求的数据显示功能。

6、通过键盘实现界面切换、参数设定等功能。

7、通过 PCF8591 实现 DAC 输出功能。

8、通过 LED 指示灯完成题目要求的输出指示和状态反馈功能。

3.2 性能要求

1、频率测量精度:±8%。

2、按键动作响应时间:≤0.1 秒。

3、指示灯动作响应时间:≤0.1 秒。

4、数码管动态扫描周期、位选通间隔均匀,显示效果清晰、稳定,无闪烁、过暗、亮度不均等明显缺陷。

3.3 显示功能

1、频率界面

频率界面如图 2 所示,显示内容包括界面编号(F)和频率数据,频率数据单位为 Hz,整数。

图 2 频率界面

通过 5 位数码管显示频率数据,当数据长度不足 5 位时高位(左侧)熄灭。

2、参数界面

超限参数界面如图 3 所示,显示内容包括界面编号(P1)和超限参数 PF,单位为 Hz,整数。

图 3 超限参数界面

校准值参数界面如图 4-1/3 所示,显示内容包括界面编号(P2)和校准值参数,单位为 Hz,整数。

图 4-1 校准值参数界面(正数)

图 4-2 校准值参数界面(负数)

图 4-3 校准值参数界面(0)

通过 4 位数码管显示校准值参数,负数显示符号。

3、时间界面

时间界面如图 5 所示,显示内容包括时、分、秒数据和间隔符“-”,时、分、秒数据固定使用 2 位数码管显示,不足 2 位补 0。

图 5 时间界面

4、回显界面

频率回显界面如图 6-1 所示,由界面编号(hF)和最大频率值组成。

图 6-1 回显界面(频率)

通过 5 位数码管显示最大频率数据,当数据长度不足 5 位时高位(左侧)熄灭。

时间回显界面如图 6-2 所示,由界面编号(hA)和最大频率发生的时间组成。

图 6-2 回显界面(时间)

5、显示功能设计要求

① 按照题目要求的界面格式和切换方式进行设计。

② 数码管显示稳定、清晰,无重影、闪烁、过暗、亮度不均匀等严重影响显示效果的设计缺陷。

③ 数码管显示内容刷新率≤0.1 秒。

④ 切换不同的数码管显示界面,不影响频率采集和 DAC 输出功能。

3.4 频率测量功能

1、频率测量:测量 NE555 输出信号的频率。

2、频率校准:系统内置频率校准值参数,取值范围-900 到 900Hz ,直接测量到的频率数据加校准值参数,作为频率数据的最终结果。若校准后频率为负数,频率界面数码管显示 LL,表示此状态错误。

3、频率最大值统计:统计最大频率值和发生时间,并可以在回显界面显示。

3.5 DAC 输出功能

通过 PCF8591 实现 DAC 输出功能,DAC 输出与测量频率关系如图 7 所示。

图 7 DAC 输出与频率数据的对应关系

PF代指超限参数,单位为 Hz。

** 若频率状态错误(校准后为负),DAC 固定输出 0V。

3.6 按键功能

1、功能说明

使用 S4、S5、S8、S9 完成界面切换与设置功能。

S4:定义为“界面”按键,按下 S4 按键,切换频率、参数、时间和回显四个界面,切换模式如图 8 所示。

图 8 界面切换模式

S4:按键在任意界面下有效。

S5:定义为“选择”按键,在参数和回显界面下有效。

① 参数界面下,按下 S5 按键,切换超限参数(图 3)和校准值参数(图 4-1/3)两个子界面,切换模式如图 9 所示。

图 9 参数子界面切换模式

要求:每次从频率界面切换到参数界面时,处于超限参数子界面。

② 回显界面下,按下 S5 按键,切换频率回显(图 6-1)和时间回显(图 6-2)两个子界面,切换模式如图 10 所示。

图 10 回显子界面切换模式

要求:每次从时间界面切换到回显界面时,处于频率回显子界面。

S8、S9 分别定义为 “加”和“减”按键,在参数界面的两个子界面下有效。

① 超限参数界面下,按下 S8 按键,超限参数增加 1000Hz,按下 S9 按键,超限参数减小 1000Hz。

② 校准值参数界面下,按下 S8 按键,校准值参数增加 100Hz, 按下S9 按键,校准值参数减小 100Hz。

2、按键功能设计要求

① 按键应做好消抖处理,避免出现一次按键动作导致功能多次触发。

② 按键动作不影响数据采集和数码管显示等其他功能。

③ 参数调整时,考虑边界值范围,不出现无效参数。

④ S5超限参数可调整范围:1000Hz ~ 9000Hz

⑤ 校准值参数可调整范围:-900Hz ~ 900Hz

3.7 LED 指示灯功能

1、界面指示灯

频率界面下指示灯 L1 以 0.2 秒为间隔切换亮、灭状态,其它界面下熄灭。

2、报警指示灯

当前频率数据大于超限参数时,指示灯 L2 以 0.2 秒为间隔切换亮、灭状态,否则熄灭。

** 若频率状态错误(校准后为负),L2 指示灯点亮。

3、其余试题未涉及的指示灯均处于熄灭状态。

 初始状态


请严格按照以下要求设计作品的上电初始状态。

1) 处于频率界面。

2) 频率超限参数:2000Hz。

3) 频率校准值参数:0。

代码实现

sys.h

#ifndef __SYS_H__
#define __SYS_H__

#include <STC15F2K60S2.H>

//ds1302.c
extern unsigned char time[3];
void w_ds1302();
void r_ds1302();

//iic.c
void dac(unsigned char date);

//sys.c
extern bit ui1_choose;
extern bit ui3_choose;
extern bit flag_error;
extern int st_ne555;
extern unsigned char UI;
extern unsigned int ne555;
extern unsigned int max_ne555;
extern unsigned int line_ne555;
extern unsigned int time_max[3];
void init74hc138(unsigned char n);
void led(unsigned char n);
void ne555_dac();
void no_led();
void init();

//seg_key.c
extern unsigned char Seg_Buff[8];
void Seg_Loop();
void Key_Loop();
void seg_ui();

#endif

main.c

#include "sys.h"	
bit flag_seg=0;
bit flag_key=0;
bit flag_time=0;
bit flag_ne555=0;
bit flag_more=0;
void Timer0_Init(void)		//用作计数器
{
	TMOD &= 0xF0;			//设置定时器模式
	TMOD |= 0x05;			//设置为计数器模式
	TL0 = 0x00;				//设置定时初始值
	TH0 = 0x00;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0 = 0;//关中断
}
void Timer1_Init(void)		//100微秒@12.000MHz
{
	AUXR |= 0x40;			//定时器时钟1T模式
	TMOD &= 0x0F;			//设置定时器模式
	TL1 = 0x50;				//设置定时初始值
	TH1 = 0xFB;				//设置定时初始值
	TF1 = 0;				//清除TF1标志
	TR1 = 1;				//定时器1开始计时
	ET1 = 1;				//使能定时器1中断
	EA = 1;
}
unsigned int get_ne555(){
	unsigned int temp;
	temp=TH0<<8|TL0;
	TH0=0X00;
	TL0=0X00;
	if(TF0){
		return 0xffff;
	}else{
		if(st_ne555<0&&(-st_ne555)>temp)flag_error=1;
		else flag_error=0;
		return temp+st_ne555;
	}
}
void catch_max(){
	if(max_ne555<ne555){
		max_ne555=ne555;
		time_max[0]=time[0];
		time_max[1]=time[1];
		time_max[2]=time[2];
	}
}
void main(){
	init();
	Timer0_Init();
	Timer1_Init();
	w_ds1302();
	while(1){
		if(flag_seg){
			flag_seg=0;
			Seg_Loop();
		}
		if(flag_key){
			flag_key=0;
			Key_Loop();
			seg_ui();
		}
		if(flag_time){
			flag_time=0;
			r_ds1302();
		}
		if(flag_ne555){
			flag_ne555=0;
			ne555=get_ne555();
			ne555_dac();
			seg_ui();
		}
		//记录频率最大值及其时间
		catch_max();
		//错误状态指示
		if(flag_error) led(2);
		else no_led();
		//报警指示,当前频率大于超限参数
		if(ne555>line_ne555) flag_more=1;
		else flag_more=0;
	}
}
void Timer1_Isr(void) interrupt 3
{
	static unsigned char count1=0;
	static unsigned char count2=0;
	static unsigned int count3=0;
	static unsigned int count_ne555;
	static unsigned int count_line=0;
	static unsigned int count_led1=0;
	count1++;count2++;count3++;
	count_ne555++;
	if(count1==2){
		count1=0;
		flag_seg=1;
	}
	if(count2==50){
		count2=0;
		flag_key=1;
	}
	if(count3==5000){
		count3=0;
		flag_time=1;
	}
	if(count_ne555==10000){
		count_ne555=0;
		flag_ne555=1;
	}
	if(flag_more){
		count_line++;
		if(count_line<=2000) led(2);
		else if(count_line<=4000) no_led();
		else{ count_line=0; led(2); }
	}else{ count_line=0; no_led(); }
	
	if(UI==0){
		count_led1++;
		if(count_led1<=2000) led(1);
		else if(count_led1<=4000) no_led();
		else{ count_led1=0; led(1); }
	}else{ count_led1=0; no_led(); }
}

sys.c

#include "sys.h"	
unsigned char UI=0;//s4控制
//界面标志位:0为频率界面;1为参数界面;2为时间界面;3为回显界面

bit ui1_choose=0;							//参数界面下,0为超限参数;1为校准值
bit ui3_choose=0;							//回显界面下,0为频率回显;1为时间回显
//以上选择由s5控制
bit flag_error=0;							//界面错误状态标志

int st_ne555=0;								//校准值参数 -900HZ~900HZ
unsigned int ne555;						//经校准后的频率
unsigned int max_ne555;				//记录频率最大值
unsigned int time_max[3];			//记录频率最大时的时间
unsigned int line_ne555=2000;	//超限参数 1000HZ~9000HZ

void init74hc138(unsigned char n){
	P2=(P2&0x1f)|(n<<5);
	P2&=0x1f;
}
void init(){
	P0=0x00;
	init74hc138(5);
	P0=0xff;
	init74hc138(4);
}
unsigned char v_num_dac(float num){
	return (unsigned char)(num/5.0*255);
}
//看曲线写函数
void ne555_dac(){
	unsigned char temp;
	if(flag_error){
		temp=v_num_dac(0.0);
	}else if(ne555<500){
		temp=v_num_dac(1.0);
	}else if(ne555<line_ne555){
		temp=v_num_dac(1.0+(ne555-500)*(4.0/(line_ne555-500)));
	}else{
		temp=v_num_dac(5.0);
	}
	dac(temp);
}
void led(unsigned char n){
	P0=~(0x01<<(n-1));
	init74hc138(4);
}
void no_led(){
	P0=0xff;
	init74hc138(4);
}

seg_key.c

#include "sys.h"	
code unsigned char Seg_Table[] = 
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0x88, //A 10
0x8e, //F 11
0x89, //H 12
0xc7, //L 13
0x8c, //P 14
0xbf, //- 15
0xff  //熄灭 16 
};
unsigned char Seg_Buff[8]={16,16,16,16,16,16,16,16};
unsigned char keyval,keyold,keyup,keydown;
void seg(unsigned char addr,num){
	P0=0xff;
	init74hc138(7);
	P0=0x01<<addr;
	init74hc138(6);
	P0=Seg_Table[num];
	init74hc138(7);
}
void Seg_Loop(){
	static unsigned char i=0;
	seg(i,Seg_Buff[i]);
	i++;
	if(i==8)i=0;
}
unsigned char key_scan(){
	P44=0;P42=1;
	if(P33==0)return 4;
	if(P32==0)return 5;
	P44=1;P42=0;
	if(P33==0)return 8;
	if(P32==0)return 9;
	return 0;
}
void Key_Loop(){
	keyval=key_scan();
	keydown=keyval&(keyold^keyval);
	keyup=~keyval&(keyold^keyval);
	
	//s4为界面按键,在任意界面下有效
	if(keyval==4&&keyold!=4){
		UI++;
		if(UI==4)UI=0;
		ui1_choose=0;
		ui3_choose=0;
	}
	//s5为选择按键,在参数(1)和回显(3)界面下有效
	if(keyval==5&&keyold!=5){
		if(UI==1)ui1_choose=!ui1_choose;
		if(UI==3)ui3_choose=!ui3_choose;
	}
	//s8为加按键
	if(keyval==8&&keyold!=8){
		if(UI==1){
			if(ui1_choose){
				//在校准值参数界面,校准值参数加100HZ
				if(st_ne555<900)st_ne555+=100;
			}else{
				//在超限参数界面,超限参数加1000HZ
				if(line_ne555<9000)line_ne555+=1000;
			}
		}
	}
	//s9为减按键
	if(keyval==9&&keyold!=9){
		if(UI==1){
			if(ui1_choose){
				//在校准值参数界面,校准值参数减100HZ
				if(st_ne555>-900)st_ne555-=100;
			}else{
				//在超限参数界面,超限参数减1000HZ
				if(line_ne555>1000)line_ne555-=1000;
			}
		}
	}
	keyold=keyval;
}
//频率界面显示
void ui0(){
	Seg_Buff[0]=11;	//F
	Seg_Buff[1]=16;	//熄灭
	Seg_Buff[2]=16;	//熄灭
	if(flag_error==0){
		Seg_Buff[7]=ne555%10;
		if(ne555>=10)
			Seg_Buff[6]=ne555/10%10;
		else
			Seg_Buff[6]=16;
		if(ne555>=100)
			Seg_Buff[5]=ne555/100%10;
		else
			Seg_Buff[5]=16;
		if(ne555>=1000)
			Seg_Buff[4]=ne555/1000%10;
		else
			Seg_Buff[4]=16;
		if(ne555>=10000)
			Seg_Buff[3]=ne555/10000%10;
		else
			Seg_Buff[3]=16;
	}else{//校准后的频率小于0,进入错误状态
		Seg_Buff[7]=13;
		Seg_Buff[6]=13;
		Seg_Buff[5]=16;
		Seg_Buff[4]=16;
		Seg_Buff[3]=16;
		Seg_Buff[2]=16;
		Seg_Buff[1]=16;
	}
}
//参数界面_超限参数显示
void ui1_0(){
	Seg_Buff[0]=14;	//P
	Seg_Buff[1]=1;	//1
	Seg_Buff[2]=16;	//熄灭
	Seg_Buff[3]=16;	//熄灭
	Seg_Buff[7]=line_ne555%10;
	if(line_ne555>=10)
		Seg_Buff[6]=line_ne555/10%10;
	else
		Seg_Buff[6]=16;
	if(line_ne555>=100)
		Seg_Buff[5]=line_ne555/100%10;
	else
		Seg_Buff[5]=16;
	if(line_ne555>=1000)
		Seg_Buff[4]=line_ne555/1000%10;
	else
		Seg_Buff[4]=16;
}
//参数界面_校准值参数显示
void ui1_1(){
	unsigned int tst_ne555;
	Seg_Buff[0]=14;	//P
	Seg_Buff[1]=2;	//2
	Seg_Buff[2]=16;	//熄灭
	Seg_Buff[3]=16;	//熄灭
	if(st_ne555<0) tst_ne555=-st_ne555;
	else tst_ne555=st_ne555;
	Seg_Buff[7]=tst_ne555%10;
	if(tst_ne555>=10)
		Seg_Buff[6]=tst_ne555/10%10;
	else
		Seg_Buff[6]=16;
	if(tst_ne555>=100)
		Seg_Buff[5]=tst_ne555/100%10;
	else
		Seg_Buff[5]=16;
	if(st_ne555<0)
		Seg_Buff[4]=15;//-号
	else
		Seg_Buff[4]=16;
}
//时间界面
void ui2(){
	//秒
	Seg_Buff[7]=time[0]%10;
	Seg_Buff[6]=time[0]/10;
	Seg_Buff[5]=15;
	//分
	Seg_Buff[4]=time[1]%10;
	Seg_Buff[3]=time[1]/10;
	Seg_Buff[2]=15;
	//时
	Seg_Buff[1]=time[2]%10;
	Seg_Buff[0]=time[2]/10;
}
//回显界面_频率回显显示
void ui3_0(){
	Seg_Buff[0]=12;	//H
	Seg_Buff[1]=11;	//F
	Seg_Buff[2]=16;	//熄灭
		Seg_Buff[7]=max_ne555%10;
	if(max_ne555>=10)
		Seg_Buff[6]=max_ne555/10%10;
	else
		Seg_Buff[6]=16;
	if(max_ne555>=100)
		Seg_Buff[5]=max_ne555/100%10;
	else
		Seg_Buff[5]=16;
	if(max_ne555>=1000)
		Seg_Buff[4]=max_ne555/1000%10;
	else
		Seg_Buff[4]=16;
	if(max_ne555>=10000)
		Seg_Buff[3]=max_ne555/10000%10;
	else
		Seg_Buff[3]=16;
}
//回显界面_时间回显显示
void ui3_1(){
	Seg_Buff[0]=12;	//H
	Seg_Buff[1]=10;	//A
	Seg_Buff[7]=time_max[0]%10;
	Seg_Buff[6]=time_max[0]/10;
	Seg_Buff[5]=time_max[1]%10;
	Seg_Buff[4]=time_max[1]/10;
	Seg_Buff[3]=time_max[2]%10;
	Seg_Buff[2]=time_max[2]/10;
}
void seg_ui(){
	switch(UI){
		case 0:
			ui0();break;
		case 1:
			if(ui1_choose) ui1_1();
			else ui1_0();
			break;
		case 2:
			ui2();break;
		case 3:
			if(ui3_choose) ui3_1();
			else ui3_0();
			break;
	}
}

ds1302.c

#include "sys.h"							
#include "intrins.h"
sbit RST=P1^3;
sbit SDA=P2^3;
sbit SCK=P1^7;
unsigned char time[3]={5,3,13};
void Write_Ds1302(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK = 0;
		SDA = temp&0x01;
		temp>>=1; 
		SCK=1;
	}
}   
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1; 	_nop_();  
 	Write_Ds1302(address);	
 	Write_Ds1302(dat/10*16|dat%10);		
 	RST=0; 
}
unsigned char Read_Ds1302_Byte ( unsigned char address )
{
 	unsigned char i,temp=0x00;
	unsigned char dat1,dat2;
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();
 	Write_Ds1302(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
	SCK=1;	_nop_();
	SDA=0;	_nop_();
	SDA=1;	_nop_();
	dat1=temp/16;
	dat2=temp%16;
	temp=dat1*10+dat2;
	return (temp);			
}
void w_ds1302(){
	unsigned char i,addr=0x80;
	Write_Ds1302_Byte(0x8e,0x00);
	for(i=0;i<3;i++){
		Write_Ds1302_Byte(addr,time[i]);
		addr+=2;
	}
	Write_Ds1302_Byte(0x8e,0x80);
}
void r_ds1302(){
	unsigned char i,addr=0x81;
	for(i=0;i<3;i++){
		time[i]=Read_Ds1302_Byte(addr);
		addr+=2;
	}
}

iic.c

#include "sys.h"							
#include "intrins.h"
#define DELAY_TIME	5
sbit sda=P2^1;
sbit scl=P2^0;

static void I2C_Delay(unsigned char n)
{
    do
    {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();		
    }
    while(n--);      	
}
void I2CStart(void)
{
    sda = 1;
    scl = 1;
	I2C_Delay(DELAY_TIME);
    sda = 0;
	I2C_Delay(DELAY_TIME);
    scl = 0;    
}
void I2CStop(void)
{
    sda = 0;
    scl = 1;
	I2C_Delay(DELAY_TIME);
    sda = 1;
	I2C_Delay(DELAY_TIME);
}
void I2CSendByte(unsigned char byt)
{
    unsigned char i;
	
    for(i=0; i<8; i++){
        scl = 0;
		I2C_Delay(DELAY_TIME);
        if(byt & 0x80){
            sda = 1;
        }
        else{
            sda = 0;
        }
		I2C_Delay(DELAY_TIME);
        scl = 1;
        byt <<= 1;
		I2C_Delay(DELAY_TIME);
    }
	
    scl = 0;  
}
//unsigned char I2CReceiveByte(void)
//{
//	unsigned char da;
//	unsigned char i;
//	for(i=0;i<8;i++){   
//		scl = 1;
//		I2C_Delay(DELAY_TIME);
//		da <<= 1;
//		if(sda) 
//			da |= 0x01;
//		scl = 0;
//		I2C_Delay(DELAY_TIME);
//	}
//	return da;    
//}
unsigned char I2CWaitAck(void)
{
	unsigned char ackbit;
	
    scl = 1;
	I2C_Delay(DELAY_TIME);
    ackbit = sda; 
    scl = 0;
	I2C_Delay(DELAY_TIME);
	
	return ackbit;
}
//void I2CSendAck(unsigned char ackbit)
//{
//    scl = 0;
//    sda = ackbit; 
//	I2C_Delay(DELAY_TIME);
//    scl = 1;
//	I2C_Delay(DELAY_TIME);
//    scl = 0; 
//	sda = 1;
//	I2C_Delay(DELAY_TIME);
//}
void dac(unsigned char date){
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(0x43);
	I2CWaitAck();
	I2CSendByte(date);
	I2CWaitAck();
	I2CStop();
}

待解决的问题

指示灯频率的问题一直没有做正确过,绞尽脑汁也没办法解决啊啊啊啊啊啊

http://www.dtcms.com/a/111971.html

相关文章:

  • CSS 3D变换,transform:translateZ()
  • 从小米汽车事故反思 LabVIEW 开发
  • 专业的情商测评工具:EQ-i在线测评系统
  • Fastjson 处理 JSON 生成与解析指南
  • 31--当认证协议开始“选秀“:RADIUS、LDAP、AD与本地认证的C位之争
  • react redux的学习,多个reducer
  • drawio导出流程图为白色背景png图片
  • 对OSPF协议的LSA分析
  • Linux系统进程
  • AI 浪潮下企业身份管理:特点凸显,安全挑战升级
  • CMake学习-- install 指令详细说明
  • 11.多线程-信号量-线程池
  • AWS 云运维管理指南
  • ekf-imu --- 四元数乘法符号 ⊗ 的含义
  • SQLite 触发器
  • 深入解析CPU主要参数:选购与性能评估指南
  • ngx_alloc
  • 【2022】【论文笔记】基于相变材料的光学激活的、用于THz光束操作的编码超表面——
  • leetcode-代码随想录-哈希表-有效的字母异位词
  • 2007-2019年各省地方财政交通运输支出数据
  • 动物多导生理信号采集分析系统技术简析
  • 分治算法的使用条件
  • 页面简单传参
  • 【Linux】条件变量封装类及环形队列的实现
  • mybatis慢sql无所遁形
  • 学透Spring Boot — 009. Spring Boot的四种 Http 客户端
  • 科技赋能安居梦:中建海龙以模块化革新重塑城市更新范式
  • 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测
  • 图解AUTOSAR_SWS_LINStateManager
  • prism WPF 模块