




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
小梅哥和你一起深入學(xué)習(xí)FPGA之?dāng)?shù)碼管動(dòng)態(tài)掃描(上)關(guān)鍵詞:FPGA,ARM在電子系統(tǒng)中,通常都需要有輸出設(shè)備來(lái)輸出或顯示一定的信息,以指示當(dāng)前系統(tǒng)運(yùn)行的狀態(tài)。在以單片機(jī)和ARM為主的電子系統(tǒng)中,液晶屏是理想的輸出設(shè)備。而FPGA則因?yàn)槠洫?dú)特的硬件結(jié)構(gòu),如果用RTL級(jí)電路來(lái)驅(qū)動(dòng)彩色液晶屏來(lái)顯示一定的數(shù)據(jù),勢(shì)必是非常不劃算的選擇,而且驅(qū)動(dòng)也極為復(fù)雜。數(shù)碼管作為一種能夠直觀顯示一定數(shù)據(jù)信息的輸出設(shè)備,具有驅(qū)動(dòng)簡(jiǎn)單,顯示直觀的特點(diǎn),尤其適合作為FPGA系統(tǒng)的輸出設(shè)備。本節(jié),小梅哥就將和大家一起進(jìn)行數(shù)碼管驅(qū)動(dòng)的開(kāi)發(fā)。
實(shí)驗(yàn)?zāi)康?/p>
實(shí)現(xiàn)6位7段數(shù)碼管的驅(qū)動(dòng),待顯示數(shù)據(jù)以BCD格式輸入。數(shù)碼管刷新時(shí)鐘為1KHz。實(shí)驗(yàn)使用了4個(gè)獨(dú)立按鍵作為輸入,通過(guò)按鍵來(lái)改變需要數(shù)碼管顯示的數(shù)據(jù),以驗(yàn)證數(shù)碼管驅(qū)動(dòng)的正確性,同時(shí)也可檢驗(yàn)獨(dú)立按鍵消抖模塊的可靠性。
實(shí)驗(yàn)原理
數(shù)碼管所謂的動(dòng)態(tài)掃描,就是利用人眼的視覺(jué)暫留特性,在人眼能分辨的變化速度以外,快速分時(shí)的點(diǎn)亮各個(gè)數(shù)碼管對(duì)應(yīng)的段。因?yàn)榉謩e點(diǎn)亮所有數(shù)碼管一次所用時(shí)間小于人眼的視覺(jué)暫留,因此,在人們眼里看來(lái),這些數(shù)碼管都是同時(shí)持續(xù)點(diǎn)亮的,并不會(huì)有閃爍的感覺(jué)。
圖2-1數(shù)碼管實(shí)物圖
關(guān)于數(shù)碼管的具體原理,請(qǐng)大家網(wǎng)上查閱,小梅哥一個(gè)人精力有限,沒(méi)辦法在這里從最低層的原理給大家一步一步講起,如果大家有不明白的,請(qǐng)自行百度。這里小梅哥就用最簡(jiǎn)單粗暴的方式給大家簡(jiǎn)單介紹一下。
圖2-2數(shù)碼管簡(jiǎn)單等效電路
上圖為3位7段數(shù)碼管的等效電路圖,在這個(gè)圖中,可以明顯的看到24個(gè)發(fā)光二極管被分為了三組,每一組的8個(gè)發(fā)光二極管正極被接在了一起,通過(guò)一個(gè)三極管與VCC相連。三極管的基極連接到了FPGA的IO上,因此,只需要FPGA對(duì)應(yīng)的IO上給出低電平,三極管便會(huì)導(dǎo)通。而三組LED中所有的相同編號(hào)的LED的負(fù)極被連接在了一起,并接到了FPGA的IO上。如果我們希望將最左邊一組的led0、led5、led7三個(gè)編號(hào)的led燈點(diǎn)亮,其它led不亮,則只需要給Q0的基極(sel0)連接上低電平,并將led0、led5、led7的負(fù)極(a、f、h)連接上低電平,其它所有端口都輸出高電平,則最左邊一組的對(duì)應(yīng)的三個(gè)led燈就會(huì)被點(diǎn)亮,而其它led則會(huì)處于熄滅狀態(tài)。
假如我們需要在三秒時(shí)間內(nèi),完成以下三次操作:第一次操作,點(diǎn)亮最左邊一組led燈的led0、led5、led7;第二次操作,點(diǎn)亮中間一組led燈的led1、led2、led3;第三次操作,點(diǎn)亮最右邊一組led燈的led2、led4、led6;那么我們只需要按照如下表格中列出的真值表操作即可:
第一秒第二秒第三秒
sel0011
sel1101
sel2110
a011
b101
c100
d101
e110
f011
g110
h011
按照以上表格,我們就能知道該如何操作了,只需要在不同的時(shí)間給各個(gè)IO不同的電平,便能實(shí)現(xiàn)我們想要的亮滅組合。以上我們是以1秒為單位進(jìn)行l(wèi)ed組的切換的,假如我們將切換速度加快,變?yōu)?毫秒一切換,會(huì)是什么情況呢?在1毫秒一切換的速度下,完成所有操作所需時(shí)間為3ms,遠(yuǎn)遠(yuǎn)超出了我們?nèi)搜鬯鼙孀R(shí)的變化速度范圍。如果我們讓以上三個(gè)操作永遠(yuǎn)循環(huán)的進(jìn)行下去,那么我們將看見(jiàn)三組led燈中,我們點(diǎn)亮的那幾個(gè)led是同時(shí)且一直處于亮著的狀態(tài)的,這便是動(dòng)態(tài)掃描的原理,假如我們把每個(gè)led做成一個(gè)長(zhǎng)條型的,并按照如下形狀擺放,便就是我們常見(jiàn)的數(shù)碼管了。
圖2-3數(shù)碼管段分布
硬件設(shè)計(jì)
圖2-2只是一個(gè)為了講述數(shù)碼管原理簡(jiǎn)化了的電路模型,常見(jiàn)的數(shù)碼管電路結(jié)構(gòu)如下圖所示:
圖3-1數(shù)碼管典型電路
在這個(gè)圖中,共有6位數(shù)碼管,每個(gè)數(shù)碼管的正極被接在一個(gè)驅(qū)動(dòng)三極管上,三極管的基極連接到三八譯碼器的Y端,則FPGA只需要三個(gè)引腳就可最多控制8個(gè)數(shù)碼管的位選。數(shù)碼管的段選在串接了470歐姆的電阻后與FPGA的IO相連。這里470歐姆的電阻主要起到限流的作用,保證流過(guò)數(shù)碼管的電流在正常范圍內(nèi)。
架構(gòu)設(shè)計(jì)
本實(shí)驗(yàn)由總共四個(gè)模塊組成,分別為數(shù)碼管驅(qū)動(dòng)模塊、獨(dú)立按鍵檢測(cè)模塊、控制模塊和頂層模塊,其架構(gòu)如下:
圖4-1led實(shí)驗(yàn)?zāi)K組織結(jié)構(gòu)圖
由圖可知本實(shí)驗(yàn)有1個(gè)輸出端口,對(duì)應(yīng)驅(qū)動(dòng)了38譯碼器的三個(gè)選擇端和數(shù)碼管的8個(gè)段選腳。6個(gè)輸入端口,對(duì)應(yīng)了4個(gè)獨(dú)立按鍵輸入和一個(gè)時(shí)鐘輸入以及一個(gè)復(fù)位輸入。詳細(xì)端口名及其意義如下
代碼組織方式
本實(shí)驗(yàn)中,數(shù)碼管的驅(qū)動(dòng)采用了組合邏輯譯碼的方式進(jìn)行,具體將在代碼解讀時(shí)講解。
實(shí)驗(yàn)中還設(shè)計(jì)了一個(gè)控制器,該控制器主要通過(guò)讀取按鍵信息來(lái)改變待數(shù)碼管待顯示的數(shù)據(jù)內(nèi)容。
按鍵檢測(cè)部分使用前一節(jié)開(kāi)發(fā)的獨(dú)立按鍵的驅(qū)動(dòng),因此這里不進(jìn)行過(guò)多的分析介紹。
關(guān)鍵代碼解讀
因?yàn)閿?shù)碼管屬于低速設(shè)備,其正常的掃描頻率為500~10KHz,掃描頻率太快,會(huì)導(dǎo)致系統(tǒng)功耗增加,顯示效果變暗。掃描頻率太慢,會(huì)有明顯的閃爍感。本實(shí)驗(yàn)通過(guò)調(diào)試觀察,選擇以1KHz作為掃描頻率,實(shí)際顯示效果非常好。
因此本實(shí)驗(yàn)首先就需要產(chǎn)生一個(gè)1KHz的掃描時(shí)鐘,該時(shí)鐘由系統(tǒng)時(shí)鐘分頻得到。產(chǎn)生1KHz掃描時(shí)鐘的代碼如下:
parametersystem_clk=50_000_000;
localparamcnt1_MAX=system_clk/1000/2-1;
//1KHz時(shí)鐘分頻計(jì)數(shù)器
always@(posedgeClk)
begin
if(!Rst_n)cnt1
elseif(cnt1==cnt1_MAX)cnt1
elsecnt1
end
//得到1KHz時(shí)鐘
always@(posedgeClkornegedgeRst_n)
if(!Rst_n)clk_1K
elseif(cnt1==cnt1_MAX)
clk_1K
else;
其中,定義了一個(gè)全局參數(shù)system_clk,該參數(shù)為Clk的頻率,不同的時(shí)鐘頻率,只需要更改該參數(shù),就可改變分頻計(jì)數(shù)器的最大計(jì)數(shù)值,以保證1KHz分頻的精準(zhǔn)性。
在驅(qū)動(dòng)中,數(shù)碼管的位選以掃描時(shí)鐘的速率進(jìn)行切換,因?yàn)橹挥?位數(shù)碼管,因此當(dāng)位選計(jì)數(shù)到6-1后必須清零從頭開(kāi)始計(jì)數(shù)。相關(guān)代碼如下:
//位選信號(hào)控制
always@(posedgeclk_1KornegedgeRst_n)
if(!Rst_n)sel_r
elseif(sel_r==3'd5)
sel_r
else
sel_r
每個(gè)數(shù)碼管需要顯示的內(nèi)容都不相同,由Data中相應(yīng)的位指定,Data中各位與數(shù)碼管的位對(duì)應(yīng)關(guān)系如下:
Data位Data[23:20]Data[19:16]Data[15:12]Data[11:8]Data[7:4]Data[3:0]
數(shù)碼管位數(shù)碼管0數(shù)碼管1數(shù)碼管2數(shù)碼管3數(shù)碼管4數(shù)碼管5
因此需要從Data中將每個(gè)數(shù)碼管被選中時(shí)需要顯示的數(shù)據(jù)提取出來(lái),提取數(shù)據(jù)的代碼如下所示:
//根據(jù)不同的數(shù)碼管位選擇不同的待顯示數(shù)據(jù)
always@(*)
if(!Rst_n)
disp_data
else
begin
case(sel_r)
0:disp_data
1:disp_data
2:disp_data
3:disp_data
4:disp_data
5:disp_data
default:disp_data
endcase
end
因?yàn)樘崛〕鰜?lái)的數(shù)據(jù)還是BCD碼的形式,還需要將BCD碼對(duì)應(yīng)的數(shù)據(jù)翻譯成為數(shù)碼管顯示對(duì)應(yīng)字符時(shí)應(yīng)該點(diǎn)亮或熄滅的對(duì)應(yīng)的LED的控制信號(hào),因此必須還有一個(gè)BCD碼譯碼的過(guò)程,該過(guò)程代碼如下圖所示:
//數(shù)據(jù)譯碼,將待顯示數(shù)據(jù)翻譯為符合數(shù)碼管顯示的編碼
always@(*)
if(!Rst_n)
seg_r
else
begin
case(disp_data)
4'd0:seg_r
4'd1:seg_r
4'd2:seg_r
4'd3:seg_r
4'd4:seg_r
4'd5:seg_r
4'd6:seg_r
4'd7:seg_r
4'd8:seg_r
4'd9:seg_r
4'd10:seg_r
4'd11:seg_r
4'd12:seg_r
4'd13:seg_r
4'd14:seg_r
4'd15:seg_r
default:seg_r
endcase
end
最后,需要將位選和段選信號(hào)輸出:
assignDig_Led_seg=seg_r;
assignDig_Led_sel=sel_r;
控制部分相對(duì)簡(jiǎn)單,只需要根據(jù)對(duì)應(yīng)的按鍵信息,給待顯示的數(shù)據(jù)加上一個(gè)對(duì)應(yīng)的值,該部分代碼如下所示:
always@(posedgeClkornegedgeRst_n)
if(!Rst_n)
Dig_Led_Data
elseif(Key_Flag)
begin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈教師合同8篇
- 9 烏鴉喝水 教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文一年級(jí)上冊(cè)
- 第四單元《跨媒介閱讀與交流-信息時(shí)代的語(yǔ)文生活》教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 綜合探究 企業(yè)創(chuàng)辦之旅 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高中政治統(tǒng)編版選擇性必修二法律與生活
- 11 變廢為寶有妙招 第二課時(shí) 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治四年級(jí)上冊(cè)統(tǒng)編版
- 烹飪?cè)现R(shí)試題與答案
- 化工總控工高級(jí)模擬習(xí)題與答案
- 2025年端子機(jī)專用變頻器項(xiàng)目投資可行性研究分析報(bào)告
- 快遞投遞站可行性研究報(bào)告
- 2025年中國(guó)膠原蛋白行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 安全生產(chǎn)目標(biāo)責(zé)任制考核表
- 常見(jiàn)織帶花鏈的排法和穿棕方法
- 《化工工程制圖》完整教案
- 2023年廣東省中考試卷(語(yǔ)數(shù)英物化史生等共11套)帶答案解析
- DFX工藝設(shè)計(jì)方法介紹
- 洪恩識(shí)字識(shí)字卡(001-100)可直接打印剪裁
- 違反八項(xiàng)規(guī)定問(wèn)題典型案例、法規(guī)依據(jù)和關(guān)注點(diǎn)
- J-STD-033D處理包裝運(yùn)輸和使用濕度回流和過(guò)程敏感設(shè)備
- 文聯(lián)述職報(bào)告
- SCI期刊的名稱縮寫與全稱對(duì)照表
- 人機(jī)料法環(huán)測(cè)檢查表
評(píng)論
0/150
提交評(píng)論