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

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

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

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

FPGA技術(shù)實(shí)戰(zhàn) ? 來(lái)源:FPGA技術(shù)實(shí)戰(zhàn) ? 2024-10-24 14:44 ? 次閱讀

引言:本文介紹數(shù)碼管顯示譯碼基本工作原理Verilog HDL驅(qū)動(dòng)代碼編寫(xiě),進(jìn)一步熟練掌握FPGA入門(mén)基礎(chǔ)知識(shí)。

1.概述

數(shù)碼管是顯示屏其中一類(lèi),通過(guò)對(duì)其不同的管腳輸入相對(duì)的電流,會(huì)使其發(fā)亮,從而顯示出數(shù)字能夠顯示 時(shí)間、日期、溫度等所有可用數(shù)字表示的參數(shù)。

圖1:數(shù)碼管

由于它的價(jià)格便宜,使用簡(jiǎn)單,在電器特別是家電領(lǐng)域應(yīng)用極為廣泛,空調(diào)、熱水器、冰箱等等。絕大多數(shù)熱水器用的都是數(shù)碼管,其他家電也用液晶屏與熒光屏。

2. 硬件原理

如圖2所示,數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示)。按能顯示多少個(gè)“8”可分為1 位、2 位、4 位等等數(shù)碼管。

如圖2所示,按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。

wKgaomcZ7OWAJsiDAAKXGrq-7Io046.png

圖2:數(shù)碼管共陰極(左側(cè))和共陽(yáng)極(右側(cè))接法

共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極 COM接到地線 GND 上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮。

共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管,共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM 接到+3.3V(高電平),當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。

wKgZomcZ7OWAAN_6AACgIje-6Gw625.png

圖3:4位數(shù)碼管共陽(yáng)極接法

如圖3所示,4位數(shù)碼管的每段全部連接在一起,如果想動(dòng)態(tài)控制每位數(shù)碼管,就不能將四位數(shù)碼管的COM端連接在一起,必須分別控制每位數(shù)碼管的COM端,即增加位選擇控制信號(hào)。8位數(shù)碼管共陽(yáng)極連接原理圖如圖4所示。

wKgaomcZ7OWAOhhHAAHy2lxLeuM382.png

圖4:8位數(shù)碼管原理圖

如圖4所示,8位數(shù)碼管通過(guò)Sel[7..0]8個(gè)數(shù)據(jù)IO實(shí)現(xiàn)位選擇,通過(guò)Disp[7..0]8個(gè)數(shù)據(jù)IO實(shí)現(xiàn)段選擇。由于FPGA IO口驅(qū)動(dòng)電流能力弱,增加三極管可提高驅(qū)動(dòng)能力。

如圖4所示,基極為低電平,三極管導(dǎo)通,數(shù)碼管被選中,被選中的數(shù)碼管相應(yīng)的段發(fā)光顯示。由于4位數(shù)碼管的的數(shù)據(jù)端(ABCDEFG)是公用的,而每一位的數(shù)碼管的公共陽(yáng)極(COM)是單獨(dú),若某一位數(shù)碼管顯示字符,則這一位的公共陽(yáng)極就要連接到低電平。

3. 軟件實(shí)現(xiàn)

數(shù)碼管顯示有靜態(tài)顯示和動(dòng)態(tài)顯示兩種方式。

在靜態(tài)顯示中,只考慮段選信號(hào)。在不同的時(shí)刻,各個(gè)位選信號(hào)保持不變,并根據(jù)真值表,選擇要顯示的數(shù)字或者字母。由于多位數(shù)碼管段信號(hào)是連在一起的,所以這種情況下每位數(shù)碼管顯示的內(nèi)容是想通過(guò)的。要想每位數(shù)碼管顯示不同內(nèi)容,只能采用動(dòng)態(tài)顯示方式。

在動(dòng)態(tài)顯示中,需要將位選信號(hào)考慮進(jìn)來(lái)。在不同的時(shí)刻,各個(gè)位的位選信號(hào)隨時(shí)改變,并根據(jù)真值表,選擇顯示不同的數(shù)字或者字母。

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

