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

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

说明:本次实验的代码使用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

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

(未完待续)

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

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

相关文章

kaggle 房价预测 得分0.53492

流程 导入需要的包引入文件,查看内容数据处理调用模型准备训练输出结果 导入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.linear_model i…

Claude 3 Opus 效果是否真的可以超过GPT-4?

实测,不仅是超过,而且我个人感觉这个差距甚至大于GPT3.5到GPT4的距离. claude3在长篇理学论文的解析能力是非常显著的,可以扩展补完作者省略的大量运用高等数学,复变函数以及更多数理方法的计算过程,并且将中间过程补完的非常完美.不会漏符号,错符号,偏差数值之类的问题.工科许…

【C语言】贪吃蛇项目(2)- 实现代码详解

文章目录 前言一、游戏开始界面设计首先 - 打印环境界面其次 - 游戏地图、蛇身及食物的设计1、地图2、蛇身设置及打印3、食物 二、游戏运行环节蛇的上下左右移动等功能蛇的移动 三、结束游戏代码 前言 在笔者的前一篇博客中详细记载了贪吃蛇项目所需的一些必备知识以及我们进行…

mysql_explain执行计划字段解析

【README】 本文对 explain打印的执行结果的字段进行解析&#xff1b; 本文总结自&#xff1a; MySQL :: MySQL 8.3 Reference Manual :: 10.8.2 EXPLAIN Output Formathttps://dev.mysql.com/doc/refman/8.3/en/explain-output.html 列名含义id选择标识select_type选择类型…

移动Web学习09-响应式布局bootstrap案例开发

3、综合案例-AlloyTeam移动全端 准备工作 HTML 结构 <title>腾讯全端</title> <link rel"shortcut icon" href"favicon.ico" type"image/x-icon"> <!-- 层叠性&#xff1a;咱们的css 要 层叠 框架的 --> <link rel&…

存储过程的使用(二)

目录 带 OUT 参数的存储过程 输入一个编号&#xff0c;查询数据表 emp中是否有这个编号&#xff0c;如果有返回对应员工姓名&#xff0c;如果没有&#xff0c;则提示没有对应员工 使用 EXEC 命令或者 PRINT执行含有 OUT参数的存储过程 使用 PL/SQL 块编辑程序调用含有 OUT …

JAVA 项目<果园之窗>_2

上节主要是理论流程&#xff0c;这次直接用实际例子过一遍整个流程 目标是向数据库添加一个员工 上述是前端页面&#xff0c;点击保存 浏览器向我后端发送http请求 后端这一部分专门接收employee请求 在这里对http post请求进行转换成JAVA数据&#xff0c;并处理数据&#xff…

Spring Boot后端与Vue前端融合:构建高效旅游管理系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

python_列表和元组

介绍 列表&#xff08;List&#xff09;和元组&#xff08;Tuple&#xff09;是Python中两种不同的数据结构&#xff0c;它们都可以用来存储一系列的元素。下面是它们的主要特点和区别&#xff1a; 列表&#xff08;List&#xff09; 可变性&#xff1a;列表是可变的&…

广西模板厂有哪些厂家

在广西地区&#xff0c;建筑行业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料&#xff0c;需求量逐渐增加。在这个市场中&#xff0c;贵港市能强优品木业有限公司以其卓越的产品质量和丰富的生产经验而闻名&#xff0c;成为广西地区的知名建筑模板生产厂家。 作为一家具…

OpenCV4.9使用 inRange 的阈值操作

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9​​​​基本阈值操作 下一篇&#xff1a;利用OpenCV4.9制作自己的线性滤波器&#xff01; ​目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV cv&#xff1a;&#xff…

【错题集-编程题】大数乘法(模拟 + 高精度乘法)

题目链接&#xff1a;大数乘法_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 根据列竖式运算的过程模拟即可&#xff0c;但是我们可以改进⼀下列竖式的过程&#xff1a; 先计算⽆进位相乘并且相加后的结果&#xff1b;然后再处理进位。 细节&#xff1a;题目所给的两个字符串…

OpenHarmony 视频播放开发教程~

介绍 本示例主要展示了网络视频播放的相关功能。使用ohos.multimedia.avsession等接口实现视频播放的功能。 效果预览 主页 使用说明 点击播放按钮&#xff0c;应用的播放状态发生变化。点击暂停按钮&#xff0c;应用的播放状态开始变化。点击上一个按钮&#xff0c;界面展…

Ribbon 添加快速访问区域

添加快速访问区域挺简单的&#xff0c;实例如下所示&#xff1a; void QtRightFuncDemo::createQuickAccessBar() { RibbonQuickAccessBar* quickAccessBar ribbonBar()->quickAccessBar(); QAction* action quickAccessBar->actionCustomizeButton(); act…

如何查找一篇英文文献的源代码?(论文中没有源代码链接时)如何查找一篇论文的实现代码从而复现论文?

有两个网址&#xff0c;从这两个网址里面能找到论文相关代码&#xff0c;但不确定是不是人家论文里的源代码&#xff0c;但是根据论文实在找不到的情况下&#xff0c;只能试试这两个网址了 1. https://paperswithcode.com/ 2. https://www.catalyzex.com/

团队协作:如何利用 Gitee 实现多人合作项目的版本控制

文章目录 前言一、名词解释1、Git是什么&#xff1f;2、Gitee、GitHub和GitLab 二、操作步骤1.安装Git2.创建Gitee仓库3.用vscode连接仓库4. 克隆远程仓库 总结 前言 在软件开发中&#xff0c;有效地管理代码是至关重要的。Gitee 是一个功能强大的代码托管平台&#xff0c;提供…

Sentinel 流控注解使用

大概原理&#xff1a;通过反射解析注解 SentinelResource信息完成调用&#xff0c;处理方法&#xff0c;类似AOP编程 处理方法的返回类型要保持一致&#xff0c;参数和顺序保持一致&#xff0c; 可以在参数列表最后加 com.alibaba.csp.sentinel.slots.block.BlockException; …

探索C语言数据结构:利用顺序表完成通讯录的实现

在好久之前我就已经学习过顺序表&#xff0c;但是在前几天再次温习顺序表的时候&#xff0c;我惊奇的发现顺序编表可以完成我们日常使用的通讯录的功能&#xff0c;那么今天就来好好通过博客总结一下通讯录如何完成吧。 常常会回顾努力的自己&#xff0c;所以要给自己的努力留…

【JavaSE】浅谈Java异常

前言 本篇文章是对Java异常体系相关内容及部分注意事项的的讲解。 一. 认识异常 在每个人的生命历程中&#xff0c;或多或少都会遇到生病或受伤的情况&#xff0c;比如&#xff1a;皮肤擦伤、感冒、发烧、患上某些传染病等等。不管“病情”严重与否&#xff0c;这些都可以算…

数据链路层协议——以太网协议

目录 要解决的问题 以太网协议 以太网帧格式 MAC地址 MAC地址和IP地址 MTU MTU对IP协议的影响 MTU对UDP协议的影响 MTU对TCP协议的影响 ARP协议 ARP协议格式 ARP协议的工作流程 ARP缓存表 要解决的问题 上一篇我们也说了&#xff0c;数据从应用层一步步封装到了网…