亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
數(shù)碼管的動態(tài)刷新Verilog源程序
[打印本頁]
作者:
strelizia
時間:
2019-5-28 17:15
標(biāo)題:
數(shù)碼管的動態(tài)刷新Verilog源程序
六位八段數(shù)碼管,最后兩位自加首先循環(huán),同時在到特定的數(shù)字調(diào)用蜂鳴器“嗶~”
0.png
(9.93 KB, 下載次數(shù): 134)
下載附件
2019-6-1 04:43 上傳
源程序如下:
module Project_Segled2
(
//輸入端口
CLK_50M,CLK_1S,RST_N,
//輸出端口
SEG_DATA,SEG_EN,FM
);
//---------------------------------------------------------------------------
//-- 外部端口聲明
//---------------------------------------------------------------------------
input CLK_50M; //時鐘的端口,開發(fā)板用的50M晶振
input CLK_1S;
input RST_N; //復(fù)位的端口,低電平復(fù)位
output reg [ 5:0] SEG_EN; //數(shù)碼管使能端口
output reg [ 7:0] SEG_DATA; //數(shù)碼管數(shù)據(jù)端口(查看管腳分配文檔或者原理圖)
output reg FM; //控制蜂鳴器
//---------------------------------------------------------------------------
//-- 內(nèi)部端口聲明
//---------------------------------------------------------------------------
reg [15:0] time_cnt; //用來控制數(shù)碼管閃爍頻率的定時計數(shù)器
reg [15:0] time_cnt_n; //time_cnt的下一個狀態(tài)
reg [ 2:0] led_cnt; //用來控制數(shù)碼管亮滅及顯示數(shù)據(jù)的顯示計數(shù)器
reg [ 2:0] led_cnt_n; //led_cnt的下一個狀態(tài)
reg [3:0] gewei; // 后兩位的個位
reg [3:0] shiwei; //后兩位的十位
reg [7:0] GE_DATA; //個位數(shù)碼管數(shù)據(jù)
reg [7:0] SHI_DATA; //十位數(shù)碼管數(shù)據(jù)
reg [3:0] gewei_n; // 后兩位的個位
reg beep_reg; //用來控制蜂鳴器發(fā)聲的寄存器
reg beep_reg_n; //beep_reg的下一個狀態(tài)
//設(shè)置定時器的時間為1ms,計算方法為 (1*10^3)us / (1/50)us 50MHz為開發(fā)板晶振
parameter SET_TIME_1MS = 16'd50_000;
parameter freq = 16'd47774;
initial
begin
gewei = 4'h5; //初始化個位十位的值
shiwei=4'h0;
gewei_n=4'h5;
end
//---------------------------------------------------------------------------
//-- 邏輯功能實(shí)現(xiàn)
//---------------------------------------------------------------------------
//時序電路,用來給time_cnt寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復(fù)位
time_cnt <= 16'h0; //初始化time_cnt值
else
time_cnt <= time_cnt_n; //用來給time_cnt賦值
end
always @ (posedge CLK_50M)
begin
if(time_cnt == SET_TIME_1MS) //判斷1ms時間
time_cnt_n = 16'h0; //如果到達(dá)1ms,定時計數(shù)器將會被清零
else
time_cnt_n = time_cnt + 27'h1; //如果未到1ms,定時計數(shù)器將會繼續(xù)累加
end
//時序電路,用來給led_cnt寄存器賦值
always @ (posedge CLK_1S or negedge RST_N)
begin
if(!RST_N ) //判斷復(fù)位
begin
gewei = 4'h5; //初始化個位十位的值
shiwei=4'h0;
end
else if(gewei==4'b1001)
begin
gewei=4'h0;
shiwei=shiwei+1'h1; //如果個位到十就歸0且讓十位加一
end
else if(shiwei==4'b0100)
begin
shiwei=4'h0; //判斷十位的值如果到4就歸0
end
else
gewei=gewei_n;
end
//組合電路,判斷時間,實(shí)現(xiàn)控制顯示計數(shù)器累加
always @ (negedge CLK_1S)
begin
gewei_n = gewei + 1'h1; //如果到達(dá)1s,計數(shù)器進(jìn)行累加
end
//時序電路,用來給gewei寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復(fù)位
led_cnt <= 3'h0; //初始化led_cnt值
else
led_cnt <= led_cnt_n; //用來給led_cnt賦值
end
//組合電路,判斷時間,實(shí)現(xiàn)控制顯示計數(shù)器累加
always @ (posedge CLK_50M)
begin
if(time_cnt == SET_TIME_1MS) //判斷1Ms時間
led_cnt_n = led_cnt + 1'h1; //如果到達(dá)1ms,計數(shù)器進(jìn)行累加
else
led_cnt_n = led_cnt; //如果未到1ms,計數(shù)器保持不變
end
//實(shí)現(xiàn)gewei數(shù)據(jù)到數(shù)碼管碼數(shù)的一致
always @ (posedge CLK_50M)
begin
case(gewei)
4'b0000:GE_DATA= 8'b00111111; //0
4'b0001:GE_DATA= 8'b00000110; //1
4'b0010:GE_DATA= 8'b01011011; //2
4'b0011:GE_DATA= 8'b01001111; //3
4'b0100:GE_DATA= 8'b01100110; //4
4'b0101:GE_DATA= 8'b01101101; //5
4'b0110:GE_DATA= 8'b01111101; //6
4'b0111:GE_DATA= 8'b00000111; //7
4'b1000:GE_DATA= 8'b01111111; //8
4'b1001:GE_DATA= 8'b01101111; //9
default:GE_DATA=8'b10111111;
endcase
end
//實(shí)現(xiàn)shiwei數(shù)據(jù)到數(shù)碼管數(shù)的一致
always @ (posedge CLK_50M)
begin
case(shiwei)
4'b0000:SHI_DATA= 8'b00111111; //0
4'b0001:SHI_DATA= 8'b00000110; //1
4'b0010:SHI_DATA= 8'b01011011; //2
4'b0011:SHI_DATA= 8'b01001111; //3
4'b0100:SHI_DATA= 8'b01100110; //4
default:SHI_DATA=8'b10111111;
endcase
end
//組合電路,實(shí)現(xiàn)數(shù)碼管的數(shù)字顯示
always @ (posedge CLK_50M)
begin
case (led_cnt)
3'b000 : SEG_DATA = 8'b00000111; //當(dāng)計數(shù)器為0時,數(shù)碼管將會顯示 "7"
3'b001 : SEG_DATA = 8'b00000110; //當(dāng)計數(shù)器為1時,數(shù)碼管將會顯示 "1"
3'b010 : SEG_DATA = 8'b01100110; //當(dāng)計數(shù)器為2時,數(shù)碼管將會顯示 "4"
3'b011 : SEG_DATA = 8'b00111111; //當(dāng)計數(shù)器為3時,數(shù)碼管將會顯示 "0"
3'b100 : SEG_DATA = SHI_DATA; //當(dāng)計數(shù)器為4時,數(shù)碼管將會顯示 "十位"
3'b101 : SEG_DATA = GE_DATA; //當(dāng)計數(shù)器為5時,數(shù)碼管將會顯示 "個位"
default: SEG_DATA = 8'b10111111;
endcase
end
always @ (posedge CLK_50M)
begin
case (led_cnt)
3'b000 : SEG_EN = 6'b111110; //當(dāng)計數(shù)器為0時,數(shù)碼管SEG1顯示
3'b001 : SEG_EN = 6'b111101; //當(dāng)計數(shù)器為1時,數(shù)碼管SEG2顯示
3'b010 : SEG_EN = 6'b111011; //當(dāng)計數(shù)器為2時,數(shù)碼管SEG3顯示
3'b011 : SEG_EN = 6'b110111; //當(dāng)計數(shù)器為3時,數(shù)碼管SEG4顯示
3'b100 : SEG_EN = 6'b101111; //當(dāng)計數(shù)器為4時,數(shù)碼管SEG5顯示
3'b101 : SEG_EN = 6'b011111; //當(dāng)計數(shù)器為5時,數(shù)碼管SEG6顯示
default: SEG_EN = 6'b111111;
endcase
end
//控制蜂鳴器
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復(fù)位
beep_reg <= 1'b0; //初始化beep_reg值
else
beep_reg <= beep_reg_n; //用來給beep_reg賦值
end
//組合電路,判斷頻率,使蜂鳴器發(fā)聲
always @ (posedge CLK_50M)
begin
if(time_cnt == freq) //判斷分頻值
beep_reg_n = ~beep_reg; //改變蜂鳴器的狀態(tài)
else
beep_reg_n = beep_reg; //蜂鳴器的狀態(tài)保持不變
end
always @ (posedge CLK_50M)
begin
if(gewei==4'h5 && shiwei==4'h0)
FM = beep_reg;
end
endmodule
復(fù)制代碼
所有資料51hei提供下載:
final.zip
(3.37 MB, 下載次數(shù): 10)
2019-5-28 17:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1