【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(二)、需求分析和系统设计

news2025/1/15 18:17:01

本次实验(一)见博客:【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(一)、实验指导书

说明:本次实验的代码使用verilog编写,文章中为阅读方便,故采用matlab代码格式。

实验二、时序逻辑设计——三色灯开关(实验报告部分)

2、实验报告

2.1、需求分析

本次实验要求设计一种通过操作开关的时间控制灯光颜色的开关,该灯具含有两组LED白光灯芯和两组LED黄光灯芯,且开关的功能大致分为四种情况:
1、 如果灯具发出白光时断开开关,且在1秒之内再次闭合开关,则灯具发出日光;
2、 如果灯具发出日光时断开开关,且在1秒之内再次闭合开关,则灯具发出黄光;
3、 如果灯具发出黄光时断开开关,则再次闭合开关之后,灯具发出白光;
4、 如果开关断开的时间超过1秒,则开关闭合后,灯具发出白光。
因此可以总结出该灯具大致的工作流程为:白光——日光——黄光——白光,且时延Δt = 1秒,故可以设置cnt变量用于计时。

扩展实验要求:
开发时序逻辑电路,将按动开关的操作(“开”、“关”)以及按动开关之间的时间间隔(以
10ms为单位,进行0~127编码,分别代表0s至1.27s,超过1.27s均算作1.27s)以数码的形式“录制”下来,记录深度至少为16条操作序列(至少能保存16次操作);
按动实验板上的一个按键,可以将记录的内容用UART依次上传并显示到PC机终端上。

2.2、系统设计

2.2.1、总体设计思路

模块:按照设计需求,分为 “mode_run” 模块 & “mode_demo” 模块以及用于按键去抖的debounce模块。
由于题目要求延时一定时间后重新设定状态,故可以设置一cnt变量用于计时;使用RESET进行复位。
拓展实验:
通过Uart_ClkDiv进行时钟分频,Key进行按键消抖,Uart_Tx作为上传数据模块,time_cnt作为记录数据并依次上传模块。

2.2.2、接口设计
mode_run:
input clk (系统时钟), rst (重置);
key0 (按键0)   LOC = P2;
key1 (按键1)   LOC = P3;
NET "led[0]" LOC = P79;
NET "led[1]" LOC = P83;
NET "led[2]" LOC = P84;
NET "led[3]" LOC = P85;
NET "clk" LOC = P36;
NET "rst" LOC = P11;
NET "key0" LOC = P2;
NET "key1" LOC = P3;

mode_demo:


NET "light[0]" LOC = P23;
NET "light[1]" LOC = P18;
NET "light[2]" LOC = P15;
NET "light[3]" LOC = P16;
NET "light[4]" LOC = P17;
NET "light[5]" LOC = P22;
NET "light[6]" LOC = P24;
NET "clk" LOC = P36;
NET "dp" LOC = P12;
NET "com[0]" LOC = P27;
NET "com[1]" LOC = P26;
NET "key0" LOC = P2;
NET "key1" LOC = P3;
NET "rst" LOC = P11;

Uart_time:
NET "Sys_CLK" LOC = P36;
NET "Key_In[0]" LOC = P32;
NET "Key_In[1]" LOC = P2;
NET "Sys_RST" LOC = P11;
NET "Sys_RST" PULLUP;
NET "Signal_Tx" LOC = P10;
2.2.3、mode_run模块

在这里插入图片描述

图 1 状态机流程图

