FPGA數碼管動(dòng)態(tài)掃描附件詳細的講解

發(fā)布時(shí)間:2018-9-29 10:29    發(fā)布者:luckyb1
數碼管動(dòng)態(tài)掃描
一、項目背景
led數碼管(LED Segment Displays)是由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,引線(xiàn)已在內部連接完成,只引出它們的各個(gè)筆劃,公共電極。led數碼管常用段數一般為7段,如上圖中的abcdefg,有的還會(huì )有一個(gè)小數點(diǎn),如圖中的h。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png
數碼管要正常顯示,就要用驅動(dòng)電路來(lái)驅動(dòng)數碼管的各個(gè)段碼,從而顯示出我們要的數字。按發(fā)光二極管單元連接方式可分為共陽(yáng)極數碼管和共陰極數碼管。共陽(yáng)數碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數碼管,共陽(yáng)數碼管在應用時(shí)應將公共極COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時(shí),相應字段就點(diǎn)亮,當某一字段的陰極為高電平時(shí),相應字段就不亮。共陰數碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數碼管,共陰數碼管在應用時(shí)應將公共極COM接到地線(xiàn)GND上,當某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應字段就點(diǎn)亮,當某一字段的陽(yáng)極為低電平時(shí),相應字段就不亮。
下表列出了要顯示的數字,以及對應的abcdefg的值。
  
顯示
  
數字
  
共陽(yáng)abcdefg
  
2進(jìn)制
共陽(yáng)abcdefg
  
16進(jìn)制
共陰abcdefg
  
2進(jìn)制
共陰abcdefg
  
16進(jìn)制
0
7’b0000001
7’h01
7’b 1111110
7’h7e
1
7’b 1001111
7’h4f
7’b 0110000
7’h30
2
7’b 0010010
7’h12
7’b 1101101
7’h6d
3
7’b 0000110
7’h06
7’b 1111001
7’h79
4
7’b 1001100
7’h4c
7’b 0110011
7’h33
5
7’b 0100100
7’h24
7’b 1011011
7’h5b
6
7’b 0100000
7’h20
7’b 1011111
7’h3f
7
7’b 0001111
7’h0f
7’b 1110000
7’h70
8
7’b 0000000
7’h00
7’b 1111111
7’h7f
9
7’b 0000100
7’h04
7’b 1111011
7’h7b
例如,共陽(yáng)數碼管中,abcdefg的值分別是1001111時(shí),也就是bc字段亮,其他字段不亮,這時(shí)就顯示了數字“1”。
如果要顯示多個(gè)數碼管,根據數碼管的驅動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類(lèi)。
靜態(tài)驅動(dòng)也稱(chēng)直流驅動(dòng)。靜態(tài)驅動(dòng)是指每個(gè)數碼管的每一個(gè)段碼都由一個(gè)單片機I/O端口進(jìn)行驅動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅動(dòng)。靜態(tài)驅動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅動(dòng)5個(gè)數碼管靜態(tài)顯示則需要5×8=40I/O端口來(lái)驅動(dòng),要知道一個(gè)89S51單片機可用的I/O端口才32個(gè),實(shí)際應用時(shí)必須增加譯碼驅動(dòng)器進(jìn)行驅動(dòng),增加了硬件電路的復雜性。
數碼管動(dòng)態(tài)顯示接口是應用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅動(dòng)是將所有數碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線(xiàn)控制,當要輸出字形碼時(shí),所有數碼管都接收到相同的字形碼,但究竟是哪個(gè)數碼管會(huì )顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開(kāi),該位就顯示出字形,沒(méi)有選通的數碼管就不會(huì )亮。通過(guò)分時(shí)輪流控制各個(gè)數碼管的的COM端,就使各個(gè)數碼管輪流受控顯示,這就是動(dòng)態(tài)驅動(dòng)。在輪流顯示過(guò)程中,每位數碼管的點(diǎn)亮時(shí)間為12ms,由于人的視覺(jué)暫留現象及發(fā)光二極管的余輝效應,盡管實(shí)際上各位數碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會(huì )有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節省大量的I/O端口,而且功耗更低。
明德?lián)P開(kāi)發(fā)板上一共有24位的共陽(yáng)數碼管,也就是說(shuō)一共有8個(gè)共陽(yáng)數碼管。數碼管的配置電路如下。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
圖中的SEG_A,SEG_B~SEG_DP,是段選信號,這些信號都是8個(gè)數碼管共用的。
DIG1~DIG8是位選信號,分別對應8個(gè)數碼管。對應的位選信號為0,就表示將段選信號的值賦給該數碼管。例如DIG30,表示將段選信號SEG_A~SEG_DP的值賦給數碼管3。
SEG_A~SEG_DP,DIG1~DIG8,都是連接到電阻,如下圖。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
由此可見(jiàn),SEG_A~SEG_DP是由SEG0~SEG7產(chǎn)生的,DIG1~DIG8是由DIG_EN1~DIG_EN8產(chǎn)生的。
SEG0~SEG7DIG_EN1~DIG_EN8直接連到FPGAIO上。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png
這些信號與FPGA管腳的對應關(guān)系如下表。
  
信號線(xiàn)
  
信號線(xiàn)
FPGA管腳
SEG_E
SEG0
Y6
SEG_DP
SEG1
W6
SEG_G
SEG2
Y7
SEG_F
SEG3
W7
SEG_D
SEG4
P3
SEG_C
SEG5
P4
SEG_B
SEG6
R5
SEG_A
SEG7
T3
DIG1
DIG_EN1
T4
DIG2
DIG_EN2
V4
DIG3
DIG_EN3
V3
DIG4
DIG_EN4
Y3
DIG5
DIG_EN5
Y8
DIG6
DIG_EN6
W8
DIG7
DIG_EN7
W10
DIG8
DIG_EN8
Y10
也就是說(shuō),FPGA通過(guò)控制上面中的管腳,就控制了數碼管的顯示。
二、設計目標
開(kāi)發(fā)板或者模塊是有 8 位數碼管,本次設計需要使用 8 個(gè)數碼管,實(shí)現數碼管顯示功能,具體要求如下:
復位后,數碼管 0 顯示數字 0;1 秒后,輪到數碼管 1 顯示數字 1;1 秒后,輪到數碼管 2 顯示數字 2;以此類(lèi)推,每隔 1 秒變化,最后是數碼管 7 顯示數字 7。然后再次循環(huán)。
上板效果圖如下圖所示。
上板的演示效果,請登陸網(wǎng)址查看:www.mdy-edu.com/xxxx。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpgfile:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg
三、模塊設計
我們要實(shí)現的功能,概括起來(lái)就是控制8個(gè)數碼管,讓數碼管顯示不同的數字。要控制8個(gè)數碼管,就需要控制位選信號,即FPGA要輸出一個(gè)8位的位選信號,設為seg_sel,其中seg_sel[0]對應數碼管0,seg_sel[1]對應數碼管1,以此類(lèi)推,seg_sel[7]對應數碼管7。
要顯示不同的數字,就需要控制段選信號,不需要用到DP,一共有7根線(xiàn),即FPGA要輸出一個(gè)7位的段選信號,設為seg_ment,seg_ment[6]~segm_ment[0]分別對應數碼管的abcdefg(注意對應順序)。
我們還需要時(shí)鐘信號和復位信號來(lái)進(jìn)行工程控制。
綜上所述,我們這個(gè)工程需要4個(gè)信號,時(shí)鐘clk,復位rst_n,輸出的位選信號seg_sel和輸出的段選信號seg_ment。其中,seg_selseg_ment的對應關(guān)系下如下:
  
信號線(xiàn)
  
