日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

FPGA(5)数码管静态显示与动态显示

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA(5)数码管静态显示与动态显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、數碼管靜態顯示

二、數碼管動態顯示

1、變量定義

2、定時(60us)

3、動態顯示

代碼


一、數碼管靜態顯示

FPGA的數碼管有4位,8段。(位和段都是共陽,即低電平有效

?

?

位選的4位(二進制):分別為第1、2、3、4位數碼管。

段選的8位(二進制):分別為第h、g、f、e、d、c、b、a段。

下面用4位(所有)數碼管,?顯示數字“1”:

//數碼管(共陽:低電平有效)
//FPGA的數碼管:段選和位選都共陽
module my_and(dig, seg);output wire [3:0] dig;		//位選(選定某一個數碼管)
output wire [7:0] seg;	//段選(選定一個數碼管上的小段)assign dig = 4'b0000;	//位選(0000:4個零,共4個數碼管,全選)assign seg = 8'b1111_1001;	//段選(第6、7段為0,顯示的是“1”)endmodule

二、數碼管動態顯示

由于要顯示不同的數字,但是FPGA的數碼管沒辦法單獨操作,只能群操作。
所以只能給每個數碼管不同的頻率,然后依次顯示。
注:這里頻率要給適當:
頻率過快:容易發生混疊;
頻率過慢,變化慢,明顯的流水式顯示。

?頻率過慢(流水式變化):

?

頻率過快(混疊):

?正常頻率:

1、變量定義

module my_and(dig, seg, clk, rst_n);input clk, rst_n;
output reg [7:0] seg;		//段選(選定一個數碼管上的小段)
output reg [3:0] dig;		//位選(選定某一個數碼管)reg [25:0] cnt;
reg [1:0] wei;

2、定時(60us)

計時到60us,使得位變化一次。?

//定時(60us變化位變化一次)
always@ (posedge clk, negedge rst_n)
begin //按下復位鍵(清空)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、動態顯示

這里改變位(dig)和段(seg),段隨位變。?

//動態顯示
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

代碼

//數碼管動態顯示(共陽:低電平有效)
//由于要顯示不同的數字,但是FPGA的數碼管沒辦法單獨操作,只能群操作。
//所以只能給每個數碼管不同的頻率,然后依次顯示
//注:這里頻率要給適當,
//頻率過快:容易發生混疊;
//頻率過慢,變化慢,明顯的流水式顯示
/*對照表
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;		//段選(選定一個數碼管上的小段)
output reg [3:0] dig;		//位選(選定某一個數碼管)reg [25:0] cnt;
reg [1:0] wei;//定時(60us變化位變化一次)
always@ (posedge clk, negedge rst_n)
begin //按下復位鍵(清空)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//動態顯示
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

總結

以上是生活随笔為你收集整理的FPGA(5)数码管静态显示与动态显示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。