1.項目介紹
學習LED數碼管的工作原理和編程方法,掌握LED數碼管的設計應用。
2.設計要求
利用LED數碼管,在數碼管上顯示0-F字樣。系統框圖如下圖所示。其中,data_in[3:0]為按鍵輸入,seg_n[7:0]為數碼管的段選端,sel_n[7:0]為數碼管的位選端。
3.實驗原理
(1)什么是數碼管
數碼管,也稱作輝光管,是一種可以顯示數字和其他信息的電子設備。它是由8個發光二極管構成,並按照一定的圖形及排列封轉在一起的顯示器件。因為發光二極管的電流是3mA-10mA,故需添加限流電阻。數碼管引腳如下圖所示
上圖兩個com引腳實際是連在一起的,其他引腳的公共端,稱為位選,位選的高低電平決定改數碼管能否點亮,其他管腳為段選信號,決定數碼管上哪個二極管發光。
(2)數碼管基本構造
數碼管連接方式不同分為共陰極數碼管和共陽極數碼管。共陰極就是7段的顯示字碼共用一個電源的負極,是高電平點亮,共陽極就是7段的顯示字碼共用一個電源的正極,是低電平點亮。只要控制其中各段LED的亮滅即可顯示相應的數字、字母或符號。
共陰和共陽極數碼管的內部電路,它們的發光原理是一樣的,只是它們的電源極性不同而已,共陰為所有的LED負極接在一起,共陽為為所有的LED正極接在一起。如下圖為1位數碼管的共陰極和共陽極原理圖:
(3)數碼管顯示原理
要是數碼管顯示數字,有兩個條件:1.是要在公共端加合適的電源(一般每顆LED還需串上合適的電阻,起限流作用);2.要使(a,b,c,d,e,f,g,dp)端接低電平或“0”電平。這樣才能顯示的。
例如下圖的共陽極數碼管,須在公共端接上VCC,(a,b,c,d,e,f,g,dp)端接到控制器的引腳上;如果要使其中一個LED亮時,對應的控制器引腳輸出低電平,即可點亮LED等。
(4)數碼管驅動方式
根據LED數碼管的驅動方式的不同,可以分為靜態式和動態式兩類。
1)靜態驅動也稱直流驅動,靜態驅動是指每個數碼管的每一個段碼都由一個I/O端口進行驅動。靜態驅動的優點是編程簡單,顯示亮度高,缺點是占用I/O端口多。如驅動5個數碼管靜態顯示則需要5×8=40根I/O口來驅動,要知道一個89S51單片機可用的I/O口才32個呢。故實際應用時必須增加驅動器進行驅動,增加了硬體電路的復雜性。
2)動態驅動是將所有數碼管的8個顯示筆划"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制。-當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決於單片機對位元選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮。
通過分時輪流控制各個LED數碼管的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。在輪流顯示過程中,每位數碼管的點亮時間為1~2ms,由於人的視覺暫留現象及發光二極體的余輝效應,盡管實際上各位數碼管並非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示資料,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能夠節省大量的I/O口,而且功耗更低。
4. 設計實現
1 module tube_static_v1( 2 input wire [3:0] data_in, 3 output reg [7:0] seg_n, 4 output wire [7:0] sel_n 5 ); 6 7 parameter NUM0 = 8'b1100_0000, 8 NUM1 = 8'b1111_1001, 9 NUM2 = 8'b1010_0100, 10 NUM3 = 8'b1011_0000, 11 NUM4 = 8'b1001_1001, 12 NUM5 = 8'b1001_0010, 13 NUM6 = 8'b1000_0010, 14 NUM7 = 8'b1111_1000, 15 NUM8 = 8'b1000_0000, 16 NUM9 = 8'b1001_0000, 17 NUMA = 8'b1000_1000, 18 NUMB = 8'b1000_0011, 19 NUMC = 8'b1100_0110, 20 NUMD = 8'b1010_0001, 21 NUME = 8'b1000_0110, 22 NUMF = 8'b1000_1110; 23 24 assign sel_n = 8'b0000_0000; 25 26 always@(*)begin 27 case(data_in) 28 4'b0000: seg_n = NUM0; 29 4'b0001: seg_n = NUM1; 30 4'b0010: seg_n = NUM2; 31 4'b0011: seg_n = NUM3; 32 4'b0100: seg_n = NUM4; 33 4'b0101: seg_n = NUM5; 34 4'b0110: seg_n = NUM6; 35 4'b0111: seg_n = NUM7; 36 4'b1000: seg_n = NUM8; 37 4'b1001: seg_n = NUM9; 38 4'b1010: seg_n = NUMA; 39 4'b1011: seg_n = NUMB; 40 4'b1100: seg_n = NUMC; 41 4'b1101: seg_n = NUMD; 42 4'b1110: seg_n = NUME; 43 4'b1111: seg_n = NUMF; 44 default: seg_n = 8'd0; 45 endcase 46 end 47 48 49 50 //共陽型數碼管,數碼管顯示0-f對應的段選輸出信號 51 // parameter NUM0 = 8'hc0, 52 // NUM1 = 8'hf9, 53 // NUM2 = 8'ha4, 54 // NUM3 = 8'hb0, 55 // NUM4 = 8'h99, 56 // NUM5 = 8'h92, 57 // NUM6 = 8'h82, 58 // NUM7 = 8'hf8, 59 // NUM8 = 8'h80, 60 // NUM9 = 8'h90, 61 // NUMA = 8'h88, 62 // NUMB = 8'h83, 63 // NUMC = 8'hc6, 64 // NUMD = 8'ha1, 65 // NUME = 8'h86, 66 // NUMF = 8'h8e; 67 68 //共陰型數碼管,數碼管顯示0-f對應的段選輸出信號 69 // parameter NUM0 = 8'b1100_0000, 70 // NUM1 = 8'b1111_1001, 71 // NUM2 = 8'b1010_0100, 72 // NUM3 = 8'b1011_0000, 73 // NUM4 = 8'b1001_1001, 74 // NUM5 = 8'b1001_0010, 75 // NUM6 = 8'b1000_0010, 76 // NUM7 = 8'b1111_1000, 77 // NUM8 = 8'b1000_0000, 78 // NUM9 = 8'b1001_0000, 79 // NUMA = 8'b1000_1000, 80 // NUMB = 8'b1000_0011, 81 // NUMC = 8'b1100_0110, 82 // NUMD = 8'b1010_0001, 83 // NUME = 8'b1000_0110, 84 // NUMF = 8'b1000_1110; 85 86 87 //共陰型數碼管,數碼管顯示0-f對應的段選輸出信號 88 //parameter NUM0 = 8'b0011_1111, 89 // NUM1 = 8'b0000_0110, 90 // NUM2 = 8'b0101_1011, 91 // NUM3 = 8'b0100_1111, 92 // NUM4 = 8'b0110_0110, 93 // NUM5 = 8'b0110_1101, 94 // NUM6 = 8'b0111_1101, 95 // NUM7 = 8'b0000_0111, 96 // NUM8 = 8'b0111_1111, 97 // NUM9 = 8'b0110_1111, 98 // NUMA = 8'b0111_0111, 99 // NUMB = 8'b0111_1100, 100 // NUMC = 8'b0011_1001, 101 // NUMD = 8'b0101_1110, 102 // NUME = 8'b0111_1001, 103 // NUMF = 8'b0111_0001; 104 105 106 107 //共陰型數碼管,數碼管顯示0-f對應的段選輸出信號 108 //parameter NUM0 = 8'h3f, 109 // NUM1 = 8'h06, 110 // NUM2 = 8'h5b, 111 // NUM3 = 8'h4f, 112 // NUM4 = 8'h66, 113 // NUM5 = 8'h6d, 114 // NUM6 = 8'h7d, 115 // NUM7 = 8'h07, 116 // NUM8 = 8'h7f, 117 // NUM9 = 8'h6f, 118 // NUMA = 8'h77, 119 // NUMB = 8'h7c, 120 // NUMC = 8'h39, 121 // NUMD = 8'h5e, 122 // NUME = 8'h79, 123 // NUMF = 8'h71; 124 125 endmodule
參考資料如下: