FPGA(5)数码管静态显示与动态显示
生活随笔
收集整理的這篇文章主要介紹了
FPGA(5)数码管静态显示与动态显示
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
一、數(shù)碼管靜態(tài)顯示
二、數(shù)碼管動(dòng)態(tài)顯示
1、變量定義
2、定時(shí)(60us)
3、動(dòng)態(tài)顯示
代碼
一、數(shù)碼管靜態(tài)顯示
FPGA的數(shù)碼管有4位,8段。(位和段都是共陽(yáng),即低電平有效)
?
?
位選的4位(二進(jìn)制):分別為第1、2、3、4位數(shù)碼管。
段選的8位(二進(jìn)制):分別為第h、g、f、e、d、c、b、a段。
下面用4位(所有)數(shù)碼管,?顯示數(shù)字“1”:
//數(shù)碼管(共陽(yáng):低電平有效)
//FPGA的數(shù)碼管:段選和位選都共陽(yáng)
module my_and(dig, seg);output wire [3:0] dig; //位選(選定某一個(gè)數(shù)碼管)
output wire [7:0] seg; //段選(選定一個(gè)數(shù)碼管上的小段)assign dig = 4'b0000; //位選(0000:4個(gè)零,共4個(gè)數(shù)碼管,全選)assign seg = 8'b1111_1001; //段選(第6、7段為0,顯示的是“1”)endmodule
二、數(shù)碼管動(dòng)態(tài)顯示
由于要顯示不同的數(shù)字,但是FPGA的數(shù)碼管沒(méi)辦法單獨(dú)操作,只能群操作。
所以只能給每個(gè)數(shù)碼管不同的頻率,然后依次顯示。
注:這里頻率要給適當(dāng):
頻率過(guò)快:容易發(fā)生混疊;
頻率過(guò)慢,變化慢,明顯的流水式顯示。
?頻率過(guò)慢(流水式變化):
?
頻率過(guò)快(混疊):
?正常頻率:
1、變量定義
module my_and(dig, seg, clk, rst_n);input clk, rst_n;
output reg [7:0] seg; //段選(選定一個(gè)數(shù)碼管上的小段)
output reg [3:0] dig; //位選(選定某一個(gè)數(shù)碼管)reg [25:0] cnt;
reg [1:0] wei;
2、定時(shí)(60us)
計(jì)時(shí)到60us,使得位變化一次。?
//定時(shí)(60us變化位變化一次)
always@ (posedge clk, negedge rst_n)
begin //按下復(fù)位鍵(清空)if(!rst_n) cnt <= 1'b0; //清空else if(cnt != 12'd3000) //60us(3000*20ns=60us)cnt <= cnt + 1'b1;//加1elsebegincnt <= 1'b0; //清空wei <= wei + 1; //位+1end
end
3、動(dòng)態(tài)顯示
這里改變位(dig)和段(seg),段隨位變。?
//動(dòng)態(tài)顯示
always@(*)
begin case(wei)//22'b00: begindig <= 4'b0111;seg <= 8'b1010_0100;end//52'b01:begindig <= 4'b1011;seg <= 8'b1001_0010;end//02'b10:begindig <= 4'b1101;seg <= 8'b1100_0000;end//82'b11:begindig <= 4'b1110;seg <= 8'b1000_0000;endendcase
end
代碼
//數(shù)碼管動(dòng)態(tài)顯示(共陽(yáng):低電平有效)
//由于要顯示不同的數(shù)字,但是FPGA的數(shù)碼管沒(méi)辦法單獨(dú)操作,只能群操作。
//所以只能給每個(gè)數(shù)碼管不同的頻率,然后依次顯示
//注:這里頻率要給適當(dāng),
//頻率過(guò)快:容易發(fā)生混疊;
//頻率過(guò)慢,變化慢,明顯的流水式顯示
/*對(duì)照表
4'h0 : seg = 8'hc0; //顯示"0"
4'h1 : seg = 8'hf9; //顯示"1"
4'h2 : seg = 8'ha4; //顯示"2"
4'h3 : seg = 8'hb0; //顯示"3"
4'h4 : seg = 8'h99; //顯示"4"
4'h5 : seg = 8'h92; //顯示"5"
4'h6 : seg = 8'h82; //顯示"6"
4'h7 : seg = 8'hf8; //顯示"7"
4'h8 : seg = 8'h80; //顯示"8"
4'h9 : seg = 8'h90; //顯示"9"
4'ha : seg = 8'h88; //顯示"a"
4'hb : seg = 8'h83; //顯示"b"
4'hc : seg = 8'hc6; //顯示"c"
4'hd : seg = 8'ha1; //顯示"d"
4'he : seg = 8'h86; //顯示"e"
4'hf : seg = 8'h8e; //顯示"f"
*/
module my_and(dig, seg, clk, rst_n);input clk, rst_n;
output reg [7:0] seg; //段選(選定一個(gè)數(shù)碼管上的小段)
output reg [3:0] dig; //位選(選定某一個(gè)數(shù)碼管)reg [25:0] cnt;
reg [1:0] wei;//定時(shí)(60us變化位變化一次)
always@ (posedge clk, negedge rst_n)
begin //按下復(fù)位鍵(清空)if(!rst_n) cnt <= 1'b0; //清空else if(cnt != 12'd3000) //60us(3000*20ns=60us)cnt <= cnt + 1'b1;//加1elsebegincnt <= 1'b0; //清空wei <= wei + 1; //位+1end
end//動(dòng)態(tài)顯示
always@(*)
begin case(wei)//22'b00: begindig <= 4'b0111;seg <= 8'b1010_0100;end//52'b01:begindig <= 4'b1011;seg <= 8'b1001_0010;end//02'b10:begindig <= 4'b1101;seg <= 8'b1100_0000;end//82'b11:begindig <= 4'b1110;seg <= 8'b1000_0000;endendcase
endendmodule
總結(jié)
以上是生活随笔為你收集整理的FPGA(5)数码管静态显示与动态显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FPGA(4)晶振与计数器 -- 实现定
- 下一篇: 奇葩错误 -- modelsim波形显示