指纹考勤系统

目录

1.课题研究目的和内容

1.1 课题研究目的

1.2 课题研究内容

2.系统总体方案设计及功能模块介绍

2.1总体方案设计

2.2 ATK-301模块介绍

2.3 TFTLCD显示功能模块介绍

2.4 蜂鸣器报警功能模块介绍

2.5 时钟模块介绍

3.系统硬件设计与实现

3.1 系统硬件电路图

3.2 STM32F103ZET6

3.3 ATK-301指纹识别模块

3.4 TFTLCD显示模块设计与实现

3.5蜂鸣器报警模块设计与实现

3.6时钟模块设计与实现

4.系统软件设计与实现

4.1主程序设计与实现

4.2 指纹识别模块子程序

4.3 TFTLCD显示子程序

4.4 蜂鸣器报警子程序

5.系统测试

5.1系统软件测试

5.2系统硬件测试

6.总结与展望

1.课题研究目的和内容

1.1 课题研究目的

    指纹识别作为识别技术有着悠久的历史,这种技术通过分析指纹的全局特征和局部特征,从指纹中抽取的特征值可以非常的详尽以便可靠地通过指纹来确认一个人的身份。随着时代飞速发展,指纹识别也越来越普及,此实验就是运用ATK-LB301指纹识别模块进行录指纹、删除指纹、设置波特率及对比等级,以及对电阻屏(led屏)字库函数运用等功能。该系统成本低,拓展性强,能够适用于各类场景。

1.2 课题研究内容

学习各种传感器及设备的一般技术和特殊技术的学习,总体方案的选型设计,STM32单片机及外围设备的软硬件系统的技术开发,还有系统的调试和总体运行原理,软件以流程图的方式表示。LCD显示模块与语音模块相互配合,显示考勤信息。

1,删指纹——与模块握手通过之后,屏幕将虚拟一个键盘,按‘删指纹’进入删除界面。在此界面可以按照提示输出一个数值按‘Enter’删除单个指纹,也可按‘清空指纹’清空指纹库。如果是误操作也可以按‘返回’主界面。

2,录指纹——按‘录指纹’进入此项。录指纹流程:按第一次手指-->按第二次手指-->自动生成模板-->输入存储ID-->存储指纹成功。其中两次按指纹操作,如果超过10次无手指按下则退回主界面。模块感应到手指按下0.3S(最少停留0.3S)后,蜂鸣器会“滴”一声!

3,刷指纹--与模块握手成功之后,主函数中不断查询验证指纹,有自动验证指纹和分布验证方式,可以 改变USE_AUTO_IDETIFY宏定义值来选择。验证通过模块亮绿色灯,不通过亮红色灯。

2.系统总体方案设计及功能模块介绍

2.1总体方案设计

在本设计中首先使用杜邦线将模块连接到开发板,触摸校准界面,随后进入指纹测试主界面,按下录指纹,系统会提示按指纹,后续一共需要录入四次再按一次指纹 ,录入第四次指纹成功之后系统会提 示。 当第四次指纹也录入成功, 系统就会生成指纹模板, 接着就会提示 “ 请输 入存储 I D , 按 Enter 保存 ” 。 最后显示录入指纹成功。

录入指纹和验证指纹流程图

2.2 ATK-301模块介绍 

ATK-301 电容 指纹识别模块 简介 ATK-301 电容 指纹识别模块(以下简称 LB301 模块)是 ALIENTEK 推出的一款高性 能的电容半导体指纹识别模块。 LB301 采用了瑞典 FPC 公司按压式电容指纹传感器,该传 感器具有功耗低、稳定、图像一致性效果好、耐静电等级高的特点

2.3 TFTLCD显示功能模块介绍 

本次设计使用的4.3TFTLCD。分辨率为800*480,16 位真彩显示,自带触摸屏,可以用来作为控制输入。LCD 接口连接在 STM32F103ZET6 的 FSMC 总线上面,可以显著提高 LCD 的刷屏速度。

2.4 蜂鸣器报警功能模块介绍 

本设计采用电磁式有源蜂鸣器,电磁式有源蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,是电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

