色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA實現數碼管顯示

FPGA技術實戰 ? 來源:FPGA技術實戰 ? 2024-10-24 14:44 ? 次閱讀

引言:本文介紹數碼管顯示譯碼基本工作原理Verilog HDL驅動代碼編寫,進一步熟練掌握FPGA入門基礎知識。

1.概述

數碼管是顯示屏其中一類,通過對其不同的管腳輸入相對的電流,會使其發亮,從而顯示出數字能夠顯示 時間、日期、溫度等所有可用數字表示的參數

圖1:數碼管

由于它的價格便宜,使用簡單,在電器特別是家電領域應用極為廣泛,空調、熱水器、冰箱等等。絕大多數熱水器用的都是數碼管,其他家電也用液晶屏與熒光屏。

2. 硬件原理

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

如圖2所示,按發光二極管單元連接方式分為共陽極數碼管和共陰極數碼管。

wKgaomcZ7OWAJsiDAAKXGrq-7Io046.png

圖2:數碼管共陰極(左側)和共陽極(右側)接法

共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管,共陰數碼管在應用時應將公共極 COM接到地線 GND 上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。

共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管,共陽數碼管在應用時應將公共極COM 接到+3.3V(高電平),當某一字段發光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。

wKgZomcZ7OWAAN_6AACgIje-6Gw625.png

圖3:4位數碼管共陽極接法

如圖3所示,4位數碼管的每段全部連接在一起,如果想動態控制每位數碼管,就不能將四位數碼管的COM端連接在一起,必須分別控制每位數碼管的COM端,即增加位選擇控制信號。8位數碼管共陽極連接原理圖如圖4所示。

wKgaomcZ7OWAOhhHAAHy2lxLeuM382.png

圖4:8位數碼管原理圖

如圖4所示,8位數碼管通過Sel[7..0]8個數據IO實現位選擇,通過Disp[7..0]8個數據IO實現段選擇。由于FPGA IO口驅動電流能力弱,增加三極管可提高驅動能力。

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

3. 軟件實現

數碼管顯示有靜態顯示和動態顯示兩種方式。

在靜態顯示中,只考慮段選信號。在不同的時刻,各個位選信號保持不變,并根據真值表,選擇要顯示的數字或者字母。由于多位數碼管段信號是連在一起的,所以這種情況下每位數碼管顯示的內容是想通過的。要想每位數碼管顯示不同內容,只能采用動態顯示方式。

在動態顯示中,需要將位選信號考慮進來。在不同的時刻,各個位的位選信號隨時改變,并根據真值表,選擇顯示不同的數字或者字母。

3.1 數碼管靜態顯示

根據圖4硬件原理圖,數碼管位選擇信號為低電平“0”時,同時數碼管段為低電平“0”時,點亮數碼管內部LED發光二極管。

數碼管靜態顯示代碼如下所示。

/*************************************************
數碼管靜態顯示按鍵計數值。
*************************************************/
//位選信號     
assign segma_sel_o = 8'h00; //使能所有數碼管位   
//段選信號,關閉DP點顯示  
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)?//按鍵計數值??
        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

測試結果如下:

3.2 數碼管動態顯示

數碼管動態動態掃描顯示,實際上是利用了兩個現象:人眼的視覺暫留特性和數碼管的余暉效應。人眼在觀察景物時,光信號傳入到大腦神經需要經過一段時間,光的作用結束之后我們的視覺影像并不會立刻的消失,這種殘留的視覺被稱為后像,這種現象就被稱為視覺暫留;數碼管的余暉效應是什么意思呢?當我們停止向發光二極管供電時,發光二極管的亮度仍能夠維持一段時間。我們的動態掃描利用這兩個特性就實現了數碼管的動態顯示。

(1)數碼管位掃描控制代碼:編寫計數器cnt_scanf,周期性產生數碼管選擇信號seg_wei_num,根據seg_wei_num解碼對應的需要使能數碼管位segma_wei_o。

// 計數器,控制數碼管位
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


//數碼管掃描序號
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


//解碼選中的數碼管
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個數碼管
      3'd1: segma_wei_o <= 8'b1101_1111; //選中第2個數碼管
      3'd2: segma_wei_o <= 8'b1011_1111; //選中第3個數碼管
      3'd3: segma_wei_o <= 8'b0111_1111; //選中第4個數碼管    
      3'd4: segma_wei_o <= 8'b1111_1110; //選中第5個數碼管
      3'd5: segma_wei_o <= 8'b1111_1101; //選中第6個數碼管
      3'd6: segma_wei_o <= 8'b1111_1011; //選中第7個數碼管
      3'd7: segma_wei_o <= 8'b1111_0111; //選中第8個數碼管
       default: segma_wei_o <= 8'b1111_1111;  
    endcase
  end
end

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

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


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


//解碼數碼管段數據
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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21729

    瀏覽量

    602986
  • 顯示屏
    +關注

    關注

    28

    文章

    4483

    瀏覽量

    74240
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110074
  • 數碼管
    +關注

    關注

    32

    文章

    1882

    瀏覽量

    91063

原文標題:FPGA入門基礎之數碼管顯示

