Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

这篇具有很好参考价值的文章主要介绍了Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

0.写在最前

一、课程设计要求:

三、名词说明解释

四、Vivado代码实现部分

五、仿真测试程序

六、约束文件

七、开发板结果展示

八、关于改进/扩展

① 增加秒与 0.1s 之间的分隔符“.”号的点亮:

② 取消 0.1s,0.01s 显示,增加小时形成“时分.秒”的显示方式

③ 其它改进/扩展方式,在分和秒之间再加一个小数点:

九、写在最后


0.写在最前

本课程设计项目是我数电课上的课程设计,也听说是一些同学数电实验的自学项目,因为自己专业学习期间通过CSDN获得到很多帮助,因此在做完之后也希望能发到CSDN上,供同学们一起学习进步。在完成本课程设计项目的过程中也借鉴到CSDN其他博主的一些内容,特此感谢博主:初升的太阳LX 的帮助,此处附上原文链接:https://blog.csdn.net/weixin_43977564/article/details/96343437。

那份博客已经是两年前的作品,不很完整,所以我这里也算是将其补全,致敬学长。大佬勿喷~

一、课程设计要求:

(1)计时范围:00.00.00到59.59.99

(2)能够完成复位、启动、暂停功能

(6)用6位七段数码管显示读数

注意事项:

(1)时钟分频:秒表精度为0.01秒,我们使用的FPGA提供50MHZ信号,因此要用到一个500000HZ的分频器。

(2)实现小数点显示:

首先我们知道数码管里有七个led灯,用7bit,但是我们要用八位,在实现小数点的数码管中,将最高位置为1即可。

三、名词说明解释

信号

说明

CLR_L

清零/启动

start_stop

暂停/继续

clk_50M

50MHz时钟信号

clk_s

100Hz信号

disp_data_right0

分(十位)

disp_data_right1

分(个位)

disp_data_right2

秒(十位)

disp_data_right3

秒(个位)

disp_data_right4

0.1 秒

disp_data_right5

0.01 秒

seg

数码管七段码

dig

数码管共阴极位控码

四、Vivado代码实现部分

顶层模块final_top:

module final_top(
    input clk_50M,
    input CLR_L,
    input start_stop,
    output [7:0] seg,
    output [5:0] dig
    );
	 //分频部分
	wire clk_s; //100HZ
 
	clk_div u1(.clk_in(clk_50M),.clk_out(clk_s));
 
	//计数器部分   
    
     	wire[3:0] Q_0,Q_1,Q_2,Q_3,Q_4,Q_5;// 计数器的输出
        wire cy_0,cy_1,cy_2,cy_3,cy_4,cy_5;  //进位信号
 
	            modu10_counter u2(.clk(clk_s),.clr(CLR_L),.EN(start_stop),.cy(cy_0),.Q(Q_0));
                modu10_counter u3(.clk(clk_s),.clr(CLR_L),.EN(cy_0),.cy(cy_1),.Q(Q_1));
                modu10_counter u4(.clk(clk_s),.clr(CLR_L),.EN(cy_1),.cy(cy_2),.Q(Q_2));
                modu6_counter u5(.clk(clk_s),.clr(CLR_L),.EN(cy_2),.cy(cy_3),.Q(Q_3));
                modu10_counter u6(.clk(clk_s),.clr(CLR_L),.EN(cy_3),.cy(cy_4),.Q(Q_4));
                modu6_counter u7(.clk(clk_s),.clr(CLR_L),.EN(cy_4),.cy(cy_5),.Q(Q_5));
                                                
         //调用3位数码管显示模块
          wire[3:0] disp_data_right0,disp_data_right1,disp_data_right2,disp_data_right3,disp_data_right4,disp_data_right5;
          assign disp_data_right0 = Q_0;
          assign disp_data_right1 = Q_1;
          assign disp_data_right2 = Q_2; 
          assign disp_data_right3 = Q_3;
          assign disp_data_right4 = Q_4;
          assign disp_data_right5 = Q_5;     
          dynamic_led6 u8 (
                           .disp_data_right0(disp_data_right0),  
                           .disp_data_right1(disp_data_right1),  
                           .disp_data_right2(disp_data_right2),  
                           .disp_data_right3(disp_data_right3),  
                           .disp_data_right4(disp_data_right4),  
                           .disp_data_right5(disp_data_right5),  
                           .clk(clk_50M),                        
                           .seg(seg),                 
                           .dig(dig)                            
                           );
endmodule

时钟分频模块:

//分频器:
module clk_div(clk_in, clk_out);
	input clk_in;
	output reg clk_out=0;//用reg后面always中需要改变数值
 	reg [24:0] clk_div_cnt=0;