2.5 时钟模块介绍 

本设计中使用的实时时钟作为本系统中重要部分,必须在保证系统断电时能够正常工作,同时具备一定的时间准确性。DS1302是一款微小电流充电时钟芯片,内含有一个实时时钟/日历和31字节静态 RA M ,通过 SPl 接口与单片机进行连接[3]。芯片内置时间日历存储器,用于保存时间信息,包括年、月、日等基础信息。在供电模式选择使用双电源供电。当主电源比备用电源高0.2V时,主电源供电;否则,备用电源供电。选择3V纽扣电池作为备用电源。

3.系统硬件设计与实现

3.1 系统硬件实物图

 图3-1-1 系统硬件实物图

3.2 STM32F103ZET6

STM32系列产品基于ARM Cortex-M0,M0+,M3,M4和M7内核,具有高性能、低成本、低功耗等特点,适用于各种嵌入式应用开发。

本次设计采用STM32F103ZET6开发板,共有54个可供用户使用的引脚,以及一个34引脚的LCD屏幕插槽。属于中低端的32位ARM微控制器,基于高性能内核Cortex-M3,频率约为1.25DMips/MHz。拥有1μs的双12位ADC,4M/s的UART,18MHz的I/O翻转速度,18M/s的SPI。同时保持低功耗的特点。该芯片集成了UART,USB,定时器,ADC,CAN,I2C,SPI等多项功能。是一款非常常用的微型控制器。STM32系列产品成本比51单片机要高出不少,但其性能及可供使用引脚也较之提高不少,相信随着成本的不断降低,市场上将会有更多基于STM32的诸如医疗用品、电力电子系统应用、编程控制器、电机驱动、警报系统等产品。原理图如下图所示。

 

图3-2-1 STM32F103ZET6原理图

3.3 ATK-301指纹识别模块 

ATK-301 电容指纹识别模块(以下简称 LB301 模块)是 ALIENTEK 推出的一款高性 能的电容半导体指纹识别模块。 LB301 采用了瑞典 FPC 公司按压式电容指纹传感器,该传 感器具有功耗低、稳定、图像一致性效果好、耐静电等级高的特点。模块搭配 GigaDevice (兆易创新)生产的指纹控制专用芯片,针对指纹传感器做出了大量的图像优化、速度优化、 算法优化, 使模块具有识别速度快,通过率高的等特点。相对传统光学指纹模块,本模块具 有识别速度更快、体积更小、功耗更低等特点 模块配备了串口通讯接口,用户无需研究复杂的图像处理及指纹识别算法, 只需通过简 单的串口通讯按照通讯协议便可控制模块。本模块可应用于各种考勤机、保险箱柜、指纹门 禁系统、指纹锁等场合。

图3-3-1  ATK301模块原理图

3.4 TFTLCD显示模块设计与实现

TFTLCD引脚如图,图中的CS:TFTLCD片选信号WR:TFTLCD 写入数据RD:从TFTLCD读取数据D[15:0]:16位双向数据线RST:硬复位TFT LCDRS:命令/数据标志(0,读写命令;1,读写数据)。

 图3-4-1  TFTLCD引脚图

3.5蜂鸣器报警模块设计与实现

蜂鸣器与STM32连接原理图如图,图中Q1是用来扩流,R38则是一个下拉电阻,避免MCU复位的时候,蜂鸣器可能发声BEEP信号直接连接在MCU的PB8上面,PB8可以做PWM 输出。蜂鸣器的驱动信号连接在 STM32 的 PB8 上。

在系统检测到实际距离小于安全距离时,会输出一个低电平,使蜂鸣器报警。本次设计中蜂鸣器在硬件上是直接连接好了的,不需要经过任何设置,直接编写代码就可以了

     图3-5-1蜂鸣器与STM32连接原理图 

3.6时钟模块设计与实现

时钟不是日常显示时间的时钟,是指数字系统里的时钟电路。

几乎所有的数字系统在处理信号都是按节拍一步一步地进行的,系统各部分也是按节拍做的,要使电路的各部分统一节拍就需要一个“时钟信号”,产生这个时钟信号的电路就是时钟电路。