根據(jù)圖4硬件原理圖,數(shù)碼管位選擇信號(hào)為低電平“0”時(shí),同時(shí)數(shù)碼管段為低電平“0”時(shí),點(diǎn)亮數(shù)碼管內(nèi)部LED發(fā)光二極管。

數(shù)碼管靜態(tài)顯示代碼如下所示。

/*************************************************
數(shù)碼管靜態(tài)顯示按鍵計(jì)數(shù)值。
*************************************************/
//位選信號(hào)     
assign segma_sel_o = 8'h00; //使能所有數(shù)碼管位   
//段選信號(hào),關(guān)閉DP點(diǎn)顯示  
always @(posedge sys_clk_i or negedge rst_n_i) begin       
  if(!rst_n_i) begin  
      segma_disp_o  <= 8'b0000001_1;       
    end
  else begin
??????case(cnt)?//按鍵計(jì)數(shù)值??
        4'd0: segma_disp_o  <= 8'b0000001_1; //"0"  
        4'd1: segma_disp_o  <= 8'b1001111_1; //"1"  
        4'd2: segma_disp_o  <= 8'b0010010_1; //"2"
        4'd3: segma_disp_o  <= 8'b0000110_1; //"3"
        4'd4: segma_disp_o  <= 8'b1001100_1; //"4"
        4'd5: segma_disp_o  <= 8'b0100100_1; //"5"
        4'd6: segma_disp_o  <= 8'b0100000_1; //"6"
        4'd7: segma_disp_o  <= 8'b0001111_1; //"7"
        4'd8: segma_disp_o  <= 8'b0000000_1; //"8"
        4'd9: segma_disp_o  <= 8'b0000100_1; //"9"
        4'd10: segma_disp_o <= 8'b0001000_1; //"A"
        4'd11: segma_disp_o <= 8'b1100000_1; //"B"
        4'd12: segma_disp_o <= 8'b0110001_1; //"C"
        4'd13: segma_disp_o <= 8'b1000010_1; //"D"
        4'd14: segma_disp_o <= 8'b0110000_1; //"E"
        4'd15: segma_disp_o <= 8'b0111000_1; //"F"        
      endcase   
    end
end

測(cè)試結(jié)果如下:

3.2 數(shù)碼管動(dòng)態(tài)顯示

數(shù)碼管動(dòng)態(tài)動(dòng)態(tài)掃描顯示,實(shí)際上是利用了兩個(gè)現(xiàn)象:人眼的視覺(jué)暫留特性和數(shù)碼管的余暉效應(yīng)。人眼在觀察景物時(shí),光信號(hào)傳入到大腦神經(jīng)需要經(jīng)過(guò)一段時(shí)間,光的作用結(jié)束之后我們的視覺(jué)影像并不會(huì)立刻的消失,這種殘留的視覺(jué)被稱為后像,這種現(xiàn)象就被稱為視覺(jué)暫留;數(shù)碼管的余暉效應(yīng)是什么意思呢?當(dāng)我們停止向發(fā)光二極管供電時(shí),發(fā)光二極管的亮度仍能夠維持一段時(shí)間。我們的動(dòng)態(tài)掃描利用這兩個(gè)特性就實(shí)現(xiàn)了數(shù)碼管的動(dòng)態(tài)顯示。

(1)數(shù)碼管位掃描控制代碼:編寫(xiě)計(jì)數(shù)器cnt_scanf,周期性產(chǎn)生數(shù)碼管選擇信號(hào)seg_wei_num,根據(jù)seg_wei_num解碼對(duì)應(yīng)的需要使能數(shù)碼管位segma_wei_o。

// 計(jì)數(shù)器,控制數(shù)碼管位
reg [23:0] cnt_scanf;
always @(posedge clk_i or negedge rst_n_i) begin
if(!rst_n_i) begin
    cnt_scanf <= 24'd0;
  end
else begin 
    if(cnt_scanf == timer_scanf_i) 
      cnt_scanf <= 24'd0;
    else
      cnt_scanf <= cnt_scanf + 24'd1;
  end
end


//數(shù)碼管掃描序號(hào)
reg [2:0] segma_wei_num; 
always @(posedge clk_i or negedge rst_n_i) begin
if(!rst_n_i) begin
    segma_wei_num <= 3'd0;
  end