信號線(xiàn)
FPGA管腳
內部信號
SEG_E
SEG0
Y6
seg_ment[2]
SEG_DP
SEG1
W6
未用到
SEG_G
SEG2
Y7
seg_ment[0]
SEG_F
SEG3
W7
seg_ment[1]
SEG_D
SEG4
P3
seg_ment[3]
SEG_C
SEG5
P4
seg_ment[4]
SEG_B
SEG6
R5
seg_ment[5]
SEG_A
SEG7
T3
seg_ment[6]
DIG1
DIG_EN1
T4
seg_sel[0]
DIG2
DIG_EN2
V4
seg_sel[1]
DIG3
DIG_EN3
V3
seg_sel[2]
DIG4
DIG_EN4
Y3
seg_sel[3]
DIG5
DIG_EN5
Y8
seg_sel[4]
DIG6
DIG_EN6
W8
seg_sel[5]
DIG7
DIG_EN7
W10
seg_sel[6]
DIG8
DIG_EN8
Y10
seg_sel[7]
我們先分析要實(shí)現的功能,數碼管0顯示數字0,翻譯成信號就是seg_sel的值為8’b1111_1110,seg_ment的值為7’b000_0001。數碼管1顯示數字1,也就是說(shuō)seg_sel的值為8’b1111_1101,seg_ment的值為7’b100_1111。以此類(lèi)推,數碼管7顯示數字7,就是seg_sel的值為8’b0111_1111,seg_ment的值為7’b000_1111。
再留意下,以上都是每隔1秒進(jìn)行變化,并且是8個(gè)數碼管輪流顯示,那么波形示意圖如下圖所示。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image025.png
上圖就是seg_selseg_seg信號的變化波形圖。在顯示第1個(gè)時(shí),seg_sel=8’hfe,seg_ment=7’h01并持續1秒;在第1個(gè)時(shí),seg_sel=8’hfd,seg_ment=7’h4f并持續1秒;以此類(lèi)推,第8個(gè)時(shí),seg_sel=8’h7f,seg_ment=7’h0f并持續1秒。然后又再次重復。
由波形圖可知,我們需要1個(gè)計數器用來(lái)計算1秒的時(shí)間。本工程的工作時(shí)鐘是50MHz,即周期為20ns,計數器計數到1_000_000_000/20=50_000_000個(gè),我們就能知道1秒時(shí)間到了。另外,由于該計數器是不停地計數,永遠不停止的,可以認為加1條件一直有效,可寫(xiě)成:assignadd_cnt==1。綜上所述,該計數器的代碼如下。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image027.jpg
再次觀(guān)察波形圖,我們發(fā)現有第1個(gè),第2個(gè)直到第8個(gè),說(shuō)明這還需要另外一個(gè)計數器來(lái)表示第幾個(gè)。該計數器表示第幾個(gè),自然是完成1秒就加1,因為加1條件可為end_cnt0。該計數器一共要數8次。所以代碼為:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image029.jpg
有了兩個(gè)計數器,我們來(lái)思考輸出信號seg_sel的變化。概括起來(lái),在第1次的時(shí)候輸出值為8’hfe;在第2次的時(shí)候輸出值為8’hfd;以此類(lèi)推,在第8次的時(shí)候輸出值為8’h7f。我們用信號cnt1來(lái)代替第幾次,也就是:當cnt1==0的時(shí)候,輸出值為8’hfe;在cnt1==1的時(shí)候輸出值為8’hfd;以此類(lèi)推,在cnt1==7的時(shí)候輸出值為8’h7f。再進(jìn)一步翻譯成代碼,就變成如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image030.png
讀者有沒(méi)有發(fā)現,上面代碼基本上和文字描述是一模一樣的,這進(jìn)一步展現了verilog是“硬件描述語(yǔ)言”。上面的代碼是能正確實(shí)現seg_sel功能的,從實(shí)現角度和資源角度來(lái)說(shuō),都挺好。但代碼進(jìn)一步概括,可以化簡(jiǎn)如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image031.png
對上面代碼解釋一下,第131行是指先將8’b1向左移位,再取反后的值,賦給seg_sel。假設此時(shí)cnt1等于0,那么8’b1<<0的結果是8’b0000_0001,取反的值為8’hfe;假設cnt1等于3,那么8’b1<<3的結果為8’b000_1000,取反后的結果為8’b1111_0111,即8’hf7。與第一種寫(xiě)法的結果都是相同的。
我們來(lái)思考輸出信號seg_ment的變化。概括起來(lái),在第1次的時(shí)候輸出值為7’h01;在第2次的時(shí)候輸出值為7’h4f;以此類(lèi)推,在第8次的時(shí)候輸出值為7’h0f。我們用信號cnt1來(lái)代替第幾次,也就是:當cnt1==0的時(shí)候,輸出值為7’h01;在cnt1==1的時(shí)候輸出值為7’h4f;以此類(lèi)推,在cnt1==7的時(shí)候輸出值為7’h0f。再進(jìn)一步翻譯成代碼,就變成如下:
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image032.png
上面的代碼正確地實(shí)現了seg_ment的功能,對于本工程說(shuō)已經(jīng)完美。但我們分析一下,就知道上面代碼實(shí)現了類(lèi)似譯碼的功能,將數字設成數碼管顯示的值,代碼里只對0~7進(jìn)行譯碼。很自然的,我先做一個(gè)通用的譯碼模塊,將0~9都進(jìn)行譯碼,以后就方便調用了。例如改成下面代碼。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image033.png
然后我們只要控制好data就能實(shí)現想要在數碼管顯示的數字,如下面代碼。
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image034.png
cnt1=0,則數碼管會(huì )顯示0。當cnt1=1,則數碼管會(huì )顯示1。
在代碼的最后一行寫(xiě)下endmodule
file:///C:/Users/pan/AppData/Local/Temp/msohtmlclip1/01/clip_image035.png      
至此,主體程序已經(jīng)完成。接下來(lái)是將module補充完整。
module的名稱(chēng)定義為my_seg。并且我們已經(jīng)知道該模塊有4個(gè)信號:clk、rst_n、seg_selseg_ment,代碼如下:


FPGA數碼管動(dòng)態(tài)掃描.pdf

1.4 MB, 下載積分: 積分 -1

本文地址:http://selenalain.com/thread-547838-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页