module mode_run_1(
	clk,
	rst,
	key0,
	key1,
	led
    );
	input 						clk				;
	input							rst				;
	input 						key0				;
	input 						key1				;
	wire							key_0				;
	wire							key_1				;
	output reg	[3:0] 		led				;
	debounce instance_name0 (
    .clk(clk), 
    .rst(rst), 
    .key(key0), 
    .key_pulse(key_0)
    );
	 debounce instance_name1 (
    .clk(clk), 
    .rst(rst), 
    .key(key1), 
    .key_pulse(key_1)
    );

	reg	[24:0]				cnt				;
	parameter C_25M       = 25'd24_999_999;
	
	//信号定义
	reg  	[3:0]					state_b			;
	
	//状态机参数
	parameter S0          = 4'b0000			;
	parameter S1          = 4'b0001			;
	parameter S2          = 4'b0011			;
	parameter S3          = 4'b0101			;
	parameter S4          = 4'b1111			;
	parameter S5          = 4'b0100			;
	parameter S6          = 4'b1100			;
	initial begin
		state_b <= S0;
		led <= S0;
		cnt <= 25'b0;
	end
	//一段式状态机
	always@(posedge clk or negedge rst) begin
		if(!rst)	begin
			state_b <= S0;
			led <= S0;
			cnt <= 25'b0;
		end
		else begin
			if(key_0 == 1) cnt <= 25'b0;
			else cnt <= cnt + 1;
			if(cnt >= C_25M && led == S0) 
				state_b <= S0;
			else 	state_b <= state_b;
		
			case(led)
				S0: begin
					if(key_0 == 1) begin
						case(state_b)
							S0: begin
								state_b <= S1;
								led <= S1;
							end
							S1: begin
								state_b <= S3;
								led <= S3;
							end
							S2: begin
								state_b <= S4;
								led <= S4;
							end
							S3: begin
								state_b <= S5;
								led <= S5;
							end
							S4: begin
								state_b <= S6;
								led <= S6;
							end
							S5: begin
								state_b <= S1;
								led <= S1;
							end
							S6: begin
								state_b <= S2;
								led <= S2;
							end
							default: begin
								state_b <= state_b;
								led <= led;
							end
						endcase
					end
					else begin
						led <= S0;
					end
				end
				S1: begin
					if(key_0 == 1) begin
						state_b <= S1;
						led <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S2;
						led <= S2;
					end
				end
				S2: begin
					if(key_0 == 1) begin
						state_b <= S2;
						led <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S1;
						led <= S1;
					end
				end
				S3: begin
					if(key_0 == 1) begin
						state_b <= S3;
						led <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S4;
						led <= S4;
					end
				end
				S4: begin
					if(key_0 == 1) begin
						state_b <= S4;
						led <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S3;
						led <= S3;
					end
				end
				S5: begin
					if(key_0 == 1) begin
						state_b <= S5;
						led <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S6;
						led <= S6;
					end
				end
				S6: begin
					if(key_0 == 1) begin
						state_b <= S6;
						led <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S5;
						led <= S5;
					end
				end
				default: begin
					state_b <= state_b;
					led <= led;
				end
			endcase
		end
	end
endmodule
2.2.4、debounce模块

该模块为防抖模块。对按键KEY进行消抖,达到输入信号稳定且有效的目的。