//分频为100Hz的信号
        always @ (posedge clk_in)
        begin
            if (clk_div_cnt == 249999)
            begin
                clk_out = ~clk_out;
                clk_div_cnt = 0;
            end
            else 
                clk_div_cnt = clk_div_cnt+1;
       end
endmodule

计数器模块:用两种计数模块,一种模10,一种模6。

总共六个计数器,1,2,3,5这四个数码管用模10;4,6这两个数码管用模6。

//模10计数器:
module modu10_counter(clk, clr, EN, Q, cy);
	input clk,clr;
	input EN=0;               //使能信号
	output cy;              //计数器进位输出
	output reg [3:0] Q=0;     // 计数器的输出
        
         always @(posedge clk or negedge clr)  //异步清零
              begin
                  if (~clr)       //清零有效
                    begin 
                     Q <= 0;
                   end          //完成清零操作,计数器输出为0
                  else if(EN == 1)  //使能有效
                    begin
                     if (Q == 9)    //计数+1,若低位已经到最大数9
                      begin 
                        Q <= 0;      //输出跳转到最小数0
                        end
                     else Q <= Q+1;       //若输出未到最大数,则只加1
                     end
              end
               //计到最大数9,同时使能有效,输出Cy为1
              assign cy = ((EN == 1) && (Q == 9))?1'b1:1'b0;
endmodule


//模6计数器:
module modu6_counter(clk, clr, EN, Q, cy);
	input clk, clr;
	input EN=0;               //使能信号
	output cy;              //计数器进位输出
	output reg [3:0] Q=0;     // 计数器的输出
        
         always @(posedge clk or negedge clr)  //异步清零
              begin
                  if (~clr)       //清零有效
                    begin 
                     Q <= 0;
                   end          //完成清零操作,计数器输出为0
                  else if(EN == 1)  //使能有效
                    begin
                     if (Q == 5)    //计数+1,若低位已经到最大数5
                      begin 
                        Q <= 0;      //输出跳转到最小数0
                        end
                     else Q <= Q+1;       //若输出未到最大数,则加1
                     end
              end
               //计到最大数5,同时使能有效,输出Cy为1
              assign cy = ((EN == 1) && (Q == 5))?1'b1:1'b0;
endmodule

时钟动态显示模块:

//动态显示模块:
module dynamic_led6(disp_data_right0,disp_data_right1,disp_data_right2,disp_data_right3,disp_data_right4,disp_data_right5,clk,seg,dig);
    input [3:0] disp_data_right0;
    input [3:0] disp_data_right1;
    input [3:0] disp_data_right2;
    input [3:0] disp_data_right3;
    input [3:0] disp_data_right4;
    input [3:0] disp_data_right5;
    input clk;
    output  reg  [7:0] seg;
    output  reg  [5:0] dig;
	
	//分频为1KHz,十分之一倍的最小计时单位
	reg [24:0] clk_div_cnt=0;
	reg clk_div=0;
	always @ (posedge clk)
	begin
		if (clk_div_cnt == 24999)
		begin
			clk_div = ~(clk_div);
			clk_div_cnt = 0;
		end
		else 
		    clk_div_cnt = clk_div_cnt+1;
	end
	//6进制计数器
	reg [2:0] num=0;
	always @ (posedge clk_div)
	begin
		if (num >= 5)
			num = 0;
		else
			num = num+1;
	end
	
	//译码器
	always @ (num)
	begin	
		case(num)
		0:dig = 6'b111110;
		1:dig = 6'b111101;
		2:dig = 6'b111011;
		3:dig = 6'b110111;
        4:dig = 6'b101111;
        5:dig = 6'b011111;
		default: dig = 0;
		endcase
	end
	
	//选择器,确定显示数据
	reg [3:0] disp_data=0;
	always @ (num)
	begin	
		case(num)
		0:disp_data = disp_data_right0;
		1:disp_data = disp_data_right1;
		2:disp_data = disp_data_right2;
		3:disp_data = disp_data_right3;
        4:disp_data = disp_data_right4;
        5:disp_data = disp_data_right5;
		default: disp_data = 0;
		endcase
	end
	//显示译码器
	always@(disp_data)
	begin
		case(disp_data)
		4'h0: seg = 8'h3f;// DP,GFEDCBA
		4'h1: seg = 8'h06;
		4'h2: seg = 8'h5b;
		4'h3: seg = 8'h4f;
		4'h4: seg = 8'h66;
		4'h5: seg = 8'h6d;
		4'h6: seg = 8'h7d;
		4'h7: seg = 8'h07;
		4'h8: seg = 8'h7f;
		4'h9: seg = 8'h6f;
		4'ha: seg = 8'h77;
		4'hb: seg = 8'h7c;
		4'hc: seg = 8'h39;
		4'hd: seg = 8'h5e;
		4'he: seg = 8'h79;
		4'hf: seg = 8'h71;
		default: seg = 0;
		endcase
	end
   