时钟电路的核心是个比较稳定的振荡器(一般都用晶体振荡器),振荡器产生的是正弦波,频率不一定是电路工作的时钟频率,所以要把这正弦波进行分频,处理,形成时钟脉冲,然后分配到需要的地方。让系统里各部分工作时使用。

任何工作都按时间顺序。用于产生这个时间的电路就是时钟电路。时钟电路一般由晶体振荡器、晶震控制芯片和电容组成。

图3-6-1时钟模块原理图 

4.系统软件设计与实现

4.1主程序设计与实现 

当系统接入电源并打开开发板开关后,主程序将会自动完成系统的初始化工作,主要包括头文件及一些变量定义的初始化。随后启动TFTLCD显示模块和指纹识别模块。首先录入指纹,正确录入后,蜂鸣器会“滴”一声!将自动生成模板和数据ID交给STM32进行处理,将处理好的数据发送给TFTLCD进行显示,将已存储的指纹与正在识别的指纹进行比对,通过模块亮绿色灯,不通过亮红色灯系统主程序流程图如图4-1-1所示。

 图4-1-1 主程序流程图

int main(void)
{    
	u8 ensure;
	u8 key_num;
	char *str;	
	u16 count = 0;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	delay_init();  	
	uart_init(115200);	
	usart2_init(usart2_baund);
	BEEP_Init();  			
	KEY_Init();					
 	LCD_Init();						
	W25QXX_Init();			
	tp_dev.init();			
	usmart_dev.init(72);		
	my_mem_init(SRAMIN);		 
	exfuns_init();			  
 	f_mount(fs[1],"1:",1);  
	POINT_COLOR=RED;
	while(font_init()) 				{	    
		LCD_ShowString(60,50,240,16,16,"Font Error!");
		delay_ms(200);				  
		LCD_Fill(60,50,240,66,WHITE);
		delay_ms(200);	
	}
	if(!(tp_dev.touchtype&0x80))	{
		Show_Str_Mid(0,30,”是否进行触摸屏校准”,16,240);
		POINT_COLOR=BLUE;
		Show_Str_Mid(0,60,”是:KEY2   否:KEY0“,16,240);	
		while(1)
		{
			key_num=KEY_Scan(0);
			if(key_num==KEY0_PRES)
				break;
			if(key_num==KEY2_PRES)
			{
				LCD_Clear(WHITE);
				TP_Adjust();  	 
				TP_Save_Adjdata();
				break;				
			}
		}
	}

4.2 指纹识别模块子程序

首先对超声波传感器的IO端口进行配置,配置PE4为输出模式,让该引脚实现输出高低电平功能,用于触发超声波的传播。配置PE2为输入模式,让该引脚实现识别高低电平功能,用于检测超声波信号的传输时间。将中断模式设置为定时器中断,使用的是定时器为定时器3。根据超声波传感器时序图3-2-1-2可得,触发超声波信号与检测回响信号之间有一定的时间间隔,为避免发射的超声波信号对接受的回响信号产生影响,因此将测量周期设置为100ms。超声波测距模块流程图如图4-2-1所示。

 图4-2-1超声波测距模块子程序流程图

LCD_Clear(WHITE);
	POINT_COLOR=RED;
	Show_Str_Mid(0,0,”指纹考勤系统”,16,240);	    			    	 
	Show_Str_Mid(0,20,”又是元气满满的一天”,16,240);				    	 
 	POINT_COLOR=BLUE;
	Show_Str_Mid(0,40,"信号接收中...",16,240);	
	while(PS_GetImage() == 0xff)
	{
		delay_ms(400);
		LCD_Fill(0,40,240,80,WHITE);
		Show_Str_Mid(0,40,"掉线了!!!",16,240);
		delay_ms(800);
		LCD_Fill(0,40,240,80,WHITE);
		Show_Str_Mid(0,40,"勿扰,信号接收中",16,240);		  
	}
	LCD_Fill(30,40,240,100,WHITE);
	Show_Str_Mid(0,40,"加载完成,可以签到了!!!",16,240);
	str=mymalloc(SRAMIN,30);
	sprintf(str,"波特率 :%d 地址:%x",usart2_baund,LB301Addr);
	Show_Str(0,60,240,16,(u8*)str,16,0);
	ensure=PS_ValidTempleteNum(&ValidN);	if(ensure!=0x00)
		ShowErrMessage(ensure);
	ensure=PS_ReadSysPara(&LB301Para);   
	if(ensure==0x00)
	{
		mymemset(str,0,50);
		sprintf(str,”:%d :%d”,LB301Para.PS_max-ValidN,LB301Para.PS_level);
		Show_Str(0,80,240,16,(u8*)str,16,0);
	}
	else
		ShowErrMessage(ensure);	
	myfree(SRAMIN,str);
	LB301_load_keyboard(0,170,(u8**)kbd_menu);
	while(1)
	{
		key_num=LB301_get_keynum(0,170);	
		if(key_num)
		{
			if(key_num==1)Del_FR();		
			if(key_num==3)Add_FR();										
		}
		if(++count > 10) 
		{
			count = 0;
			press_FR();		
		}
		delay_ms(1);				 
	} 	
}

