Proteus 7段数码管显示库的使用和介绍

版权申诉
0 下载量 79 浏览量 更新于2024-11-23 收藏 9KB RAR 举报
资源摘要信息:"7段显示器在Proteus中的仿真库文件" 在信息技术领域中,尤其是电子工程及电路设计仿真方面,Proteus软件是一款非常知名的电子电路仿真工具。它允许用户设计电路图,并在此基础上进行电路仿真测试,而无需制作实际电路板,大大节省了设计周期和成本。Proteus广泛应用于电子学术研究、电路设计教学和电子产品的快速原型设计。 本次提供的文件资源“7 Seg Display SM_proteus_”涉及了Proteus的一个特定用户库文件,即“User Library-7 Seg Display SM.3ds”。这个用户库文件针对的是7段显示器的仿真模型。7段显示器是一种数字显示设备,通常用于显示数字和某些字符。它由七个发光二极管(LEDs)组成,这些二极管被排列成一个“8”字形的图案。通过控制这七个LED的点亮组合,可以表示从0到9的数字和一些字母,如在一些计数器、数字时钟、数字电压表等设备中常见。 在Proteus中,通过使用7段显示器的仿真库,设计者可以更方便地进行模拟和测试,无需添加实际的7段显示器到设计中。这样做既节省了时间,又降低了成本,因为设计者可以迅速看到他们的电路设计在软件环境中是否能正确地驱动7段显示器来显示期望的数字或字符。 此资源中的“Librerias para proteus”(Proteus的库文件),意味着“User Library-7 Seg Display SM.3ds”文件是Proteus软件所使用的库文件格式。库文件能够被Proteus软件识别并整合到其庞大的元件库中。这样用户在设计电路时,就可以直接在库中找到7段显示器模型,并将其拖拽至设计图纸上,完成相关连接,进行仿真测试。 在使用库文件进行设计时,需要注意的是,设计者必须确保所使用的Proteus软件版本兼容该库文件。不同的Proteus版本可能在库文件的格式或接口上有细微差别,因此直接使用不兼容的库文件可能会导致错误或者无法加载。 此外,库文件的使用也需要注意版权问题。如果库文件是由第三方提供的,设计者应当确认其使用许可或购买相关的授权,以便合法使用。否则,可能会侵犯知识产权,引起不必要的法律纠纷。 总结来说,本次提供的“7 Seg Display SM_proteus_”资源为Proteus用户提供了7段显示器的仿真模型,方便了电路设计者在Proteus软件中进行电路设计的仿真测试。该资源通过扩展Proteus的库文件来实现,是电路设计教学、研究和开发中的一项有力工具。设计者使用该库文件时,需确保Proteus版本兼容并注意版权问题,以便合法合规地应用于项目设计中。
2021-02-25 上传

module race_game ( input clk , input rst , input [3:0]key , output [6:0]seg_led_1 , output [6:0]seg_led_2 , ); reg clk_divided; reg [6:0] seg[9:0]; reg [23:0] cnt; integer k; localparam PERIOD = 12000000; // 12MHz时钟信号的周期数 always @(posedge clk) begin if (!rst) begin cnt <= 0; clk_divided <= 0; end else begin if (cnt >= PERIOD-1) begin cnt <= 0; clk_divided <= ~clk_divided; end else begin cnt <= cnt + 1; end end end initial begin seg[0] = 7'h3f; // 0 seg[1] = 7'h06; // 1 seg[2] = 7'h5b; // 2 seg[3] = 7'h4f; // 3 seg[4] = 7'h66; // 4 seg[5] = 7'h6d; // 5 seg[6] = 7'h7d; // 6 seg[7] = 7'h07; // 7 seg[8] = 7'h7f; // 8 seg[9] = 7'h6f; // 9 end always @ (posedge clk_divided) begin if(!rst) begin for(k=10;k>0;k=k-1) begin case(k) 1'd0:begin seg_led_1<=seg[0];seg_led_2<=seg[0]; end 1'd1:begin seg_led_1<=seg[0];seg_led_2<=seg[1]; end 1'd2:begin seg_led_1<=seg[0];seg_led_2<=seg[2]; end 1'd3:begin seg_led_1<=seg[0];seg_led_2<=seg[3]; end 1'd4:begin seg_led_1<=seg[0];seg_led_2<=seg[4]; end 1'd5:begin seg_led_1<=seg[0];seg_led_2<=seg[5]; end 1'd6:begin seg_led_1<=seg[0];seg_led_2<=seg[6]; end 1'd7:begin seg_led_1<=seg[0];seg_led_2<=seg[7]; end 1'd8:begin seg_led_1<=seg[0];seg_led_2<=seg[8]; end 1'd9:begin seg_led_1<=seg[0];seg_led_2<=seg[9]; end 1'd10:begin seg_led_1<=seg[1];seg_led_2<=seg[0]; end endcase end seg_led_1<=seg[0]; seg_led_2<=seg[0]; end end always @ (posedge clk) begin if(!rst)begin if(k == 0) case(key) 4'd1:begin seg_led_1<=seg[0];seg_led_2<=seg[1]; end 4'd2:begin seg_led_1<=seg[0];seg_led_2<=seg[2]; end 4'd4:begin seg_led_1<=seg[0];seg_led_2<=seg[3]; end 4'd8:begin seg_led_1<=seg[0];seg_led_2<=seg[4]; end endcase end end endmodule 帮我检查一下这段代码的错误