2.2.5、mode_demo模块
module mode_demo_1(
	clk,
	rst,
	key0,
	key1,
	dp,
	light,
	com
    );
	input 						clk				;
	input							rst				;
	input 						key0				;
	input 						key1				;
	wire							key_0				;
	wire							key_1				;
	output reg [1:0]			com				;
	output reg 					dp					;
	output reg [6:0]			light				;
	debounce instance_name0 (
    .clk(clk), 
    .rst(rst), 
    .key(key0), 
    .key_pulse(key_0)
    );
	debounce instance_name1 (
    .clk(clk), 
    .rst(rst), 
    .key(key1), 
    .key_pulse(key_1)
    );

	//信号定义
	reg  	[3:0]					state_b			;
	reg	[3:0]					state_c			;
	//状态机参数
	parameter S0          = 4'b0000			;
	parameter S1          = 4'b0001			;
	parameter S2          = 4'b0011			;
	parameter S3          = 4'b0101			;
	parameter S4          = 4'b1111			;
	parameter S5          = 4'b0100			;
	parameter S6          = 4'b1100			;
	//数码管译码
	parameter DATA0   	 = 7'b0111111  	;
   parameter DATA1  		 = 7'b0000110  	;
   parameter DATA2 		 = 7'b1011011  	;
   parameter DATA3		 = 7'b1001111  	;
   parameter DATA4   	 = 7'b1100110  	;
   parameter DATA5 	    = 7'b1101101  	;
   parameter DATA6 	    = 7'b1111101  	;
   parameter DATA7 	    = 7'b0000111  	;
	parameter DATA8 	    = 7'b1111111  	;
	parameter DATA9 	    = 7'b1101111  	;
	reg sec_pls;	//产生秒脉冲
	reg [25:0] sec_cnt;
	always@(posedge clk or negedge rst) begin
		if(key_0 == 1) begin
			sec_pls <= 1'b0;
			sec_cnt <= 26'b0;
		end
		else begin
			sec_pls <= sec_pls;
			sec_cnt <= sec_cnt;
		end
		if(!rst) begin
			sec_pls <= 1'b0;
			sec_cnt <= 26'b0;
		end
		else if(sec_cnt == 26'd50_000_000) begin
			sec_pls <= 1'b1;
			sec_cnt <= 26'b0;
		end
		else begin
			sec_pls <= 1'b0;
			sec_cnt <= sec_cnt + 1;
		end
	end
	reg [6:0] sec;
	reg [3:0] tmp;
	reg [3:0] num;
	reg [3:0] buf0;
	reg [3:0] buf1;
	reg		 dp1;
	//计数器,约10ms扫描一次,用于数码管动态显示
	reg [16:0] cnt;
	always@(posedge clk or negedge rst) begin
		if(!rst)	cnt <= 17'b0;
		else if(cnt == 17'b11111111111111111)	begin
			cnt <= 17'b0;
		end
		else	cnt <= cnt + 1;
	end
	
	always@(posedge clk or negedge rst) begin
		if(!rst)	begin
			state_c <= S0;
			state_b <= S0;
			dp <= 0;
		end
		else begin
			if(sec >= 10 && state_c == S0) 
				state_b <= S0;
			else 	state_b <= state_b;
		
			case(state_c)
				S0: begin
					if(key_0 == 1) begin
						case(state_b)
							S0: begin
								state_b <= S1;
								state_c <= S1;
							end
							S1: begin
								state_b <= S3;
								state_c <= S3;
							end
							S2: begin
								state_b <= S4;
								state_c <= S4;
							end
							S3: begin
								state_b <= S5;
								state_c <= S5;
							end
							S4: begin
								state_b <= S6;
								state_c <= S6;
							end
							S5: begin
								state_b <= S1;
								state_c <= S1;
							end
							S6: begin
								state_b <= S2;
								state_c <= S2;
							end
							default: begin
								state_b <= state_b;
								state_c <= state_c;
							end
						endcase
					end
					else begin
						state_b <= state_b;
						state_c <= S0;
					end
				end
				S1: begin
					if(key_0 == 1) begin
						state_b <= S1;
						state_c <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S2;
						state_c <= S2;
					end
				end
				S2: begin
					if(key_0 == 1) begin
						state_b <= S2;
						state_c <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S1;
						state_c <= S1;
					end
				end
				S3: begin
					if(key_0 == 1) begin
						state_b <= S3;
						state_c <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S4;
						state_c <= S4;
					end
				end
				S4: begin
					if(key_0 == 1) begin
						state_b <= S4;
						state_c <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S3;
						state_c <= S3;
					end
				end
				S5: begin
					if(key_0 == 1) begin
						state_b <= S5;
						state_c <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S6;
						state_c <= S6;
					end
				end
				S6: begin
					if(key_0 == 1) begin
						state_b <= S6;
						state_c <= S0;
					end
					else if(key_1 == 1) begin
						state_b <= S5;
						state_c <= S5;
					end
				end
				default: begin
					state_c <= state_c;
					state_b <= state_b;
				end
			endcase
		end
	
		if(key_0 == 1) begin
			sec <= 7'b0;
			num <= 4'b0;
			com <= 2'b00;
			light <= DATA0;
		end
		else	sec <= sec;
		if(!rst) begin
			sec <= 7'b0;
			light <= DATA0;
		end
		else if(sec_pls) begin
			if(sec == 7'd99) begin
				sec <= 7'b0;
				num <= 4'b0;
				light <= DATA0;
			end
			else begin
				sec <= sec + 1;
			
				case(state_c)		//dp位表示状态
					S0: begin
						if(sec >= 7'd10)	state_b <= S0;
						else					state_b <= state_b;
					end
					S2: begin
						dp1 <= ~dp1;
					end
					S4: begin
						dp1 <= ~dp1;
					end
					S6: begin
						dp1 <= ~dp1;
					end
				endcase
			end
		end
		//显示模块
		if(!rst)	begin
			num <= 4'b0;
			com <= 2'b00;
		end
		else begin
			if(sec >= 0 && sec < 10) begin	//数码管显示数字
					buf1 <= 0;
					buf0 <= sec[3:0];
				end
			else if(sec >= 10 && sec < 20) begin
				buf1 <= 4'd1;
				tmp <= (sec - 7'd10);
				buf0 <= tmp[3:0];
			end
			else if(sec >= 20 && sec < 30) begin
				buf1 <= 4'd2;
				tmp <= sec - 7'd20;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 30 && sec < 40) begin
				buf1 <= 4'd3;
				tmp <= sec - 7'd30;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 40 && sec < 50) begin
				buf1 <= 4'd4;
				tmp <= sec - 7'd40;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 50 && sec < 60) begin
				buf1 <= 4'd5;
				tmp <= sec - 7'd50;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 60 && sec < 70) begin
				buf1 <= 4'd6;
				tmp <= sec - 7'd60;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 70 && sec < 80) begin
				buf1 <= 4'd7;
				tmp <= sec - 7'd70;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 80 && sec < 90) begin
				buf1 <= 4'd8;
				tmp <= sec - 7'd80;
				buf0 <= tmp[3:0];
			end
			else if(sec >= 90 && sec < 100) begin
				buf1 <= 4'd9;
				tmp <= sec - 7'd90;
				buf0 <= tmp[3:0];
			end
			case(cnt[16])
				1'b0: begin
					com <= 2'b01;
					num <= buf0;
					case(state_c)
						S0:		dp <= 0;
						S1:		dp <= 1;
						S2:		dp <= dp1;
						S3:		dp <= 1;
						S4:		dp <= dp1;
						S5:		dp <= 0;
						S6:		dp <= 0;
						default:	dp <= 0;
					endcase
				end
				1'b1: begin
					com <= 2'b10;
					num <= buf1;
					case(state_c)
						S0:		dp <= 0;
						S1:		dp <= 0;
						S2:		dp <= 0;
						S3:		dp <= 1;
						S4:		dp <= dp1;
						S5:		dp <= 1;
						S6:		dp <= dp1;
						default:	dp <= 0;
					endcase
				end
			endcase
			case(num)				//个位
				4'd0:	light <= DATA0;
				4'd1:	light <= DATA1;
				4'd2:	light <= DATA2;
				4'd3:	light <= DATA3;
				4'd4:	light <= DATA4;
				4'd5:	light <= DATA5;
				4'd6:	light <= DATA6;
				4'd7:	light <= DATA7;
				4'd8:	light <= DATA8;
				4'd9:	light <= DATA9;
				default: light <= DATA0;
			endcase
		end
end
		
	
endmodule
2.2.6、time_cnt模块
module time_cnt(Sys_CLK,Sys_RST,Idle,Key_In,send_data,send_en
    );
	 
input Sys_CLK;
input Sys_RST;
input Idle;
input [1:0]Key_In;
output reg [7:0] send_data;
output reg send_en;

reg key0_d1;
reg key0_d2;
reg key1_d1;
reg key1_d2;
reg [7:0] time_cnt;
reg [3:0] send_cnt;

reg [17:0]Div_Cnt = 18'd0;  //
reg Div_CLK_10ms = 1'b0;
reg Div_CLK_10ms_d1 = 1'b0;
reg Div_CLK_10ms_d2 = 1'b0;
reg cnt_flag;
reg send_flag;

reg [7:0] send_data_reg [0:15];

always@(posedge Sys_CLK or negedge Sys_RST)
begin
	if(!Sys_RST)begin
		key0_d1 <= 1'b0;
		key0_d2 <= 1'b0;
		Div_CLK_10ms_d1 <= 1'b0;
		Div_CLK_10ms_d2 <= 1'b0;
	end
	else
	begin
		key0_d1 <= Key_In[0];
		key0_d2 <= key0_d1;
		Div_CLK_10ms_d1 <= Div_CLK_10ms;
		Div_CLK_10ms_d2 <= Div_CLK_10ms_d1;
	end
end

always@(posedge Div_CLK_10ms or negedge Sys_RST)
begin
	if(!Sys_RST)begin
		key1_d1 <= 1'b0;
		key1_d2 <= 1'b0;
	end
	else
	begin
		key1_d1 <= Key_In[1];
		key1_d2 <= key1_d1;
	end
end



always@(posedge Sys_CLK)
begin
	if(Div_Cnt == 18'd250000)
	begin
		Div_Cnt = 18'd0;
		Div_CLK_10ms = ~Div_CLK_10ms;
	end
	else
		Div_Cnt = Div_Cnt + 1'd1;
end


always@(posedge Sys_CLK or negedge Sys_RST)
begin
	if(!Sys_RST)begin
		time_cnt <= 8'd0;
		cnt_flag <= 1'b0;
	end
	else if(key0_d1 && !key0_d2) //rise
	begin
		time_cnt <= 8'd0;
		cnt_flag <= 1'b1;
	end
	else if(!key0_d1 && key0_d2) //fall
	begin
		time_cnt <= 8'd0;
		cnt_flag <= 1'b0;
	end
	else if(cnt_flag  && Div_CLK_10ms_d1 && !Div_CLK_10ms_d2) 
	begin
		time_cnt <= time_cnt + 8'd1;
	end
	
end


always@(posedge Sys_CLK  or negedge Sys_RST)begin
	if(!Sys_RST)
	begin
		send_data_reg[0] <= 8'd0;
		send_data_reg[1] <= 8'd0;
		send_data_reg[2] <= 8'd0;
		send_data_reg[3] <= 8'd0;
		send_data_reg[4] <= 8'd0;
		send_data_reg[5] <= 8'd0;
		send_data_reg[6] <= 8'd0;
		send_data_reg[7] <= 8'd0;
		send_data_reg[8] <= 8'd0;
		send_data_reg[9] <= 8'd0;
		send_data_reg[10] <= 8'd0;
		send_data_reg[11] <= 8'd0;
		send_data_reg[12] <= 8'd0;
		send_data_reg[13] <= 8'd0;
		send_data_reg[14] <= 8'd0;
		send_data_reg[15] <= 8'd0;
//		send_data_reg[12] <= 8'd31;
//		send_data_reg[13] <= 8'd42;
//		send_data_reg[14] <= 8'd53;
//		send_data_reg[15] <= 8'd64;

	end
	else  if(!key0_d1 && key0_d2)
	begin
		send_data_reg[0] <= time_cnt;
		send_data_reg[1] <= send_data_reg[0];
		send_data_reg[2] <= send_data_reg[1];
		send_data_reg[3] <= send_data_reg[2];
		send_data_reg[4] <= send_data_reg[3];
		send_data_reg[5] <= send_data_reg[4];
		send_data_reg[6] <= send_data_reg[5];
		send_data_reg[7] <= send_data_reg[6];
		send_data_reg[8] <= send_data_reg[7];
		send_data_reg[9] <= send_data_reg[8];
		send_data_reg[10] <= send_data_reg[9];
		send_data_reg[11] <= send_data_reg[10];
		send_data_reg[12] <= send_data_reg[11];
		send_data_reg[13] <= send_data_reg[12];
		send_data_reg[14] <= send_data_reg[13];
		send_data_reg[15] <= send_data_reg[14];
	end
end

always@(posedge Div_CLK_10ms or negedge Sys_RST)
begin
	if(!Sys_RST)begin
		send_data <= 8'd0;
		send_en <= 1'b0;
		send_flag <= 1'b0;
	end
	else if(key1_d1 && !key1_d2)
	begin
		send_data <= send_data_reg[0];
		send_en <= 1'b1;
		send_flag <= 1'b1;
	end
	else if(send_flag && !Idle && send_en == 1'b0 && send_cnt < 4'd15)
		begin
		send_data <= send_data_reg[send_cnt];
//		send_data <= send_data_reg[0];
		send_en <= 1'b1;
		send_flag <= 1'b1;
	end
	else if(send_flag && !Idle &&   send_en == 1'b0 && send_cnt == 4'd15)
		begin
//		send_data <= send_data_reg[send_cnt];
		send_data <= send_data_reg[15];
		send_en <= 1'b1;
		send_flag <= 1'b0;
	end
	else
	begin
		send_en <= 1'b0;
	end
end

always@(posedge Div_CLK_10ms or negedge Sys_RST)
begin
	if(!Sys_RST)begin
		send_cnt <= 4'd0;
	end
	else if(send_cnt < 4'd15 && send_en )
	begin
		send_cnt <= send_cnt + 4'd1;
	end
end

endmodule

其他模块都已经在用例中给出,此处不再赘述。

(未完待续)

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

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

相关文章

OGG extract进程占据大量虚拟内存导致服务器内存异常增长分析

现象 oracle服务器一节点内存&#xff0c;一个月来持续升高&#xff0c;近一月上涨10%左右。 问题分析 OS内存使用情况 使用内存最大的10个进程如下&#xff0c;PID为279417占用最大的内存。 查询279417&#xff0c;发现是ogg相关进程。 发现ogg的extract进程占用了大量的虚拟内…

Lagent AgentLego 智能体应用搭建-笔记六

本次课程由Lagent&AgentLego 核心贡献者樊奇老师讲解【Lagent & AgentLego 智能体应用搭建】课程 课程视频&#xff1a;https://www.bilibili.com/video/BV1Xt4217728/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp2/agent 大语言模型的局限…

E4980A是德科技E4980A精密LCR表

181/2461/8938产品概述&#xff1a; Keysight E4980A 精密 LCR 表为各种元件测量提供了精度、速度和多功能性的最佳组合。E4980A 在低阻抗和高阻抗范围内提供快速测量速度和出色的性能&#xff0c;是元件和材料的一般研发和制造测试的终极工具。LAN、USB 和 GPIB PC 连接可提高…

Openharmony - 设备异常关机Power Down问题分析

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 1.问题描述1.1出现power down的原因1.1.1硬件故障或信号1.1.2软件错误或系统崩溃2.抓日志信息2.1.抓日志方法2.2.问题初步分析3.问题排…

前后端分离实践:使用 React 和 Express 搭建完整登录注册流程

文章目录 概要整体架构流程技术名词解释ReactExpressReact RouterAnt Design 技术细节前端设计后端逻辑数据交互 小结 概要 本项目是一个基于React和Express的简单登录注册系统。通过前后端分离的方式&#xff0c;实现了用户的注册、登录和查看用户列表等功能。前端使用React框…

学习通刷课免费,成绩又高的方法(超详细)

文章目录 概要整体架构流程 概要 我们在大学的时候有好多课程都是线上的水课&#xff0c;这时我们需要刷课又不想花钱怎么办&#xff0c;这篇文章推荐三个脚本配合使用&#xff0c;成绩还不错亲试&#xff1b; 整体架构流程 1.我们先找到浏览器的扩展程序 2.点击获取扩展 …

【vscode】2024最新!vscode设置默认终端为git bash

小tian最近电脑系统重装&#xff0c;刚好可以重新配置一下前端环境和工具&#xff0c;以此专栏记录一下前端工具配置和环境相关内容。 vscode如何设置默认终端为git bash&#xff1f; 首先&#xff0c;当然是你要先装好git啦 git怎么安装&#xff0c;废话不多说&#xff0c;&…

SaTokenException: 非Web上下文无法获取Request问题解决

最近在学定时任务&#xff0c;需要获取到当前用户信息然后再定时任务方法中取出当前用户信息&#xff0c;刚开始使用的是StpUtil.getTokenInfo()或者 StpUtil.getLoginId()这类方法&#xff0c;但是报错了&#xff0c;哈哈哈哈~ 其实看源代码就知道了&#xff0c;需要提供Http…

[C++ QT项目实战]----系统实现双击表格某一行,表格数据不再更新,可以查看该行所有信息,选中表更新之后,数据可以继续更新

前言 在需要庞大的数据量的系统中&#xff0c;基于合适的功能对数据进行观察和使用至关重要&#xff0c;本篇在自己项目实战的基础上&#xff0c;基于C QT编程语言&#xff0c;对其中一个数据功能进行分析和代码实现&#xff0c;希望可以有所帮助。一些特殊原因&#xff0c;图片…

Penpad 再获 Animoca Brands 投资,全新生态历程

Penpad是Scroll生态的LaunchPad & Yield Aggregator平台&#xff0c;该平台近日在融资上取得了系列进展。据悉&#xff0c;Penpad在前不久率先获得了来自于Gate Labs以及Scroll联合创始人Sandy Peng的融资&#xff0c;并且在近日&#xff0c;其又获得了来自于知名加密投资机…

上市公司专利数据、专利申请、专利授权和质量指标计算面板数据(1990-2022年)

01、数据简介 专利作为企业创新能力和核心竞争力的体现&#xff0c;越来越受到上市公司的重视。了解上市公司的专利数据、专利申请、专利授权和质量指标计算&#xff0c;有助于投资者更好地评估公司的创新能力和长期发展潜力。 通过分析上市公司的专利数据、专利申请、专利授…

C语言浮点型数据在内存中的存储及取出等的介绍

文章目录 前言一、浮点型在内存中的存储二、浮点数存储规则三、浮点数在内存中的存储&#xff08;32位&#xff09;float类型四、浮点数在内存中的存储&#xff08;64位&#xff09;double类型五、指数E从内存中取出分成三种情况1. E不全为0或不全为12. E全为03. E全为1 六、有…

Golang基础1-基本类型、if、switch、string

基本类型 bool 整数&#xff1a;byte(相当于uint8), rune(相当于int32), int/uint ,int8/uint8 ,int16/uint16 ,int32/uint32 ,int64/uint64 浮点数: float32 ,float64, complex64 ,complex128 array&#xff08;值类型&#xff09;、slice、map、chan&#xff08;引用类型…

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…

【LLMOps】小白详细教程,在Dify中创建并使用自定义工具

文章目录 博客详细讲解视频点击查看高清脑图 1. 搭建天气查询http服务1.1. flask代码1.2. 接口优化方法 2. 生成openapi json schema2.1. 测试接口2.2. 生成openapi schema 3. 在dify中创建自定义工具3.1. 导入schema3.2. 设置工具认证信息3.3. 测试工具 4. 调用工具4.1. Agent…

Apache Seata的可观测实践

title: Seata的可观测实践 keywords: [Seata、分布式事务、数据一致性、微服务、可观测] description: 本文介绍Seata在可观测领域的探索和实践 author: 刘戎-Seata 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Seata简介 Seata的…

matplotlib 安装失败:Failed building wheel for matplotlib 解决方案

Python | Failed building wheel for matplotlib 朋友遇到 python 安装 matplotlib 时的问题&#xff0c;笔者帮忙远程调试(踩了不少坑)。网上的解决方案有很多无效&#xff0c;以此来记录以下个人解决方案。 在使用指令 pip install matplotlib出现如下报错&#xff1a; “…

机器学习理论基础—集成学习(1)

机器学习理论基础—集成学习 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务&#xff0c;有时也称为多分类系统等。 分类&#xff1a; 根据集成学习中的个体学习器的不同可以分为同质集成&#xff08;集成的学习器相同例如全部是决策树&#xff09;&#xff0c…

目标检测——农作物杂草数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

centos 安装配置文件中心 nacos2.2.3 稳定版

安装mysql 8 参考文章 centos7搭建mysql5.6 && mysql 8.0_centos7 mysql5.6-CSDN博客 安装 jdk 17 官网下载 对应的版本 Java Downloads | Oracle wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_l…