久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
數碼管的動態刷新Verilog源程序
[打印本頁]
作者:
strelizia
時間:
2019-5-28 17:15
標題:
數碼管的動態刷新Verilog源程序
六位八段數碼管,最后兩位自加首先循環,同時在到特定的數字調用蜂鳴器“嗶~”
0.png
(9.93 KB, 下載次數: 134)
下載附件
2019-6-1 04:43 上傳
源程序如下:
module Project_Segled2
(
//輸入端口
CLK_50M,CLK_1S,RST_N,
//輸出端口
SEG_DATA,SEG_EN,FM
);
//---------------------------------------------------------------------------
//-- 外部端口聲明
//---------------------------------------------------------------------------
input CLK_50M; //時鐘的端口,開發板用的50M晶振
input CLK_1S;
input RST_N; //復位的端口,低電平復位
output reg [ 5:0] SEG_EN; //數碼管使能端口
output reg [ 7:0] SEG_DATA; //數碼管數據端口(查看管腳分配文檔或者原理圖)
output reg FM; //控制蜂鳴器
//---------------------------------------------------------------------------
//-- 內部端口聲明
//---------------------------------------------------------------------------
reg [15:0] time_cnt; //用來控制數碼管閃爍頻率的定時計數器
reg [15:0] time_cnt_n; //time_cnt的下一個狀態
reg [ 2:0] led_cnt; //用來控制數碼管亮滅及顯示數據的顯示計數器
reg [ 2:0] led_cnt_n; //led_cnt的下一個狀態
reg [3:0] gewei; // 后兩位的個位
reg [3:0] shiwei; //后兩位的十位
reg [7:0] GE_DATA; //個位數碼管數據
reg [7:0] SHI_DATA; //十位數碼管數據
reg [3:0] gewei_n; // 后兩位的個位
reg beep_reg; //用來控制蜂鳴器發聲的寄存器
reg beep_reg_n; //beep_reg的下一個狀態
//設置定時器的時間為1ms,計算方法為 (1*10^3)us / (1/50)us 50MHz為開發板晶振
parameter SET_TIME_1MS = 16'd50_000;
parameter freq = 16'd47774;
initial
begin
gewei = 4'h5; //初始化個位十位的值
shiwei=4'h0;
gewei_n=4'h5;
end
//---------------------------------------------------------------------------
//-- 邏輯功能實現
//---------------------------------------------------------------------------
//時序電路,用來給time_cnt寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
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; //如果到達1ms,定時計數器將會被清零
else
time_cnt_n = time_cnt + 27'h1; //如果未到1ms,定時計數器將會繼續累加
end
//時序電路,用來給led_cnt寄存器賦值
always @ (posedge CLK_1S or negedge RST_N)
begin
if(!RST_N ) //判斷復位
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
//組合電路,判斷時間,實現控制顯示計數器累加
always @ (negedge CLK_1S)
begin
gewei_n = gewei + 1'h1; //如果到達1s,計數器進行累加
end
//時序電路,用來給gewei寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
led_cnt <= 3'h0; //初始化led_cnt值
else
led_cnt <= led_cnt_n; //用來給led_cnt賦值
end
//組合電路,判斷時間,實現控制顯示計數器累加
always @ (posedge CLK_50M)
begin
if(time_cnt == SET_TIME_1MS) //判斷1Ms時間
led_cnt_n = led_cnt + 1'h1; //如果到達1ms,計數器進行累加
else
led_cnt_n = led_cnt; //如果未到1ms,計數器保持不變
end
//實現gewei數據到數碼管碼數的一致
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
//實現shiwei數據到數碼管數的一致
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
//組合電路,實現數碼管的數字顯示
always @ (posedge CLK_50M)
begin
case (led_cnt)
3'b000 : SEG_DATA = 8'b00000111; //當計數器為0時,數碼管將會顯示 "7"
3'b001 : SEG_DATA = 8'b00000110; //當計數器為1時,數碼管將會顯示 "1"
3'b010 : SEG_DATA = 8'b01100110; //當計數器為2時,數碼管將會顯示 "4"
3'b011 : SEG_DATA = 8'b00111111; //當計數器為3時,數碼管將會顯示 "0"
3'b100 : SEG_DATA = SHI_DATA; //當計數器為4時,數碼管將會顯示 "十位"
3'b101 : SEG_DATA = GE_DATA; //當計數器為5時,數碼管將會顯示 "個位"
default: SEG_DATA = 8'b10111111;
endcase
end
always @ (posedge CLK_50M)
begin
case (led_cnt)
3'b000 : SEG_EN = 6'b111110; //當計數器為0時,數碼管SEG1顯示
3'b001 : SEG_EN = 6'b111101; //當計數器為1時,數碼管SEG2顯示
3'b010 : SEG_EN = 6'b111011; //當計數器為2時,數碼管SEG3顯示
3'b011 : SEG_EN = 6'b110111; //當計數器為3時,數碼管SEG4顯示
3'b100 : SEG_EN = 6'b101111; //當計數器為4時,數碼管SEG5顯示
3'b101 : SEG_EN = 6'b011111; //當計數器為5時,數碼管SEG6顯示
default: SEG_EN = 6'b111111;
endcase
end
//控制蜂鳴器
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
beep_reg <= 1'b0; //初始化beep_reg值
else
beep_reg <= beep_reg_n; //用來給beep_reg賦值
end
//組合電路,判斷頻率,使蜂鳴器發聲
always @ (posedge CLK_50M)
begin
if(time_cnt == freq) //判斷分頻值
beep_reg_n = ~beep_reg; //改變蜂鳴器的狀態
else
beep_reg_n = beep_reg; //蜂鳴器的狀態保持不變
end
always @ (posedge CLK_50M)
begin
if(gewei==4'h5 && shiwei==4'h0)
FM = beep_reg;
end
endmodule
復制代碼
所有資料51hei提供下載:
final.zip
(3.37 MB, 下載次數: 10)
2019-5-28 17:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本一区二区不卡
|
国产福利在线视频
|
日本黄色短片
|
超碰在线人人干
|
免费亚洲视频
|
久久色视频
|
二区三区视频
|
成av人电影在线
|
国产在线精品一区二区三区
|
欧美精品综合
|
精品国产乱码久久久久久影片
|
欧美一级二级视频
|
国产免费xxx
|
免费av在线
|
在线免费观看黄视频
|
国产成人在线一区二区
|
亚洲永久
|
日韩国产专区
|
99re热精品视频
|
在线一区
|
亚洲一区久久久
|
天天看天天摸天天操
|
av免费网站在线观看
|
成人免费一区二区三区牛牛
|
天堂色网
|
在线中文字幕亚洲
|
99精品国产一区二区三区
|
国产午夜精品视频
|
超碰人人人
|
欧美三级免费观看
|
欧美亚洲综合久久
|
国产亚洲精品区
|
在线观看视频福利
|
欧美精品一区二区三区四区
|
se婷婷
|
亚洲欧美在线观看
|
国产一区二区影院
|
色网在线观看
|
国产成人精品免高潮在线观看
|
国产精品亚洲一区二区三区在线观看
|
国产欧美一区二区三区在线看蜜臀
|