4.3 TFTLCD显示子程序

本设计显示模块为TFT屏幕,主要用于显示摄像头拍摄画面及超声波传感器测距距离。为保证TFT液晶屏幕正常工作,我们需要对TFT屏幕进行初始化。

由于从ILI9341中读取的数据格式为GBR而我们写入的格式为RGB,因此需要进行数据格式转换,转换的方法为将数据向左位移8位,使得格式可以对其。

本次设计需要显示摄像头拍摄图像,扫描方向为从左下角到右上角,若想要显示中英文则为从左上角到右下角,若想要显示BMP图像为右上角到左下角或从右下角到左上角。

由于需要在TFT屏幕上方显示超声波测距结果,因此我们需要在指定区域上显示字符,具体方法为先设置字符显示起始坐标,然后设置需要显示的字符,需要显示的字体大小。摄像头模块在运行时的具体流程为先读取OV7670摄像头数据,并在屏幕中显示,然后读取超声波测距数据,流程图如图4-3-1所示。

图4-3-1 TFTLCD显示子程序流程图 

void LB301_load_keyboard(u16 x,u16 y,u8 **kbtbl)
{
	u16 i;
	POINT_COLOR=RED;
	kbd_tbl=kbtbl;
	LCD_Fill(x,y,x+240,y+150,WHITE);
	LCD_DrawRectangle(x,y,x+240,y+150);						   
	LCD_DrawRectangle(x+80,y,x+160,y+150);	 
	LCD_DrawRectangle(x,y+30,x+240,y+60);
	LCD_DrawRectangle(x,y+90,x+240,y+120);
	POINT_COLOR=BLUE;
	for(i=0;i<15;i++)
	{
			Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)kbd_tbl[i],16,80);
	} 
}
void LB301_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
{		  
	u16 i=keyx/3,j=keyx%3;
	if(keyx>16)return;
	if(sta &&keyx!=1)		LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);
	else if(keyx!=1)
		LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);
	if(keyx!=1)¯
		Show_Str_Mid(x+j*80,y+7+30*i,(u8*)kbd_tbl[keyx],16,80);	
}
u8 LB301_get_keynum(u16 x,u16 y)
{
	u16 i,j;
	static u8 key_x=0;
	u8 key=0;
	tp_dev.scan(0); 		 
	if(tp_dev.sta&TP_PRES_DOWN)
	{	
		for(i=0;i<5;i++)
		{
			for(j=0;j<3;j++)
			{
			 	if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*30+30)&&tp_dev.y[0]>(y+i*30))
				{	
					key=i*3+j+1;	 
					break;	 		   
				}
			}
			if(key)
			{	   
				if(key_x==key)key=0;
				else 
				{
					LB301_key_staset(x,y,key_x-1,0);
					key_x=key;
					LB301_key_staset(x,y,key_x-1,1);
				}
				break;
			}
	  }  
	}else if(key_x) 
	{
		LB301_key_staset(x,y,key_x-1,0);
		key_x=0;
	} 
	return key; 
}
u16 GET_NUM(void)
{
	u8  key_num=0;
	u16 num=0;
	while(1)
	{
		key_num=LB301_get_keynum(0,170);	
		if(key_num)
		{
			if(key_num==1)return 0xFFFF;
			if(key_num==3)return 0xFF00;
			if(key_num>3&&key_num<13&&num<99)
				num =num*10+key_num-3;		
			if(key_num==13)num =num/10;			
			if(key_num==14&&num<99)num =num*10;
			if(key_num==15)return num;  
		}
		LCD_ShowNum(80+15,170+7,num,6,16);
	}	
}
void ShowErrMessage(u8 ensure)
{
	LCD_Fill(0,120,lcddev.width,160,WHITE);
	Show_Str_Mid(0,120,(u8*)EnsureMessage(ensure),16,240);
}

