最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

2.6 數(shù)碼管動(dòng)態(tài)掃描--明德?lián)P至簡設(shè)計(jì)法原理與應(yīng)用

2022-12-27 06:38 作者:明德?lián)P易老師  | 我要投稿

需要看對應(yīng)的視頻,請點(diǎn)擊視頻編號:001600000099?

1.至簡原理與應(yīng)用配套的案例文檔


2.實(shí)現(xiàn)開發(fā)板上數(shù)碼管顯示的功能,使8個(gè)數(shù)碼管有規(guī)律的按照時(shí)間進(jìn)行顯示。復(fù)位后,數(shù)碼管0顯示數(shù)字“0”;1秒后,數(shù)碼管1顯示數(shù)字"1";再1秒后,數(shù)碼管2顯示數(shù)字"2";以此類推,每隔疫苗變化一次,最后當(dāng)數(shù)碼管7顯示數(shù)字"7"后再次回到數(shù)碼管0顯示"0";按這樣的規(guī)律循環(huán)。
3. 這是ALTERA入門學(xué)習(xí)案例文檔



第二
階段? 項(xiàng)目實(shí)踐?

led數(shù)碼管(LED Segment Displays)是由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只引出它們的各個(gè)筆劃,公共電極。led數(shù)碼管常用段數(shù)一般為7段,如上圖中的abcdefg,有的還會(huì)有一個(gè)小數(shù)點(diǎn),如圖中的h。



圖?240

數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們要的數(shù)字。按發(fā)光二極管單元連接方式可分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽極為低電平時(shí),相應(yīng)字段就不亮。

下表列出了要顯示的數(shù)字,以及對應(yīng)的abcdefg的值。


例如,共陽數(shù)碼管中,abcdefg的值分別是1001111時(shí),也就是b和c字段亮,其他字段不亮,這時(shí)就顯示了數(shù)字“1”。

如果要顯示多個(gè)數(shù)碼管,根據(jù)數(shù)碼管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類。

靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅(qū)動(dòng),要知道一個(gè)89S51單片機(jī)可用的I/O端口才32個(gè),實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬件電路的復(fù)雜性。

數(shù)碼管動(dòng)態(tài)顯示接口是應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)要輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是哪個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。

明德?lián)P開發(fā)板上一共有2組4位的共陽數(shù)碼管,也就是說一共有8個(gè)共陽數(shù)碼管。數(shù)碼管的配置電路如下。



圖?241

圖中的SEG_A,SEG_B~SEG_DP,是段選信號,這些信號都是8個(gè)數(shù)碼管共用的。

DIG1~DIG8是位選信號,分別對應(yīng)8個(gè)數(shù)碼管。對應(yīng)的位選信號為0,就表示將段選信號的值賦給該數(shù)碼管。例如DIG3為0,表示將段選信號SEG_A~SEG_DP的值賦給數(shù)碼管3。

SEG_A~SEG_DP,DIG1~DIG8,都是連接到電阻,如下圖。



圖?242

由此可見,SEG_A~SEG_DP是由SEG0~SEG7產(chǎn)生的,DIG1~DIG8是由DIG_EN1~DIG_EN8產(chǎn)生的。

而SEG0~SEG7和DIG_EN1~DIG_EN8直接連到FPGA的IO上。



圖?243

這些信號與FPGA管腳的對應(yīng)關(guān)系如下表。


也就是說,F(xiàn)PGA通過控制上面中的管腳,就控制了數(shù)碼管的顯示。


2?設(shè)計(jì)目標(biāo)

開發(fā)板或者模塊是有8位數(shù)碼管,本次設(shè)計(jì)需要使用8個(gè)數(shù)碼管,實(shí)現(xiàn)數(shù)碼管顯示功能,具體要求如下:

復(fù)位后,數(shù)碼管0顯示數(shù)字0;1秒后,輪到數(shù)碼管1顯示數(shù)字1;1秒后,輪到數(shù)碼管2顯示數(shù)字2;以此類推,每隔1秒變化,最后是數(shù)碼管7顯示數(shù)字7。然后再次循環(huán)。