endmodule

五、仿真测试程序

这里主要对seg能否正确计数进行了仿真,如果还想仿真其他功能,可以自行设计。我在仿真这里也卡了一段时间来着,大家如果遇到问题也不必着急,慢慢来就好。我当时的问题是seg始终输出错误,起初我以为是模块太多关系复杂,最后是因为我在有一个模块里没有对reg信号初始化的原因,上面的代码是更改过后的了,应该没有问题。(写在这里也提醒下我自己....┭┮﹏┭┮)

module clk_sim();
    reg clk_50M;
    reg CLR_L=1;    
    reg start_stop=1;
    wire [7:0] seg;
    wire [5:0] dig;
    
    final_top test1(clk_50M,CLR_L,start_stop,seg,dig); 
    initial begin
    clk_50M = 0;
    end
    always #10 clk_50M = ~(clk_50M); //每隔10ns反相一次,即50MHZ
endmodule

这是我的仿真波形:

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

六、约束文件

set_property PACKAGE_PIN G12 [get_ports {dig[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[0]}]
set_property PACKAGE_PIN H13 [get_ports {dig[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[1]}]
set_property PACKAGE_PIN M12 [get_ports {dig[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[2]}]
set_property PACKAGE_PIN N13 [get_ports {dig[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[3]}]
set_property PACKAGE_PIN N14 [get_ports {dig[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[4]}]
set_property PACKAGE_PIN N11 [get_ports {dig[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[5]}]

set_property PACKAGE_PIN L13 [get_ports {seg[7]}]
set_property PACKAGE_PIN M14 [get_ports {seg[6]}]
set_property PACKAGE_PIN P13 [get_ports {seg[5]}]
set_property PACKAGE_PIN K12 [get_ports {seg[4]}]
set_property PACKAGE_PIN K13 [get_ports {seg[3]}]
set_property PACKAGE_PIN L14 [get_ports {seg[2]}]
set_property PACKAGE_PIN N12 [get_ports {seg[1]}]
set_property PACKAGE_PIN P11 [get_ports {seg[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[0]}]

set_property PACKAGE_PIN D4 [get_ports {clk_50M}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_50M}]

set_property PACKAGE_PIN F3 [get_ports {CLR_L}]
set_property IOSTANDARD LVCMOS33 [get_ports {CLR_L}]

set_property PACKAGE_PIN H4 [get_ports {start_stop}]
set_property IOSTANDARD LVCMOS33 [get_ports {start_stop}]
 

七、开发板结果展示

我们通过与互联网在线秒表器进行了比较,在线秒表器如图所示:

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

互联网在线秒表器时间精度为0.001毫秒,非常适合用来检验我们的课设结果。

检验手法如下:考虑到比较过程中可以通过计算不同时刻二者的差值来检验误差是否增大,所以二者是否同时开始并不重要。

我们通过拍摄不同时刻的对比图来进行误差分析,首先记录了11s,36s,1min,2min四个时刻,如下图所示:

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

整理如下表:

互联网在线秒表器t1(0.001s)

课程设计秒表计时器t2(0.01s)

差值Δt/s

(t2-t1)

误差/s

(t2-t1-Δt)

平均误差/s

11.387

11.57

0.193

0

0.027

36.598

36.80

0.202

0.009

76.033

76.24

0.207

0.014

151.502

151.78

0.278

0.085

在0.1s级以下,且除第四项读数较为模糊导致的相对误差较大以外,误差变化不大,平均误差更是非常小,达到了0.027s,短时间内人眼无法分辨,可以认为达到了很好的精度。

进而,考虑到所记录时刻均在较为窄的时间内,可能误差还不足以体现,故下面又记录了7分、14分、19分和31分的四个时刻,类比上述分析方法进行分析,记录结果如下图所示:

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

整理如下表(仅记录秒.毫秒):

互联网在线秒表器t1(0.001s)

课程设计秒表计时器t2(0.01s)

差值Δt/s

(t2-t1)

误差/s

(t2-t1-Δt)

平均误差/s

46.781

46.96

0.179

0

0.014

53.900

54.09

0.190

0.011

18.527

18.73

0.203

0.024

04.330

04.53

0.200

0.021

同样均在0.1s级以下,相比反而误差均有所减小,平均误差更是减少了一半,变为0.014s。

综上,课程设计秒表计时器体现出的误差特征为:在较小或较大的时间尺度内,均能有效地保证其精度,误差均在0.1s数量级内;但同时,随着时间的增长,体现为误差有逐渐减小的趋势,在量程范围内不断趋近互联网在线秒表器的趋势。

通过查阅相关文献[1],总结可能的原因如下:

“由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。”

对应到课程设计中,本次设计电路中存在计数器以及译码器,必然伴随着多路信号的同时跳变,因为电路有些复杂,各支路到达终点的延时必然有很多不一致,会出现不少毛刺现象。

对应的改进措施如下:

对于计数器毛刺现象,可以改用格雷码计数消除计数型毛刺;对于动态扫描译码模块毛刺现象,可以采用锁存法或采样法消除毛刺。

八、关于改进/扩展

① 增加秒与 0.1s 之间的分隔符“.”号的点亮:

对应原设计程序只需修改动态显示模块,使得位码DIG4,段码DP即秒(个位)信号所在七段数码管小数点位置点亮即可。

故增加一个八位小数点信号decimal_point,改进后dynamic_led6程序如下:

module dynamic_led6(disp_data_right0,disp_data_right1,disp_data_right2,disp_data_right3,disp_data_right4,disp_data_right5,clk,seg,dig);
    input [3:0] disp_data_right0;
    input [3:0] disp_data_right1;
    input [3:0] disp_data_right2;
    input [3:0] disp_data_right3;
    input [3:0] disp_data_right4;
    input [3:0] disp_data_right5;
    input clk;
    output  reg  [7:0] seg;
    output  reg  [5:0] dig;
	
	//分频为1KHz
	reg [24:0] clk_div_cnt=0;
	reg clk_div=0;
	always @ (posedge clk)
	begin
		if (clk_div_cnt == 24999)
		begin
			clk_div = ~(clk_div);
			clk_div_cnt = 0;
		end
		else 
		    clk_div_cnt = clk_div_cnt+1;
	end
	//6进制计数器
	reg [2:0] num=0;
	always @ (posedge clk_div)
	begin
		if (num >= 5)
			num = 0;
		else
			num = num+1;
	end
	
	//译码器
	always @ (num)
	begin	
		case(num)
		0:dig = 6'b111110;
		1:dig = 6'b111101;
		2:dig = 6'b111011;
		3:dig = 6'b110111;
        4:dig = 6'b101111;
        5:dig = 6'b011111;
		default: dig = 0;
		endcase
	end
	
	//选择器,确定显示数据
	reg [3:0] disp_data=0;
	reg [7:0] decimal_point=0;
	always @ (num)
	begin	
	    decimal_point = 0;
		case(num)
		0:disp_data = disp_data_right0;
		1:disp_data = disp_data_right1;
		2:
            begin
            disp_data = disp_data_right2;
            decimal_point = 8'h80;
            end
		3:disp_data = disp_data_right3;
        4:disp_data = disp_data_right4;
        5:disp_data = disp_data_right5;
		default: disp_data = 0;
		endcase
	end
	//显示译码器
	always@(disp_data)
	begin
		case(disp_data)
		4'h0: seg = 8'h3f + decimal_point;// DP,GFEDCBA
		4'h1: seg = 8'h06 + decimal_point;
		4'h2: seg = 8'h5b + decimal_point;
		4'h3: seg = 8'h4f + decimal_point;
		4'h4: seg = 8'h66 + decimal_point;
		4'h5: seg = 8'h6d + decimal_point;
		4'h6: seg = 8'h7d + decimal_point;
		4'h7: seg = 8'h07 + decimal_point;
		4'h8: seg = 8'h7f + decimal_point;
		4'h9: seg = 8'h6f + decimal_point;
		4'ha: seg = 8'h77 + decimal_point;
		4'hb: seg = 8'h7c + decimal_point;
		4'hc: seg = 8'h39 + decimal_point;
		4'hd: seg = 8'h5e + decimal_point;
		4'he: seg = 8'h79 + decimal_point;
		4'hf: seg = 8'h71 + decimal_point;
		default: seg = 0;
		endcase
	end
   
endmodule

对应结果呈现为:

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

② 取消 0.1s,0.01s 显示,增加小时形成“时分.秒”的显示方式

对应此时分频应从100HZ变到1HZ,从模6、模10、模6、模10、模10、模10的计数器分布变为模10、模10、模6、模10、模6、模10的计数器分布。

因为设计模块中采用了顶层模块例化多个设计模块的方式,故改进显示方式只需在顶层模块中修改例化以及修改分频模块即可,较为方便简单,此处不再赘述,仅以第一种改进方式做主要阐述与展示。

③ 其它改进/扩展方式,在分和秒之间再加一个小数点:

使用①方式改进确实能够有效区分出秒和0.1秒之间的关系,但根据其改进结果同时又发现分和秒之间的关系在开发板上体现的并不清晰,故考虑进一步改进,即在分和秒之间再添加一个小数点。

该改进方法对应修改原设计程序十分简单,仅需要将①中所修改好的dynamic_led6程序中的选择器部分的这条语句:

4:disp_data = disp_data_right4;

修改为:

4:begin

  disp_data = disp_data_right4;

  decimal_point = 8'h80;

end

即可。

对应改进结果呈现为:

Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)

可以很方便地区分出“分.秒.毫秒”,以及对应②中显示出“时.分.秒”的格式,改进效果较为明显,视觉效果更加舒适。

九、写在最后

初来乍到,水平有限,大家多多指正呀!向电子科大uu们挥挥手,很高兴来到CSDN o(* ̄▽ ̄*)ブ,让我们一起学习,一起努力叭!ε=( o`ω′)ノ

补充:若对uu们有用,请在报告中注明参考来源哦~养成习惯,投币点赞(bushi

引用格式如下:https://blog.csdn.net/witch_poster/article/details/118068350文章来源地址https://www.toymoban.com/news/detail-458986.html

到了这里,关于Vivado设计秒表计时器实现00分00.00秒到59分59.99秒的计时(verilog语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机通过计时器实现倒计时

    软件 : Keil5+Proteus7 元件 : AT89C51 * 1,7SEG-MPX2-CA * 1

    2024年02月16日
    浏览(49)
  • Qt实现计时器

    一、样图 二、代码 mainwidow.h mainwindow.cpp main.cpp ui_mainwindow.h

    2024年02月07日
    浏览(29)
  • 基于AT89C51单片机的倒数计时器设计

    1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的数字电压表,设计的系统实用性强、操作简单,实现了智能化、数字化。 本设计采用单片机为主控芯片,结合 周边 电路组成 LED 彩灯的 闪烁 控制系统器,用来控制 红色 的LED 闪烁 发光,实现 LED灯在倒计时结束后

    2024年02月03日
    浏览(46)
  • Redis的实现四:事件循环和计时器

           我们的服务器缺少了一个 内容 : 超时 。每个网络应用程序都需要处理超时,因为网络的另一边可能会消失。不要只进行持续的IO操作,如读/写需要超时,但启动空闲的TCP连接也是一个好主意。要实现超时,必须修改事件循环,因为轮询是唯一被阻塞的东西。 我们的

    2024年01月16日
    浏览(36)
  • Unity_计时器实现的四种方式

    在Unity中,可以使用Time.deltaTime来计算游戏运行的时间。可以在每一帧的Update()函数中使用它,将它乘以一个时间因子,得到累计的时间。例如: 相信系统学习过Unity的人都听说过协程,使用协程可以轻而易举的来实现计时的操作 Unity中的InvokeRepeating函数可以在一定时间间隔内重

    2024年02月09日
    浏览(33)
  • 嵌入式单片机——60秒计时器的实现

    1.设计秒计时器,要求实现60秒计时,用2位LED数码管显示。 2.按键K1,实现秒表的停止和启动。

    2024年02月03日
    浏览(36)
  • 【Unity每日一记】Unity中的计时器——4种方法的实现

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年02月06日
    浏览(32)
  • Java 多线程6——计时器Timer的使用 + 详细代码模拟实现 + 代码优化

    本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下! 本篇文章为大家带来的仍然是多线程编程,计时器是许多场景都会应用到的一个非常方便快捷实用的类。 🦉定时器,顾

    2024年02月04日
    浏览(37)
  • vue-element-table表格实现每一条数据绑定定时器实现倒计时或者持续时间

    前言 最近在开发中遇到一个需求,每一条数据前端计算处理时间,或者是倒计时时间。 第一表格不可能展示所有数据,所以我们需要当前时间和数据库开始时间获取一个初始值。 第二我们需要把定时器持续时间绑给每一条数据中,方便展示,和操作时候传递给后端存储。

    2024年01月20日
    浏览(45)
  • WPF计时器功能

    本文实现WPF的计时器功能是通过system.timers.timer这个组件实现的。现在网上相关的资料有很多,我只是在自己的工作中刚好遇到要实现这个功能,中间也走了很多的弯路,不停的参考网上现有的资源,终于实现了基本的定时功能。希望本文可以帮助到您,让您花更少的时间来完

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包