0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA學(xué)習(xí)系列:18. 數(shù)碼管的設(shè)計(jì)

FPGA學(xué)習(xí)交流 ? 2018-06-18 19:24 ? 次閱讀

設(shè)計(jì)背景:

數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。數(shù)碼管在我們的許多設(shè)計(jì)中都又用到,數(shù)碼管的顯示原理簡單和顯示效果清晰在我們的工業(yè)中的到了廣泛的應(yīng)用。

數(shù)碼管的應(yīng)用很廣泛,涉及眾多領(lǐng)域,我們就拿數(shù)顯儀表這個(gè)領(lǐng)域來講,數(shù)顯儀表是數(shù)字式顯示儀表的簡稱,顯示器常用的有LED、LCD為顯示元件。

設(shè)計(jì)原理:

本次的設(shè)計(jì)是設(shè)計(jì)一個(gè)數(shù)碼管的顯示模,其設(shè)計(jì)原理圖如下:

image.png

數(shù)碼管顯示分為的動(dòng)態(tài)和靜態(tài)顯示,為了讓人眼可以看清數(shù)碼管的顯示,我們一般驅(qū)動(dòng)數(shù)碼管的頻率為1K - 10K 之間。

顧名思義,七段數(shù)碼管就是使用七段點(diǎn)亮的線段來拼成常見的數(shù)字和某些字母,這種顯示方式我們?cè)?a target="_blank">數(shù)字電路中非常容易見到。再加上右下角顯示的小數(shù)點(diǎn),實(shí)際上一個(gè)顯示單元包括了8根信號(hào)線。根據(jù)電路設(shè)計(jì)的不同,這些信號(hào)線可能高有效也可能低有效。我們通過FPGA控制這些線段的亮滅,達(dá)到顯示效果。

對(duì)于多個(gè)數(shù)碼管的顯示模塊,將每一個(gè)都連接到FPGA的管腳會(huì)耗用大量FPGA的管腳資源。因此我們同樣引入一種類似矩陣鍵盤的掃描方式。任何時(shí)刻我們只使用8根信號(hào)點(diǎn)亮一個(gè)數(shù)碼管,但是8個(gè)數(shù)碼管是隨著時(shí)鐘步調(diào)交替點(diǎn)亮的,只要時(shí)鐘的速度夠快,我們觀察到數(shù)碼管就好像幾個(gè)同時(shí)點(diǎn)亮一樣。

我們的開發(fā)板使用的動(dòng)態(tài)顯示來循環(huán)掃描顯示。其原理圖如下所示:

image.png

如圖所示,我們的開發(fā)板使用的是六位共陽極數(shù)碼管,六個(gè)PNP型三極管分別作為六組數(shù)碼管電源的輸入開關(guān),也就是我們常說的位選信號(hào),PNP三極管為低電平導(dǎo)通,所以我們的位選信號(hào)低有效。在這里,為了節(jié)約FPGA的IO資源,我們把六個(gè)位選信號(hào)連接到了三八譯碼器74HC138D。

從我們的板子硬件原理圖上我們可以看清,我們的數(shù)碼管是紅陽極,就是是給一個(gè)低電平就是點(diǎn)亮數(shù)碼管的一個(gè)段,那么8段全部給8b0000000那么數(shù)碼管顯示的就是8這個(gè)數(shù)字了,我們用的是循環(huán)顯示,是通過sel引腳來選擇哪一個(gè)數(shù)碼管亮,也就是說我們的sel的三位為3b000的時(shí)候也就是選擇第一個(gè)數(shù)碼亮,3b001第二個(gè)數(shù)碼管亮依次類推。

設(shè)計(jì)架構(gòu)圖:

image.png

設(shè)計(jì)代碼:

頂層模塊

0moduleseg_x(clk,rst_n,sel,seg7);//頂層端口

1 inputclk; //輸入

2 inputrst_n;

3 output[2:0]sel; //輸出

4 output[7:0]seg7;

5

6 wire[23:0]num;

7

8 num_in num_in( //例化輸入模塊

9 .clk(clk),

10 .rst_n(rst_n),

11 .num(num)

12 );