else begin
    if(cnt_scanf == timer_scanf_i)
      segma_wei_num <= segma_wei_num + 3'd1;
    else
      segma_wei_num <= segma_wei_num;
  end
end


//解碼選中的數(shù)碼管
always @(posedge clk_i or negedge rst_n_i) begin
if(!rst_n_i) begin
    segma_wei_o <= 8'b1111_1111;
  end
else begin
    case(segma_wei_num)
      3'd0: segma_wei_o <= 8'b1110_1111; //選中第1個(gè)數(shù)碼管
      3'd1: segma_wei_o <= 8'b1101_1111; //選中第2個(gè)數(shù)碼管
      3'd2: segma_wei_o <= 8'b1011_1111; //選中第3個(gè)數(shù)碼管
      3'd3: segma_wei_o <= 8'b0111_1111; //選中第4個(gè)數(shù)碼管    
      3'd4: segma_wei_o <= 8'b1111_1110; //選中第5個(gè)數(shù)碼管
      3'd5: segma_wei_o <= 8'b1111_1101; //選中第6個(gè)數(shù)碼管
      3'd6: segma_wei_o <= 8'b1111_1011; //選中第7個(gè)數(shù)碼管
      3'd7: segma_wei_o <= 8'b1111_0111; //選中第8個(gè)數(shù)碼管
       default: segma_wei_o <= 8'b1111_1111;  
    endcase
  end
end

(2)數(shù)碼管段顯示控制代碼:根據(jù)當(dāng)前使能的數(shù)碼管位segma_wei_num,獲取當(dāng)前數(shù)碼管位需要顯示的數(shù)據(jù)信息led_duan,然后根據(jù)led_duan數(shù)據(jù)解碼映射到需要顯示的每段發(fā)光二極管,數(shù)碼管DP段單獨(dú)控制。

//獲取當(dāng)前數(shù)碼管位DP段
always @(*) begin
  case(segma_wei_num)
    3'd0: segma_duan_o[0] <= i_led0_data[4]; // 第1個(gè)數(shù)碼管DP段數(shù)據(jù)
    3'd1: segma_duan_o[0] <= i_led1_data[4]; // 第2個(gè)數(shù)碼管DP段數(shù)據(jù)    
    3'd2: segma_duan_o[0] <= i_led2_data[4]; // 第3個(gè)數(shù)碼管DP段數(shù)據(jù)
    3'd3: segma_duan_o[0] <= i_led3_data[4]; // 第4個(gè)數(shù)碼管DP段數(shù)據(jù)    
    3'd4: segma_duan_o[0] <= i_led4_data[4]; // 第5個(gè)數(shù)碼管DP段數(shù)據(jù)
    3'd5: segma_duan_o[0] <= i_led5_data[4]; // 第6個(gè)數(shù)碼管DP段數(shù)據(jù)    
    3'd6: segma_duan_o[0] <= i_led6_data[4]; // 第7個(gè)數(shù)碼管DP段數(shù)據(jù)
    3'd7: segma_duan_o[0] <= i_led7_data[4]; // 第8個(gè)數(shù)碼管DP段數(shù)據(jù)    
  endcase
end


//獲取當(dāng)前數(shù)碼管位其他段數(shù)據(jù)
reg [3:0] led_duan;
always @(*) begin
  case(segma_wei_num)
    3'd0: led_duan <= i_led0_data[3:0]; // 第1個(gè)數(shù)碼管其他段數(shù)據(jù)
    3'd1: led_duan <= i_led1_data[3:0]; // 第2個(gè)數(shù)碼管其他段數(shù)據(jù)    
    3'd2: led_duan <= i_led2_data[3:0]; // 第3個(gè)數(shù)碼管其他段數(shù)據(jù)
    3'd3: led_duan <= i_led3_data[3:0]; // 第4個(gè)數(shù)碼管其他段數(shù)據(jù)    
    3'd4: led_duan <= i_led4_data[3:0]; // 第5個(gè)數(shù)碼管其他段數(shù)據(jù)
    3'd5: led_duan <= i_led5_data[3:0]; // 第6個(gè)數(shù)碼管其他段數(shù)據(jù)    
    3'd6: led_duan <= i_led6_data[3:0]; // 第7個(gè)數(shù)碼管其他段數(shù)據(jù)
    3'd7: led_duan <= i_led7_data[3:0]; // 第8個(gè)數(shù)碼管其他段數(shù)據(jù)    
  endcase