2023-05-31 上传

module seg_decode( input wire clk, input wire rst_n, input wire [4:0] seg_value_1, input wire [4:0] seg_value_2, output reg [5:0] sel, output reg [7:0] seg ); parameter CNT_20US = 10'd999; reg [3:0] number; wire [2:0] change_l; wire [2:0] change_h; reg [9:0] cnt; //计时模块 always@(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 10'd0; end else if(cnt == CNT_20US)begin cnt <= 10'd0; end else begin cnt <= cnt + 10'd1; end end always @(posedge clk or negedge rst_n) begin if(!rst_n)begin sel <= 6'b011111; end else if(cnt == CNT_20US)begin sel <= {sel[0],sel[5:1]}; end else begin sel <= sel; end end always @(posedge clk or negedge rst_n) begin if(!rst_n)begin number <= 4'd0; end else begin case(sel) 6'b011111: number <= seg_value_1 % 10; 6'b101111: number <= seg_value_1 / 10; 6'b110111: number <= seg_value_2 % 10; 6'b111011: number <= seg_value_2 / 10; 6'b111101: begin if(seg_value_2 < seg_value_1) number <= 4'd15; else number <= change_l; end 6'b111110: begin if(seg_value_2 < seg_value_1) number <= 4'd14; else number <= change_h; end default:number <= 4'd0; endcase end end always @(posedge clk or negedge rst_n) begin if(!rst_n)begin seg <= 8'b1100_0000; end else begin case(number) 4'd0: seg <= 8'b1100_0000; 4'd1: seg <= 8'b1111_1001; 4'd2: seg <= 8'b1010_0100; 4'd3: seg <= 8'b1011_0000; 4'd4: seg <= 8'b1001_1001; 4'd5: seg <= 8'b1001_0010; 4'd14: seg <= 8'b1000_0110; 4'd15: seg <= 8'b1100_1110; default:seg <= 8'b1100_0000; endcase end end assign change_l = (seg_value_2 - seg_value_1) % 10; assign change_h = (seg_value_2 - seg_value_1) / 10; sel_drive sel_drive_u ( .clk (clk), .rst_n (rst_n), .sel_2 () ); endmodule

2023-06-09 上传

`timescale 1n/1ps module shiyan3( input clk, input rst, output seg_pi, output [7:0] seg_data ); reg[31:0]time_cnt; reg[7:0]num_cnt; always@(posedge clk or negedge rst) begin if(rst==1'b0) begin time_cnt<=32'd0; end else if(time_cnt==32'd49_000_000) begin time_cnt<=0; if(num_cnt==8'd10) begin num_cnt<=0; end else begin num_cnt<=num_cnt+1; end end else begin time_cnt<=time_cnt+32'd1; end end reg[7:0] seg_get_data; always@(posedge clk) begin if(num_cnt==8'd0) begin seg_get_data<=8'b1100_0000; end else if(num_cnt==8'd1) begin seg_get_data<=8'b1111_1001; end else if(num_cnt==8'd2) begin seg_get_data<=8'b1010_0100; end else if(num_cnt==8'd3) begin seg_get_data<=8'b1011_0000; end else if(num_cnt==8'd4) begin seg_get_data<=8'b1001_1001; end else if(num_cnt==8'd5) begin seg_get_data<=8'b1001_0010; end else if(num_cnt==8'd6) begin seg_get_data<=8'b1000_0010; end else if(num_cnt==8'd7) begin seg_get_data<=8'b1111_1000; end else if(num_cnt==8'd8) begin seg_get_data<=8'b1000_0000; end else if(num_cnt==8'd9) begin seg_get_data<=8'b1001_0000; end end assign seg_data=seg_get_data; endmodule 上述代码只能实现一位十进制的数字时钟,参考以上代码要求根据cyclone IV E 的FPGA实验板功能,设计四位数码管显示的数字时钟;要求:数字时钟能够准确计时并显示;开机显示00;具备控制功能按键有3个:清零、暂停、计时开始。数码管片四个选接口:DIG1,DIG2,DIG3,DIG4,数码管八个段选接口:SEG0,SEG1,SEG2,SEG3,SEG4,SEG5,SEG6,SEG7,给出Verilog代码

2023-05-31 上传