4.4 蜂鸣器报警子程序

蜂鸣器报警,当存储指纹成功时,蜂鸣器将会发出声音警报,其中两次按指纹操作,如果超过10次无手指按下则蜂鸣器关闭,退回主界面。

主要代码如下所示:

void press_FR(void)
{
	SearchResult seach;
	u8 ensure;
	char *str;
#if (USE_AUTO_IDETIFY == 1)	
	ensure=PS_AutoIdentify(&seach);
	if(ensure==0x00)
	{
		BEEP=1;
		LCD_Fill(0,100,lcddev.width,160,WHITE);
		Show_Str_Mid(0,100,"签到成功",16,240);
		str=mymalloc(SRAMIN,2000);
		sprintf(str,"确有此人%d",seach.pageID,seach.mathscore);
		Show_Str_Mid(0,140,(u8*)str,16,240);
		myfree(SRAMIN,str);
		delay_ms(500);
		BEEP=0;//关闭蜂鸣器
		LCD_Fill(0,100,lcddev.width,160,WHITE);
	}
	else if(ensure != 0xff)
	{
		BEEP=1;//打开蜂鸣器
		ShowErrMessage(ensure);
		delay_ms(500);
		BEEP=0;//关闭蜂鸣器
		LCD_Fill(0,100,lcddev.width,160,WHITE);
	}
#else  
	ensure=PS_GetImage();
	if(ensure==0x00)
	{	
		BEEP=1;	
		delay_ms(100);
		ensure=PS_GenChar(CharBuffer1);
		if(ensure==0x00) 
		{		
			BEEP=0;	
			ensure=PS_Search(CharBuffer1,0,299,&seach);
			if(ensure==0x00)
			{				
				LCD_Fill(0,100,lcddev.width,160,WHITE);
				Show_Str_Mid(0,100,"删除指纹",16,240);				
				str=mymalloc(SRAMIN,2000);
				sprintf(str,":%d",seach.pageID,seach.mathscore);
				Show_Str_Mid(0,140,(u8*)str,16,240);
				myfree(SRAMIN,str);
			}
			else 
				ShowErrMessage(ensure);					
		}
		else
			ShowErrMessage(ensure);
		delay_ms(500);
		BEEP=0;
		LCD_Fill(0,100,lcddev.width,160,WHITE);
	}
#endif
}

5.系统测试

5.1系统软件测试

倒车雷达系统是利用C语言程序,使用Keil作为开发工具。使用Keil软件完成该系统的软件设计,通过新建源文件、建立工程文件、编译和连接,最后生成所需单片机烧录的HEX文件。

本次设计主要用到Keil uvision4进行程序代码编写、编译、调试并生成.HEX文件,通过USB接口将所生成的.HEX文件烧写到开发板上进行测试。主函数调试运行成功并生成 .hex文件如图5-1-1所示。

图5-1-1 主函数运行结果图

5.2系统硬件测试

本次设计中选择STM32F1战舰V3开发板作为本次设计的硬件测试。

代码编译运行通过后,开始对设计进行测试。在STM32F1战舰V3开发板中将所有电路、电子元件准确连接。

实物各种元器件的参考值及数量如表5-2-1所示。

元件

数量

STM32FI战舰V3开发板

1个

4.3寸FTFLCD显示器

1个