end


//解碼數(shù)碼管段數(shù)據(jù)
always @(*) begin
  case(led_duan)
      4'd0: segma_duan_o[7:1]  <= 7'b0000001; //"0" 
      4'd1: segma_duan_o[7:1]  <= 7'b1001111; //"1"
      4'd2: segma_duan_o[7:1]  <= 7'b0010010; //"2"
      4'd3: segma_duan_o[7:1]  <= 7'b0000110; //"3"
      4'd4: segma_duan_o[7:1]  <= 7'b1001100; //"4"
      4'd5: segma_duan_o[7:1]  <= 7'b0100100; //"5"
      4'd6: segma_duan_o[7:1]  <= 7'b0100000; //"6"
      4'd7: segma_duan_o[7:1]  <= 7'b0001111; //"7"
      4'd8: segma_duan_o[7:1]  <= 7'b0000000; //"8"
      4'd9: segma_duan_o[7:1]  <= 7'b0000100; //"9"
      4'd10: segma_duan_o[7:1] <= 7'b0001000; //"A"
      4'd11: segma_duan_o[7:1] <= 7'b1100000; //"B"
      4'd12: segma_duan_o[7:1] <= 7'b0110001; //"C"
      4'd13: segma_duan_o[7:1] <= 7'b1000010; //"D"
      4'd14: segma_duan_o[7:1] <= 7'b0110000; //"E"
      4'd15: segma_duan_o[7:1] <= 7'b0111000; //"F"    
  endcase
end

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

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603375
  • 顯示屏
    +關(guān)注

    關(guān)注

    28

    文章

    4488

    瀏覽量

    74301
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    32

    文章

    1882

    瀏覽量

    91120

原文標(biāo)題:FPGA入門(mén)基礎(chǔ)之?dāng)?shù)碼管顯示