13

14 seg seg( //例化數(shù)碼管模塊

15 .clk(clk),

16 .rst_n(rst_n),

17 .sel(sel),

18 .seg7(seg7),

19 .data_in(num)

20 );

21endmodule

設(shè)計(jì)模塊

0moduleseg(clk,rst_n,sel,seg7,data_in);//端口定義

1

2 inputclk;

3 inputrst_n;

4 input[23:0]data_in;//輸入6個(gè)燈的數(shù)據(jù)

5

6 outputreg[2:0]sel;

7 outputreg[7:0]seg7;

8

9 parameters0 =3'b000;

10 parameters1 =3'b001;

11 parameters2 =3'b010;

12 parameters3 =3'b011;

13 parameters4 =3'b100;

14 parameters5 =3'b101;

15

16 `defineT1ms 50_000 //定義1k的計(jì)數(shù)值

17 //`define T1ms 5

18 reg[15:0]count;

19 wireflag;

20 always@(posedgeclk ornegedgerst_n)

21 if(!rst_n)

22 begin

23 count <=15'b0;

24 end

25 else

26 if(count ==`T1ms-1)//計(jì)數(shù)到1MS

27 begin

28 count <=15'b0;

29 end

30 else

31 begin

32 count <=count +1'b1;

33 end

34

35 assignflag =(count ==`T1ms-1)?1'b1:1'b0;//標(biāo)志位賦值

36

37 reg[2:0]state;

38 reg[3:0]num;

39 always@(posedgeclk ornegedgerst_n)

40 if(!rst_n)

41 begin

42 sel <=3'b0;

43 state <=3'b0;

44 num <=4'b0;

45 end

46 else

47 begin

48 case(state)

49 s0:begin

50 if(flag)

51 state <=s1;//亮第一個(gè)燈,給24位數(shù)據(jù)的 4

52 else

53 begin

54 sel <=3'b000;

55 num <=data_in[23:20];

56 end

57 end

58 s1:begin

59 if(flag) ////亮第2個(gè)燈,給24位數(shù)據(jù) 4

60 state <=s2;

61 else

62 begin

63 sel <=3'b001;

64 num <=data_in[19:16];

65 end

66 end

67 s2:begin

68 if(flag) //亮第3個(gè)燈,給24位數(shù)據(jù)的 4

69 state <=s3;

70 else

71 begin

72 sel <=3'b010;

73 num <=data_in[15:12];

74 end

75 end

76 s3:begin

77 if(flag) //亮第4個(gè)燈,給24位數(shù)據(jù)的4

78 state <=s4;

79 else

80 begin

81 sel <=3'b011;

82 num <=data_in[11:8];

83 end

84 end

85 s4:begin

86 if(flag) //亮第5個(gè)燈,給24位數(shù)據(jù)的4

87 state <=s5;

88 else

89 begin

90 sel <=3'b100;

91 num <=data_in[7:4];

92 end

93 end

94 s5:begin

95 if(flag) //亮第6個(gè)燈,給24位數(shù)據(jù)的4

96 state <=s0;

97 else

98 begin

99 sel <=3'b101;

100 num <=data_in[3:0];

101 end

102 end

103 default:state <=s0;

104 endcase

105 end

106

107 always@(*) //數(shù)碼管的譯碼模塊

108 begin

109 case(num)

110 0:seg7 =8'b1100_0000;

111 1:seg7 =8'b1111_1001;

112 2:seg7 =8'b1010_0100;

113 3:seg7 =8'b1011_0000;

114 4:seg7 =8'b1001_1001;

115 5:seg7 =8'b1001_0010;

116 6:seg7 =8'b1000_0010;

117 7:seg7 =8'b1111_1000;

118 8:seg7 =8'b1000_0000;

119 9:seg7 =8'b1001_0000;

120 10:seg7 =8'b1000_1000;

121 11:seg7 =8'b1000_0011;

122 12:seg7 =8'b1100_0110;

123 13:seg7 =8'b1010_0001;