ATK-LB301指纹识别模块

1

导线

6根

表5-2-1 元器件清单

将各个元器件连接到开发板以后,给开发板供电,开始硬件测试,实物设计正常执行,并得到预期结果。如图5-2-1所示。

图5-2-1 实物图

6.总结与展望

这次的课程设计,用时两个星期,这两个星期不敢说自己有多大的进步,获得了多少知识,但起码是了解了stm32与传感器连接的部分过程。通过这次课程设计发现这其中需要的很多知识我们没有接触过,去图书馆查资料的时候发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。

从各种文档的阅读到开始的挑选题目、硬件结构设计、软件结构设计、程序烧写。亲身体验了一回系统的设计开发过程。很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。但真正需要自己想办法去设计一个的时候才发现其中的难度。经常做到后面突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法。

这次课程设计有个比较大的遗憾就是还没有实现云平台的一个上传,但在下学期有学习到云平台,目前已经初步掌握云平台的上传,但代码编写还存在问题,相信在下个学期的学习中可以将课设进行一个延申,实现数据上传云端。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度解析淘宝API接口:功能、限制与最佳实践

在当今日益繁荣的电商领域&#xff0c;淘宝作为中国最大的电子商务平台之一&#xff0c;其API接口为开发者提供了丰富的功能和数据资源。本文将深入解析淘宝API接口的功能、限制&#xff0c;并分享一些最佳实践&#xff0c;帮助开发者更好地理解和使用这些接口。 一、淘宝API接…

迎七一党史知识竞赛答题怎么做

迎七一党史知识竞赛答题&#xff0c;不仅是对于党史知识的检验&#xff0c;更是对于参赛者学习态度和综合能力的考量。在参与这类竞赛时&#xff0c;我们需要做好充分的准备&#xff0c;掌握一定的答题技巧&#xff0c;才能取得好的成绩。 首先&#xff0c;我们要深入了解竞赛…

Exception异常机制详细讲解

目录 一、异常1.1 什么是异常1.2 异常机制的作用1.3 常见的异常2.3 异常的分类1. Error2. Exception① 运行时异常② 编译期异常总结&#xff1a; 二、异常的处理2.1 抛出异常3.1 抛出异常语法3.2 试图捕获异常3.3 捕获异常与抛出异常的区别1. 抛出异常2.捕获异常 三、finally四…

# 全面解剖 消息中间件 RocketMQ-(5)

全面解剖 消息中间件 RocketMQ-&#xff08;5&#xff09; 一、RocketMQ &#xff1a;过滤消息的两种方式 1、Tag 过滤 在大多数情况下&#xff0c;TAG 是一个简单而有用的设计&#xff0c;其可以来选择您想要的消息。 例如: DefaultMoPushconsumer consumer new DefaultM…

新项目来了,JDK 17和JDK 21 该如何选择?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

FPGA Verilog模块化设计入门篇一

随着电子技术的快速发展&#xff0c;现场可编程门阵列&#xff08;FPGA&#xff09;已成为现代电子系统设计中不可或缺的一部分。FPGA的灵活性、可重构性和高性能使得它成为处理复杂算法、加速数据处理和实现特定功能的理想选择。然而&#xff0c;随着系统复杂性的增加&#xf…

抢拍寄售模式:引领行业潮流的新商业引擎

在如今竞争激烈的市场中&#xff0c;企业的成功不仅依赖于产品和服务的质量&#xff0c;更在于能否把握市场趋势&#xff0c;采用创新的商业模式来推动增长。今天&#xff0c;我将详细介绍一种新兴的商业模式——抢拍寄售模式。这种模式以其独特的业务流程和逻辑&#xff0c;正…

让企业自己掌握数据主权,可道云teamOS让企业数据私有化不再是难题,让企业数据更安全、更可控

越来越多的企业开始意识到&#xff0c;仅仅依赖公共云存储服务可能无法满足其对于数据安全性的高标准要求。 毕竟每年都会有不同程度的数据泄露问题爆出&#xff0c;导致大家在使用企业网盘的时候也总是惴惴不安。一旦数据泄露或被非法获取&#xff0c;企业将面临巨大的经济损…