文章出處:【微信號(hào):FPGA技術(shù)實(shí)戰(zhàn),微信公眾號(hào):FPGA技術(shù)實(shí)戰(zhàn)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    NIOS開(kāi)發(fā)結(jié)構(gòu)基礎(chǔ)構(gòu)思

    我們使用VHDL語(yǔ)言,根據(jù)FPGA管腳與數(shù)碼管和按鍵管腳的連接,通過(guò)一系列的語(yǔ)句控制管腳電平的高低,從而讓FPGA實(shí)現(xiàn)數(shù)碼管
    發(fā)表于 06-05 11:28 ?863次閱讀
    NIOS開(kāi)發(fā)結(jié)構(gòu)基礎(chǔ)構(gòu)思

    數(shù)碼管(靜態(tài)顯示)【匯編版】

    數(shù)碼管(靜態(tài)顯示)【匯編版】數(shù)碼管(靜態(tài)顯示)【匯編版】數(shù)碼管(靜態(tài)顯示)【匯編版】
    發(fā)表于 12-29 15:27 ?0次下載

    動(dòng)態(tài)數(shù)碼管顯示程序

    動(dòng)態(tài)數(shù)碼管顯示程序,動(dòng)態(tài)數(shù)碼管顯示程序,動(dòng)態(tài)數(shù)碼管顯示程序,動(dòng)態(tài)
    發(fā)表于 01-12 14:55 ?60次下載

    數(shù)碼管顯示的多種方式

    1、 實(shí)現(xiàn)3*4按鍵數(shù)碼管顯示
    發(fā)表于 09-06 15:02 ?22次下載

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

    本文主要介紹了fpga按鍵控制數(shù)碼管顯示程序設(shè)計(jì)。數(shù)碼管是由多個(gè)發(fā)光二極封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們
    發(fā)表于 01-16 16:19 ?1.7w次閱讀
    <b class='flag-5'>fpga</b>按鍵控制<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>顯示</b>

    使用FPGA DIY控制板實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示功能

    數(shù)碼管動(dòng)態(tài)顯示——FPGA
    的頭像 發(fā)表于 06-22 01:00 ?4761次閱讀
    使用<b class='flag-5'>FPGA</b> DIY控制板<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>數(shù)碼管</b>動(dòng)態(tài)<b class='flag-5'>顯示</b>功能

    利用FPGA DIY開(kāi)發(fā)板實(shí)現(xiàn)撥碼開(kāi)關(guān)控制靜態(tài)數(shù)碼管顯示

    FPGA diy作業(yè)實(shí)現(xiàn)撥碼開(kāi)關(guān)控制顯示數(shù)碼管0到8的靜態(tài)顯示。
    的頭像 發(fā)表于 06-20 14:07 ?3989次閱讀

    采用FPGA DIY開(kāi)發(fā)板實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示60計(jì)數(shù)

    asean的 FPGA DIY 數(shù)碼管動(dòng)態(tài)顯示60計(jì)數(shù)視頻
    的頭像 發(fā)表于 06-20 12:04 ?3456次閱讀

    利用FPGA DIY開(kāi)發(fā)板控制數(shù)碼管實(shí)現(xiàn)0至9循環(huán)顯示

    asean的 FPGA DIY 數(shù)碼管實(shí)現(xiàn)0至9循環(huán)顯示視頻
    的頭像 發(fā)表于 06-20 09:04 ?6738次閱讀
    利用<b class='flag-5'>FPGA</b> DIY開(kāi)發(fā)板控制<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>實(shí)現(xiàn)</b>0至9循環(huán)<b class='flag-5'>顯示</b>

    采用FPGA DIY開(kāi)發(fā)板實(shí)現(xiàn)撥碼開(kāi)關(guān)控制數(shù)碼管顯示

    asean的 FPGA DIY 撥碼開(kāi)關(guān)控制數(shù)碼管顯示的視頻
    的頭像 發(fā)表于 06-20 04:36 ?4890次閱讀
    采用<b class='flag-5'>FPGA</b> DIY開(kāi)發(fā)板<b class='flag-5'>實(shí)現(xiàn)</b>撥碼開(kāi)關(guān)控制<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>顯示</b>

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

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

    FPGA入門(mén)系列實(shí)驗(yàn)教程之使用FPGA實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示的資料免費(fèi)下載

    實(shí)現(xiàn)開(kāi)發(fā)板上 8 個(gè)數(shù)碼管動(dòng)態(tài)顯示 0~7。通過(guò)這個(gè)實(shí)驗(yàn),掌握采用 Verilog HDL語(yǔ)言編程實(shí)現(xiàn) 7 段數(shù)碼管
    發(fā)表于 06-12 16:32 ?15次下載
    <b class='flag-5'>FPGA</b>入門(mén)系列實(shí)驗(yàn)教程之使用<b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>數(shù)碼管</b>動(dòng)態(tài)<b class='flag-5'>顯示</b>的資料免費(fèi)下載

    基于FPGA數(shù)碼管靜態(tài)顯示

    設(shè)計(jì)一個(gè)8位數(shù)碼管靜態(tài)顯示:采用共陽(yáng)極(低電平點(diǎn)亮)8段數(shù)碼管,控制八位數(shù)碼管讓其以00000000、11111111、22222222一直到FFFFFFFF循環(huán)
    的頭像 發(fā)表于 07-28 10:03 ?3479次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>數(shù)碼管</b>靜態(tài)<b class='flag-5'>顯示</b>

    數(shù)碼管顯示原理及其實(shí)現(xiàn)方式

    在數(shù)字FPGA電路中,作為入門(mén)級(jí)別的外設(shè)除LED燈外,數(shù)碼管算是使用頻率最多、應(yīng)用范圍最廣的一個(gè)核心集成外設(shè)了,因此學(xué)習(xí)數(shù)碼管的使用非常有必要,下面一起來(lái)看看數(shù)碼管
    的頭像 發(fā)表于 10-01 09:53 ?8736次閱讀
    <b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>顯示</b>原理及其<b class='flag-5'>實(shí)現(xiàn)</b>方式