新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Lattice MXO2: 2位7段數(shù)碼管顯示

        Lattice MXO2: 2位7段數(shù)碼管顯示

        作者: 時(shí)間:2023-10-26 來源:電子森林 收藏


        本實(shí)驗(yàn)將會(huì)讓你熟悉上最后一種有意思的外設(shè)七段數(shù)碼管。

        本文引用地址:http://www.104case.com/article/202310/452078.htm

        硬件說明


        數(shù)碼管是工程設(shè)計(jì)中使用很廣的一種顯示輸出器件。一個(gè)7段數(shù)碼管(如果包括右下的小點(diǎn)可以認(rèn)為是8段)分別由a、b、c、d、e、f、g位段和表示小數(shù)點(diǎn)的dp位段組成。實(shí)際是由8個(gè)LED燈組成的,控制每個(gè)LED的點(diǎn)亮或熄滅實(shí)現(xiàn)數(shù)字顯示。通常數(shù)碼管分為共陽極數(shù)碼管和共陰極數(shù)碼管,結(jié)構(gòu)如下圖所示:

        共陽極、共陰極數(shù)碼管

        圖1 共陽極、共陰極數(shù)碼管

        共陰8段數(shù)碼管的信號(hào)端低電平有效,而共陽端接高電平有效。當(dāng)共陽端接高電平時(shí)只要在各個(gè)位段上加上相應(yīng)的低電平信號(hào)就可以使相應(yīng)的位段發(fā)光。比如:要使a段發(fā)光,則在a段信號(hào)端加上低電平即可。共陰極的數(shù)碼管則相反。 可以看到數(shù)碼管的控制和LED的控制有相似之處,在STEP-MXO2 V2開發(fā)板上有兩位共陰極數(shù)碼管,

        數(shù)碼管所有的信號(hào)都連接到的管腳,作為輸出信號(hào)控制。只要輸出這些信號(hào)就能夠控制數(shù)碼管的那一段LED亮或者滅。這樣我們可以通過開關(guān)來控制的輸出,和3. 3-8譯碼器實(shí)驗(yàn)一樣,通過組合邏輯的輸出來控制數(shù)字,下面是的表格

        這其實(shí)是一個(gè)4-16譯碼器,如果我們想數(shù)碼管能顯示16進(jìn)制可以全譯碼,如果只想顯示數(shù)字,可以只利用其中10個(gè)譯碼,下面看看如果用Verilog來實(shí)現(xiàn)。

        Verilog代碼


        // ********************************************************************
        // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
        // ********************************************************************
        // File name    : segment.v
        // Module name  : segment
        // Author       : STEP
        // Description  : segment initial
        // Web          : www.stepfpga.com 
        // 
        // --------------------------------------------------------------------
        // Code Revision History : 
        // --------------------------------------------------------------------
        // Version: |Mod. Date:   |Changes Made:
        // V1.0     |2017/03/02   |Initial ver
        // --------------------------------------------------------------------
        // Module Function:數(shù)碼管的譯碼模塊初始化 
        module LED (seg_data_1,seg_data_2,seg_led_1,seg_led_2); 	
        input [3:0] seg_data_1;						//數(shù)碼管需要顯示0~9十個(gè)數(shù)字,所以最少需要4位輸入做譯碼
        	input [3:0] seg_data_2;						//上第二個(gè)數(shù)碼管
        	output [8:0] seg_led_1;						//在小腳丫上控制一個(gè)數(shù)碼管需要9個(gè)信號(hào) 
        	MSB~LSB=DIG、DP、G、F、E、D、C、B、A
        	output [8:0] seg_led_2;						//在小腳丫上第二個(gè)數(shù)碼管的控制信號(hào)  
        	MSB~LSB=DIG、DP、G、F、E、D、C、B、A         
        	reg [8:0] seg [9:0];                                            
        	//定義了一個(gè)reg型的數(shù)組變量,相當(dāng)于一個(gè)10*9的存儲(chǔ)器,存儲(chǔ)器一共有10個(gè)數(shù),每個(gè)數(shù)有9位寬         
        	
        	initial            
        	                                             
        	//在過程塊中只能給reg型變量賦值,Verilog中有兩種過程塊always和initial
                                                                                //initial和always不同,其中語句只執(zhí)行一次
        	    begin
                      seg[0] = 9'h3f;                                           
                      //對存儲(chǔ)器中第一個(gè)數(shù)賦值9'b00_0011_1111,相當(dāng)于共陰極接地,DP點(diǎn)變低不亮,7段顯示數(shù)字  0
        	      seg[1] = 9'h06;                                           //7段顯示數(shù)字  1
        	      seg[2] = 9'h5b;                                           //7段顯示數(shù)字  2
        	      seg[3] = 9'h4f;                                           //7段顯示數(shù)字  3
        	      seg[4] = 9'h66;                                           //7段顯示數(shù)字  4
        	      seg[5] = 9'h6d;                                           //7段顯示數(shù)字  5
        	      seg[6] = 9'h7d;                                           //7段顯示數(shù)字  6
        	      seg[7] = 9'h07;                                           //7段顯示數(shù)字  7
        	      seg[8] = 9'h7f;                                           //7段顯示數(shù)字  8
        	      seg[9] = 9'h6f;                                           //7段顯示數(shù)字  9
                    end         
                assign seg_led_1 = seg[seg_data_1];                         
                    //連續(xù)賦值,這樣輸入不同四位數(shù),就能輸出對于譯碼的9位輸出
                assign seg_led_2 = seg[seg_data_2]; 
                endmodule

        引腳分配


        小腳丫上正好有4路按鍵和4路開關(guān),可以用來作為輸入信號(hào)分別控制數(shù)碼管的輸出。按照下面表格定義輸入輸出信號(hào)

        信號(hào)引腳信號(hào)引腳
        segdata1(0)M7segdata2(0)L14
        segdata1(1)M8segdata2(1)M13
        segdata1(2)M9segdata2(2)M14
        segdata1(3)M10segdata2(3)N14

        信號(hào)引腳信號(hào)引腳
        segled1(0)A10segled2(0)C12
        segled1(1)C11segled2(1)B14
        segled1(2)F2segled2(2)J1
        segled1(3)E1segled2(3)H1
        segled1(4)E2segled2(4)H2
        segled1(5)A9segled2(5)B12
        segled1(6)B9segled2(6)A11
        segled1(7)F1segled2(7)K1
        segled1(8)C9segled2(8)A12


        配置好以后編譯下載程序。這樣可以通過按鍵或者開關(guān)來控制相應(yīng)的數(shù)碼管顯示數(shù)字。如果你想顯示16進(jìn)制的AbCDeF在數(shù)碼管,可以試試修改程序。這時(shí)候一定要定義一個(gè)16*9的存儲(chǔ)器來初始化。

        小結(jié)


        了解了小腳丫數(shù)碼管的工作原理,在下個(gè)實(shí)驗(yàn)我們將進(jìn)行到有趣的時(shí)序邏輯。首先是如何控制時(shí)鐘分頻。



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 商丘市| 罗平县| 深州市| 全南县| 闽清县| 永清县| 砚山县| 辽源市| 普宁市| 镇雄县| 泽州县| 泰来县| 孝昌县| 孟津县| 八宿县| 离岛区| 长治县| 正蓝旗| 斗六市| 江源县| 精河县| 乌恰县| 丰原市| 察雅县| 湘潭市| 潜江市| 醴陵市| 扎赉特旗| 宜良县| 宿迁市| 南木林县| 杭锦后旗| 株洲县| 乐东| 溧阳市| 富川| 沛县| 汨罗市| 蒲江县| 千阳县| 稷山县|