124 14:seg7 =8'b1000_0110;

125 15:seg7 =8'b1000_1110;

126 default:;

127 endcase

128 end

129endmodule

輸入模塊

0modulenum_in(clk,rst_n,num);//端口定義

1 inputclk;

2 inputrst_n;

3

4

5 output[23:0]num;

6

7 assignnum =24'h123456;//給輸入一個(gè)值,便于下次直接調(diào)用

8

9

10

11endmodule

測(cè)試模塊

0`timescale1ns/1ps//時(shí)間精度

1

2moduleseg_tb;

3 regclk; //端口定義

4 regrst_n;

5

6

7 wire[2:0]sel;

8 wire[7:0]seg7;

9

10 initialbegin

11 clk =1'b1;

12 rst_n =1'b0;

13

14 #100.1rst_n =1'b1;

15

16 #200000

17 $stop;

18

19 end

20 always#10clk =~clk;//模擬時(shí)鐘

21

22 seg_x seg_x_dut( //例化頂層模塊

23 .clk(clk),

24 .rst_n(rst_n),

25 .sel(sel),

26 .seg7(seg7)

27 );

28endmodule

仿真:

image.png


在仿真中我們可以看到我們的設(shè)計(jì)是正確的,第一個(gè)燈亮的是f9,也就是也就是對(duì)應(yīng)數(shù)碼管顯示的是1,a4就是2,和我們的輸入是正確的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21796

    瀏覽量

    605523
  • 數(shù)碼管
    +關(guān)注

    關(guān)注

    32

    文章

    1883

    瀏覽量

    91363
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA學(xué)習(xí):led數(shù)碼管控制燈滅設(shè)計(jì)實(shí)驗(yàn)

    對(duì)于數(shù)碼管來說,讀者若是學(xué)過單片機(jī)及其他MCU的話,其實(shí)都知道數(shù)碼管的控制有兩個(gè)信號(hào)是比較重要的,一個(gè)是段選信號(hào),一個(gè)是位選信號(hào),位選信號(hào)是針對(duì)有多個(gè)數(shù)碼管時(shí),需要控制哪一個(gè)數(shù)碼管發(fā)亮
    的頭像 發(fā)表于 09-24 11:52 ?7440次閱讀

    按鍵數(shù)碼管逐漸輸出5fpga數(shù)碼管數(shù)字1~6

    fpga數(shù)碼管數(shù)字從左到右移動(dòng),按下按鍵數(shù)碼管逐漸輸出5fpga數(shù)碼管數(shù)字1~6從左到右移動(dòng)(如123456–>234561->234561
    發(fā)表于 07-29 07:30

    FPGA零基礎(chǔ)學(xué)習(xí)數(shù)碼管驅(qū)動(dòng)設(shè)計(jì)

    的。話不多說,上貨。 數(shù)碼管驅(qū)動(dòng)設(shè)計(jì) 開發(fā)板上擁有一個(gè)六位一體的數(shù)碼管,利用數(shù)碼管可以顯示一些數(shù)據(jù)。 · 硬件介紹 數(shù)碼管共有八個(gè)段選信號(hào),通過電阻直接與
    發(fā)表于 03-09 16:25

    FPGA入門實(shí)現(xiàn)教程之數(shù)碼管動(dòng)態(tài)顯示

    FPGA入門實(shí)現(xiàn)教程之數(shù)碼管動(dòng)態(tài)顯示
    發(fā)表于 11-13 16:25 ?93次下載

    靜態(tài)數(shù)碼管

    靜態(tài)數(shù)碼管靜態(tài)數(shù)碼管靜態(tài)數(shù)碼管靜態(tài)數(shù)碼管
    發(fā)表于 05-13 15:39 ?6次下載

    18b20數(shù)碼管顯示

    18b20數(shù)碼管顯示單片機(jī)控制源代碼分享。
    發(fā)表于 05-20 15:07 ?20次下載

    數(shù)碼管學(xué)習(xí)資料下載

    電子發(fā)燒友網(wǎng)站提供《數(shù)碼管學(xué)習(xí)資料下載.docx》資料免費(fèi)下載
    發(fā)表于 05-26 08:00 ?16次下載

    FPGA_DIY 數(shù)碼管顯示60秒計(jì)時(shí)

    十八筆畫的 FPGA_DIY 數(shù)碼管60秒計(jì)時(shí)。
    的頭像 發(fā)表于 06-20 02:20 ?6188次閱讀

    FPGA DIY 按鍵控制數(shù)碼管顯示

    asean的 FPGA DIY 按鍵控制數(shù)碼管顯示的視頻
    的頭像 發(fā)表于 06-20 00:37 ?7871次閱讀

    單片機(jī)數(shù)碼管顯示原理

    這是比較常見的數(shù)碼管的原理圖,我們板子上一共有6只數(shù)碼管。前邊有了LED小燈的學(xué)習(xí),數(shù)碼管學(xué)習(xí)就會(huì)輕松的多了。從圖1能看出來,
    的頭像 發(fā)表于 09-18 16:46 ?2w次閱讀
    單片機(jī)<b class='flag-5'>數(shù)碼管</b>顯示原理

    深入學(xué)習(xí)基于FPGA數(shù)碼管動(dòng)態(tài)掃描驅(qū)動(dòng)設(shè)計(jì)

    數(shù)碼管作為一種能夠直觀顯示一定數(shù)據(jù)信息的輸出設(shè)備,具有驅(qū)動(dòng)簡單、顯示直觀的特點(diǎn),尤其適合作為 FPGA 系統(tǒng)的輸出設(shè)備。
    的頭像 發(fā)表于 03-14 09:45 ?4252次閱讀
    深入<b class='flag-5'>學(xué)習(xí)</b>基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>數(shù)碼管</b>動(dòng)態(tài)掃描驅(qū)動(dòng)設(shè)計(jì)

    單片機(jī)學(xué)習(xí)----數(shù)碼管顯示原理及應(yīng)用代碼規(guī)劃

    單片機(jī)學(xué)習(xí)----數(shù)碼管顯示原理及應(yīng)用代碼規(guī)劃內(nèi)容:一、數(shù)碼管顯示原理二、如何用萬用表檢測(cè)數(shù)碼管的引腳排列三、數(shù)碼管與單片機(jī)的電氣連接四、
    發(fā)表于 11-10 18:46 ?22次下載
    單片機(jī)<b class='flag-5'>學(xué)習(xí)</b>----<b class='flag-5'>數(shù)碼管</b>顯示原理及應(yīng)用代碼規(guī)劃

    藍(lán)橋杯單片機(jī)學(xué)習(xí)數(shù)碼管

    這里是我的數(shù)碼管學(xué)習(xí)筆記,歡迎大家一起進(jìn)步數(shù)碼管的初始化原理參照以下鏈接(本人寫的博客)初始化原理請(qǐng)務(wù)必多看一下,里面還有關(guān)于P0口的一些信息那么看一下原理圖,了解一下數(shù)碼管的工作原
    發(fā)表于 11-23 17:21 ?7次下載
    藍(lán)橋杯單片機(jī)<b class='flag-5'>學(xué)習(xí)</b>之<b class='flag-5'>數(shù)碼管</b>

    數(shù)碼管驅(qū)動(dòng)學(xué)習(xí)筆記

    電子發(fā)燒友網(wǎng)站提供《數(shù)碼管驅(qū)動(dòng)學(xué)習(xí)筆記.pdf》資料免費(fèi)下載
    發(fā)表于 11-05 17:28 ?0次下載

    基于FPGA實(shí)現(xiàn)數(shù)碼管顯示

    本文介紹數(shù)碼管顯示譯碼基本工作原理及Verilog HDL驅(qū)動(dòng)代碼編寫,進(jìn)一步熟練掌握FPGA入門基礎(chǔ)知識(shí)。
    的頭像 發(fā)表于 10-24 14:44 ?1089次閱讀
    基于<b class='flag-5'>FPGA</b>實(shí)現(xiàn)<b class='flag-5'>數(shù)碼管</b>顯示