github将默认分支main改为master

github将默认分支main改为master 1.进入github&#xff0c;点击setting 2.在setting中&#xff0c;选择Respositories&#xff0c;更新默认分支为master 3.选择要更新的项目&#xff0c;在项目中选择setting->general->切换默认分支

PPT设置为本框的默认格式以及固定文本框

调整文本框固定位置 双击文本框之后勾选如下三个位置 设置文本框为默认 在调整好文本框的基本性质后&#xff0c;设置为默认即可

【2024PythonPycharm详细安装教程】

1.打开官网 https://www.python.org/ downloads——>Windows 2.找到 Download Windows installer (64-bit) 下载 3.下载完成双击安装包 勾选Add python.exe to PATH(自动配置系统变量) 点击Install Now&#xff08;默认安装&#xff09; 然后看到安装成功&#xff0…

C# 校验Json格式

错误json&#xff1a;错误值 -2146.379 [{"Key": "surface_heights_average","Value": "-2122.739nm","Description": "surface_heights_average"}, {"Key": "surface_heights_max","V…

python语句执行不了

文章目录 问题解决方案小结 问题 执行命令 python install -r .\requirements.txt出现问题如下&#xff1a; D:\soft\Python310\python.exe: cant open file G:\\Area\\C\\Fay\\install: [Errno 2] No such file or directory (.venv) PS G:\Area\C\Fay> pip install -r .…

微软AI PC革命Windows,游戏竟带头开挂

在购物节到来之际&#xff0c;各个厂家都摩拳擦掌&#xff0c;除了手机那边搞得热火朝天&#xff0c;当然电脑这边也没闲着。 微软就趁着 520 这味儿&#xff0c;召开了自己的 Build 2024 开发者大会&#xff0c;同时还发布了最新一代的 Surface Pro 和 Surface Laptop&#xf…

【ROS】mp4转rosbag

前言 工作中遇到域控中无中间件&#xff0c;无法采用rosbag等中间件的形式同时采集感知结果与视频流&#xff0c;只能通过外接摄像头采集视频流&#xff0c;以及使用can报文或者bin文件形式存储路测数据&#xff1b;导致本地回放时&#xff0c;无法通过视频流观察真实情况&…

年刊文量激增破1000+,但3个月即可录用,这本2区TOP SSCI在你的考虑之列吗

【SciencePub学术】今天小编给大家推荐一本经济金融领域的SSCI&#xff0c;JCR1区&#xff0c;中科院2区TOP&#xff0c;影响因子高达10.4&#xff0c;最重要的是审稿周期较短&#xff0c;对急投的学者较为友好&#xff0c;同领域的作者不妨考虑一下这本期刊&#xff01; Finan…

ERPNext - 用Python打造您的企业资源规划解决方案

文章目录 ERPNext - 用Python打造您的企业资源规划解决方案第一部分&#xff1a;背景第二部分&#xff1a;ERPNext是什么&#xff1f;第三部分&#xff1a;如何安装ERPNext&#xff1f;第四部分&#xff1a;ERPNext基本使用方法第五部分&#xff1a;场景应用示例第六部分&#…

STM32高级控制定时器应用之检测输入PWM周期和占空比

目录 概述 1 PWM 输入模式 1.1 原理介绍 1.2 应用实例 1.3 示例时序图 2 使用STM32Cube配置工程 2.1 软件环境 2.2 配置参数 2.3 生成项目文件 3 功能实现 3.1 PWM占空比函数 3.2 输入捕捉回调函数 4 功能测试 4.1 测试软件框架结构 4.2 实验实现 4.2.1 测试实…

使用element的小弹框并修改css

使用el-popover来做弹框&#xff1a; 滑动或点击元素要加插槽slot"reference"来展示弹框&#xff1b; <el-popoverplacement"top"width"166"trigger"hover"popper-class"popover"><div><div><div>…

关于大模型多轮问答的两种方式

前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图&#xff0c;而在常见的使用大模型进行多轮对话方式中&#xff0c;我接触到的只有两种方式&#xff1a; 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型&#xff0c…