學(xué)做網(wǎng)站都要學(xué)什么專業(yè)外貿(mào)訂單一般在哪個(gè)平臺(tái)接
一、概述
? ? ?在上一篇文章中我們針對(duì)單個(gè)數(shù)碼管的靜態(tài)顯示和動(dòng)態(tài)顯示進(jìn)行了一個(gè)設(shè)計(jì)和實(shí)現(xiàn),這篇文章中我們針對(duì)多個(gè)數(shù)碼管同時(shí)顯示進(jìn)行一個(gè)設(shè)計(jì)。這里和上一篇文章唯一不同的是就是數(shù)碼管位選進(jìn)行了一個(gè)改變,原來是單個(gè)數(shù)碼管的顯示,所以位選就直接賦值就可以了,但在本篇文章中一次性使用了多個(gè)數(shù)碼管,所以在位選信號(hào)中我們就需要進(jìn)行一個(gè)更改。
實(shí)驗(yàn)的重難點(diǎn)
在進(jìn)行多位數(shù)碼管的顯示時(shí),最大的難點(diǎn)就是怎樣選擇每個(gè)數(shù)碼管的位選,以及每個(gè)數(shù)碼管之間顯示的時(shí)間間隔,這時(shí)本次設(shè)計(jì)中所設(shè)計(jì)的兩個(gè)重難點(diǎn),只要掌握著兩個(gè)點(diǎn),設(shè)計(jì)也就變得非常簡(jiǎn)單。
二、工程實(shí)現(xiàn)
1、設(shè)計(jì)文件的編寫
? ? ? ?在針對(duì)上面的兩個(gè)難點(diǎn),我們?cè)诰帉懘a時(shí)拼接語(yǔ)法的方式實(shí)現(xiàn)位選的循環(huán)移動(dòng),將不同數(shù)碼管顯示的值使用位選變量作為條件寫在一個(gè)case語(yǔ)句中,以實(shí)現(xiàn)我們預(yù)設(shè)的012345的字符顯示。這里在對(duì)8段發(fā)光二極管顯示字符進(jìn)行設(shè)計(jì)時(shí),我們和前一篇文章一樣需要先確認(rèn)時(shí)共陰極還是共陽(yáng)極(這里使用的是共陽(yáng)極),如果時(shí)共陰極就是高電平驅(qū)動(dòng),反之,就是低電平驅(qū)動(dòng)。通過給8段對(duì)應(yīng)的二極管進(jìn)行0或者1的賦值,共同組成不同的字符。
module seg0(input clk,input rst_n,output reg [5:0] seg_sel,//位選output reg [7:0] seg_dual//段選
);
localparam ZERO = 8'b1100_0000, //共陽(yáng)極段碼ONE = 8'b1111_1001,TWO = 8'b1010_0100,THREE = 8'b1011_0000,FOUR = 8'b1001_1001,FIVE = 8'b1001_0010;
reg [15:0] cnt;//ms計(jì)數(shù)器
wire add_cnt;
wire end_cnt;
reg [4:0] flag;
wire add_flag;
wire end_flag;always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt<=0;else if(add_cnt)beginif(end_cnt)cnt<=0;elsecnt<=cnt+1'b1;end
end
assign add_cnt=1'b1;
assign end_cnt=add_cnt && (cnt==50_000-1);always @(posedge clk or negedge rst_n)beginif(!rst_n)seg_sel<=6'b111_110;else if(end_cnt)seg_sel<={seg_sel[4:0],seg_sel[5]};
endalways @(posedge clk or negedge rst_n)beginif(!rst_n)seg_dual<=8'b1111_1111;else begincase (seg_sel)6'b111_110:seg_dual<=ZERO ;6'b111_101:seg_dual<=ONE ;6'b111_011:seg_dual<=TWO ; 6'b110_111:seg_dual<=THREE;6'b101_111:seg_dual<=FOUR ;6'b011_111:seg_dual<=FIVE ;default: ;endcaseend
end
endmodule
2、測(cè)試文件編寫
這里很簡(jiǎn)單,我就不進(jìn)行波形仿真了,下面是測(cè)試文件,感興趣的可以去仿真一下,我就直接在后面給出下板驗(yàn)證的結(jié)果。
//定義時(shí)間尺度
`timescale 1ns/1ns
module seg0_tb ;//輸入信號(hào)定義
reg clk;
reg rst_n;
wire [7:0] seg_dual;
wire [5:0] seg_sel;
//模塊例化
seg0 seg_inst(/*input */.clk (clk ),/*input */.rst_n (rst_n ),/*output*/.seg_sel (seg_sel ),/*output*/.seg_dual (seg_dual));
//激勵(lì)信號(hào)產(chǎn)生
parameter CLK_CLY = 20;
//時(shí)鐘
initial clk=1;
always #(CLK_CLY/2)clk=~clk;//復(fù)位
initial beginrst_n= 1'b0;#(CLK_CLY*3);#5;//復(fù)位結(jié)束避開時(shí)鐘上升沿rst_n= 1'b1;
end
endmodule
3、下板驗(yàn)證
圖片中我們可以看到6個(gè)數(shù)碼管從0顯示到5,成功設(shè)計(jì)成多個(gè)數(shù)碼管同時(shí)顯示。