文章出處:【微信號:FPGA技術實戰,微信公眾號:FPGA技術實戰】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA入門實現教程之數碼管動態顯示

    FPGA入門實現教程之數碼管動態顯示
    發表于 11-13 16:25 ?93次下載

    NIOS開發結構基礎構思

    我們使用VHDL語言,根據FPGA管腳與數碼管和按鍵管腳的連接,通過一系列的語句控制管腳電平的高低,從而讓FPGA實現數碼管
    發表于 06-05 11:28 ?860次閱讀
    NIOS開發結構基礎構思

    數碼管(靜態顯示)【匯編版】

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

    動態數碼管顯示程序

    動態數碼管顯示程序,動態數碼管顯示程序,動態數碼管顯示程序,動態
    發表于 01-12 14:55 ?60次下載

    數碼管顯示的多種方式

    1、 實現3*4按鍵數碼管顯示
    發表于 09-06 15:02 ?22次下載

    fpga按鍵控制數碼管顯示

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

    使用FPGA DIY控制板實現數碼管動態顯示功能

    數碼管動態顯示——FPGA
    的頭像 發表于 06-22 01:00 ?4754次閱讀
    使用<b class='flag-5'>FPGA</b> DIY控制板<b class='flag-5'>實現</b><b class='flag-5'>數碼管</b>動態<b class='flag-5'>顯示</b>功能

    利用FPGA DIY開發板實現撥碼開關控制靜態數碼管顯示

    FPGA diy作業實現撥碼開關控制顯示數碼管0到8的靜態顯示
    的頭像 發表于 06-20 14:07 ?3976次閱讀

    采用FPGA DIY開發板實現數碼管動態顯示60計數

    asean的 FPGA DIY 數碼管動態顯示60計數視頻
    的頭像 發表于 06-20 12:04 ?3432次閱讀

    利用FPGA DIY開發板控制數碼管實現0至9循環顯示

    asean的 FPGA DIY 數碼管實現0至9循環顯示視頻
    的頭像 發表于 06-20 09:04 ?6715次閱讀
    利用<b class='flag-5'>FPGA</b> DIY開發板控制<b class='flag-5'>數碼管</b><b class='flag-5'>實現</b>0至9循環<b class='flag-5'>顯示</b>

    采用FPGA DIY開發板實現撥碼開關控制數碼管顯示

    asean的 FPGA DIY 撥碼開關控制數碼管顯示的視頻
    的頭像 發表于 06-20 04:36 ?4879次閱讀
    采用<b class='flag-5'>FPGA</b> DIY開發板<b class='flag-5'>實現</b>撥碼開關控制<b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>

    FPGA DIY 按鍵控制數碼管顯示

    asean的 FPGA DIY 按鍵控制數碼管顯示的視頻
    的頭像 發表于 06-20 00:37 ?7818次閱讀

    FPGA入門系列實驗教程之使用FPGA實現數碼管動態顯示的資料免費下載

    實現開發板上 8 個數碼管動態顯示 0~7。通過這個實驗,掌握采用 Verilog HDL語言編程實現 7 段數碼管
    發表于 06-12 16:32 ?15次下載
    <b class='flag-5'>FPGA</b>入門系列實驗教程之使用<b class='flag-5'>FPGA</b><b class='flag-5'>實現</b><b class='flag-5'>數碼管</b>動態<b class='flag-5'>顯示</b>的資料免費下載

    基于FPGA數碼管靜態顯示

    設計一個8位數碼管靜態顯示:采用共陽極(低電平點亮)8段數碼管,控制八位數碼管讓其以00000000、11111111、22222222一直到FFFFFFFF循環
    的頭像 發表于 07-28 10:03 ?3444次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>數碼管</b>靜態<b class='flag-5'>顯示</b>

    數碼管顯示原理及其實現方式

    在數字FPGA電路中,作為入門級別的外設除LED燈外,數碼管算是使用頻率最多、應用范圍最廣的一個核心集成外設了,因此學習數碼管的使用非常有必要,下面一起來看看數碼管
    的頭像 發表于 10-01 09:53 ?8498次閱讀
    <b class='flag-5'>數碼管</b>的<b class='flag-5'>顯示</b>原理及其<b class='flag-5'>實現</b>方式
    主站蜘蛛池模板: 久久久国产精品免费A片蜜臀| 成品片a免人看免费| 成人在线观看免费视频| 国产香蕉九九久久精品免费| 久久学生精品国产自在拍| 我年轻漂亮的继坶2中字在线播放| 精品少妇高潮蜜臀涩涩AV| 粗大分开挺进内射| 亚洲中文字幕日本在线观看 | 亚洲精品成人a在线观看| 亲伦在线观看| 伦理片天堂eeuss影院2o12| 国产一卡 二卡三卡四卡无卡乱码视频 | 日本二区三区欧美亚洲国| 久久精品美女| 国产啪精品视频网免费| 爱很烂qvod| 99RE久久精品国产| 中文字幕一区二区三区在线不卡| 亚洲精品一卡二卡三卡四卡2021| 熟女人妻-蜜臀AV-首页| 欧美国产成人在线| 蜜芽TV影院在线视频| 久久xxxx| 精品无码一区二区三区中文字幕 | 蜜桃最新网址| 久久亚洲精品永久网站| 久99re视频9在线观看| 国产中文在线| 国产亚洲精品久久无码98| 国产精品99久久久久久宅男AV| 俄罗斯搜索引擎Yandex推广入口| 9988电影网| xart欧美一区在线播放| 52色擼99热99| 99久久免热在线观看| 91chinesevideo| 99re5久久热在线| ebc5恐怖5a26房间| RUN AWAY无删减全集动漫| 99热这里只有精品8|