上板效果圖如下圖所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??244




3?
設(shè)計(jì)實(shí)現(xiàn)

3.1?頂層信號

新建目錄:D:mdy_bookmy_seg。在該目錄中,新建一個(gè)名為my_seg.v的文件,并用GVIM打開,開始編寫代碼。

我們要實(shí)現(xiàn)的功能,概括起來就是控制8個(gè)數(shù)碼管,讓數(shù)碼管顯示不同的數(shù)字。要控制8個(gè)數(shù)碼管,就需要控制位選信號,即FPGA要輸出一個(gè)8位的位選信號,設(shè)為seg_sel,其中seg_sel[0]對應(yīng)數(shù)碼管0,seg_sel[1]對應(yīng)數(shù)碼管1,以此類推,seg_sel[7]對應(yīng)數(shù)碼管7。

要顯示不同的數(shù)字,就需要控制段選信號,不需要用到DP,一共有7根線,即FPGA要輸出一個(gè)7位的段選信號,設(shè)為seg_ment,seg_ment[6]~segm_ment[0]分別對應(yīng)數(shù)碼管的abcdefg(注意對應(yīng)順序)。我們還需要時(shí)鐘信號和復(fù)位信號來進(jìn)行工程控制。

綜上所述,我們這個(gè)工程需要4個(gè)信號,時(shí)鐘clk,復(fù)位rst_n,輸出的位選信號seg_sel和輸出的段選信號seg_ment。其中,seg_sel和seg_ment的對應(yīng)關(guān)系下如下:


將module的名稱定義為my_seg。并且我們已經(jīng)知道該模塊有4個(gè)信號:clk、rst_n、seg_sel和seg_ment,代碼如下:


其中clk、rst_n是1位的輸入信號,seg_sel是8位的輸出信號,seg_ment是7位的輸出信號,根據(jù)此,補(bǔ)充輸入輸出端口定義。代碼如下:



3.2?信號設(shè)計(jì)

我們先分析要實(shí)現(xiàn)的功能,數(shù)碼管0顯示數(shù)字0,翻譯成信號就是seg_sel的值為8’b1111_1110,seg_ment的值為7’b000_0001。數(shù)碼管1顯示數(shù)字1,也就是說seg_sel的值為8’b1111_1101,seg_ment的值為7’b100_1111。以此類推,數(shù)碼管7顯示數(shù)字7,就是seg_sel的值為8’b0111_1111,seg_ment的值為7’b000_1111。

再留意下,以上都是每隔1秒進(jìn)行變化,并且是8個(gè)數(shù)碼管輪流顯示,那么波形示意圖如下圖所示。



上圖就是seg_sel和seg_seg信號的變化波形圖。在顯示第1個(gè)時(shí),seg_sel=8’hfe,seg_ment=7’h01并持續(xù)1秒;在第1個(gè)時(shí),seg_sel=8’hfd,seg_ment=7’h4f并持續(xù)1秒;以此類推,第8個(gè)時(shí),seg_sel=8’h7f,seg_ment=7’h0f并持續(xù)1秒。然后又再次重復(fù)。

由波形圖可知,我們需要1個(gè)計(jì)數(shù)器用來計(jì)算1秒的時(shí)間。本工程的工作時(shí)鐘是50MHz,即周期為20ns,計(jì)數(shù)器計(jì)數(shù)到1_000_000_000/20=50_000_000個(gè),我們就能知道1秒時(shí)間到了。另外,由于該計(jì)數(shù)器是不停地計(jì)數(shù),永遠(yuǎn)不停止的,可以認(rèn)為加1條件一直有效,可寫成:assign add_cnt==1。綜上所述,該計(jì)數(shù)器的代碼如下。


再次觀察波形圖,我們發(fā)現(xiàn)有第1個(gè),第2個(gè)直到第8個(gè),說明這還需要另外一個(gè)計(jì)數(shù)器來表示第幾個(gè)。該計(jì)數(shù)器表示第幾個(gè),自然是完成1秒就加1,因?yàn)榧?條件可為end_cnt0。該計(jì)數(shù)器一共要數(shù)8次。所以代碼為:


有了兩個(gè)計(jì)數(shù)器,我們來思考輸出信號seg_sel的變化。概括起來,在第1次的時(shí)候輸出值為8’hfe;在第2次的時(shí)候輸出值為8’hfd;以此類推,在第8次的時(shí)候輸出值為8’h7f。我們用信號cnt1來代替第幾次,也就是:當(dāng)cnt1==0的時(shí)候,輸出值為8’hfe;在cnt1==1的時(shí)候輸出值為8’hfd;以此類推,在cnt1==7的時(shí)候輸出值為8’h7f。再進(jìn)一步翻譯成代碼,就變成如下:


讀者有沒有發(fā)現(xiàn),上面代碼基本上和文字描述是一模一樣的,這進(jìn)一步展現(xiàn)了verilog是“硬件描述語言”。上面的代碼是能正確實(shí)現(xiàn)seg_sel功能的,從實(shí)現(xiàn)角度和資源角度來說,都挺好。但代碼進(jìn)一步概括,可以化簡如下:


對上面代碼解釋一下,第131行是指先將8’b1向左移位,再取反后的值,賦給seg_sel。假設(shè)此時(shí)cnt1等于0,那么8’b1<<0的結(jié)果是8’b0000_0001,取反的值為8’hfe;假設(shè)cnt1等于3,那么8’b1<<3的結(jié)果為8’b000_1000,取反后的結(jié)果為8’b1111_0111,即8’hf7。與第一種寫法的結(jié)果都是相同的。

我們來思考輸出信號seg_ment的變化。概括起來,在第1次的時(shí)候輸出值為7’h01;在第2次的時(shí)候輸出值為7’h4f;以此類推,在第8次的時(shí)候輸出值為7’h0f。我們用信號cnt1來代替第幾次,也就是:當(dāng)cnt1==0的時(shí)候,輸出值為7’h01;在cnt1==1的時(shí)候輸出值為7’h4f;以此類推,在cnt1==7的時(shí)候輸出值為7’h0f。再進(jìn)一步翻譯成代碼,就變成如下:


上面的代碼正確地實(shí)現(xiàn)了seg_ment的功能,對于本工程說已經(jīng)完美。但我們分析一下,就知道上面代碼實(shí)現(xiàn)了類似譯碼的功能,將數(shù)字設(shè)成數(shù)碼管顯示的值,代碼里只對0~7進(jìn)行譯碼。很自然的,我先做一個(gè)通用的譯碼模塊,將0~9都進(jìn)行譯碼,以后就方便調(diào)用了。例如改成下面代碼。


然后我們只要控制好data就能實(shí)現(xiàn)想要在數(shù)碼管顯示的數(shù)字,如下面代碼。


當(dāng)cnt1=0,則數(shù)碼管會(huì)顯示0。當(dāng)cnt1=1,則數(shù)碼管會(huì)顯示1。

在代碼的最后一行寫下endmodule


至此,主體程序已經(jīng)完成。接下來是將module補(bǔ)充完整。


3.3?信號定義

接下來定義信號類型。

cnt0是用always產(chǎn)生的信號,因此類型為reg。cnt0計(jì)數(shù)的最大值為50_000_000,需要用26根線表示,即位寬是26位。add_cnt0和end_cnt0都是用assign方式設(shè)計(jì)的,因此類型為wire。并且其值是0或者1,1個(gè)線表示即可。因此代碼如下:


cnt1是用always產(chǎn)生的信號,因此類型為reg。cnt1計(jì)數(shù)的最大值為7,需要用3根線表示,即位寬是3位。add_cnt1和end_cnt1都是用assign方式設(shè)計(jì)的,因此類型為wire。并且其值是0或者1,1根線表示即可。因此代碼如下:


seg_sel是用always方式設(shè)計(jì)的,因此類型為reg,其一共有8根線,即位寬為8。因此代碼如下:


seg_ ment是用always方式設(shè)計(jì)的,因此類型為reg,其一共有7根線,即位寬為7。因此代碼如下:


如果做了譯碼電路,即用到了data這個(gè)信號。那么data是用assign設(shè)計(jì)的,所以類型為wire,其最大值為9,所以需要4位位寬。代碼如下:


至此,整個(gè)代碼的設(shè)計(jì)工作已經(jīng)完成。下一步是新建工程和上板查看現(xiàn)象。


4?綜合與上板

4.1?新建工程

(1.)點(diǎn)擊File?在File菜單中選擇New Project Wizard....



圖?245

2.彈出Introduction界面選擇next



圖?246

(2.)工程文件夾,工程名,頂層模塊名設(shè)置界面

點(diǎn)擊next之后進(jìn)入此界面

按如下路徑建立文件夾D:/my_seg

點(diǎn)擊“選擇工程文件夾(what is the working directory for this project?)”后面的



鍵找到之前建立的立文件夾D:/my_seg

將工程名命名欄(what is the name of this project)中輸入“my_seg”

在頂層模塊命名欄(what is the name of the top-level design entity for this project?This name is case sensitive and must exactly match the entity name in the design file)中輸入“my_seg”

5.命名完畢后點(diǎn)擊next,在出現(xiàn)的界面選擇empty project。



圖?247



圖?248

(3.)文件添加界面

1.從上一界面進(jìn)入此界面之后點(diǎn)擊



瀏覽文件夾



圖?249

2.找到我們之前寫的.v文件之后選中它并點(diǎn)擊打開



圖?250

之后點(diǎn)擊add添加此.v文件



圖?251

(4.)器件選擇界面

1.在Device family這一項(xiàng)之中選擇?Cyclone IV E

2.在下部的Available device?選擇EP4CE15F23C8這一項(xiàng)

完成后點(diǎn)擊next



圖?252

EDA工具界面(采用默認(rèn)配置即可)

點(diǎn)擊next



圖?253

總結(jié)界面

直接點(diǎn)擊finish即可



圖?254


4.2?綜合

1.點(diǎn)擊



此鍵進(jìn)行編譯



圖?255

之后等待編譯成功,出現(xiàn)以下界面。



圖?256


4.3?配置管腳



圖?257

在菜單欄中,選中Assignments,然后選擇Pin Planner,就會(huì)彈出配置管腳的窗口。



圖?258

在配置窗口最下方中的location一列,參考下表中最右兩列配置好FPGA管腳。


配置完成后,關(guān)閉Pin Planner,軟件自動(dòng)會(huì)保存管腳配置信息。


4.4?再次綜合



圖?259

在菜單欄中,選中Processing,然后選擇Start Compilation,再次對整個(gè)工程進(jìn)行編譯和綜合。



圖?260

出現(xiàn)上面的界面,就說明編譯綜合成功。


4.5?連接開發(fā)板



圖?261


4.6?上板

右鍵Program Device?選擇Open?進(jìn)入燒錄界面



圖?262

2.點(diǎn)擊add file添加.sof文件,點(diǎn)擊start開始燒錄程序



圖?263

Progress這一欄變?yōu)榫G色顯示百分之百successful即代表燒錄成功



圖?264



圖?265









2.6 數(shù)碼管動(dòng)態(tài)掃描--明德?lián)P至簡設(shè)計(jì)法原理與應(yīng)用的評論 (共 條)

分享到微博請遵守國家法律
青浦区| 上思县| 绍兴县| 阜平县| 怀化市| 汝州市| 汉寿县| 漳州市| 闸北区| 新平| 漳州市| 筠连县| 辉南县| 龙口市| 叙永县| 临沭县| 临潭县| 马尔康县| 五家渠市| 从江县| 杂多县| 皋兰县| 喀什市| 三门峡市| 博罗县| 连城县| 成安县| 烟台市| 疏附县| 娄底市| 土默特左旗| 安新县| 南江县| 临安市| 宝兴县| 塘沽区| 龙山县| 芜湖市| 临汾市| 定襄县| 万山特区|