• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于FPGA的16×16點(diǎn)陣模塊控制器設(shè)計(jì)

      2018-10-29 08:03:20喬廣欣李亞峻堃斌于寶
      天津科技 2018年10期
      關(guān)鍵詞:行列譯碼器時(shí)鐘

      喬廣欣,李亞峻*,李 松,楊 堃斌,于寶

      (天津科技大學(xué)電子信息與自動(dòng)化學(xué)院 天津300222)

      LED點(diǎn)陣顯示系統(tǒng)不僅能夠靜態(tài)顯示字符和圖像,而且能夠動(dòng)態(tài)顯示文字、動(dòng)畫(huà)、視頻等信息,具有亮度高、壽命長(zhǎng)、價(jià)格低、視角大等優(yōu)點(diǎn),得到廣泛應(yīng)用。

      常用的 LED 點(diǎn)陣顯示系統(tǒng)由微控制器、LED點(diǎn)陣顯示屏及其行列驅(qū)動(dòng)電路組成。所用微控制器的種類有基于AVR單片機(jī)的ATmega128[1]和基于51單片機(jī)的 AT89C51[2]、基于 ARM 的以 Cortex-M0+為內(nèi)核的 KW01-Zigbee[3]和以 Cortex-M3為內(nèi)核的STM32F103[4]、基于 FPGA 的 Xilinx Virtex4 系列XC4VSX25[5]等。單片機(jī)與 ARM 的開(kāi)發(fā)語(yǔ)言有匯編語(yǔ)言或C/C++語(yǔ)言,F(xiàn)PGA的開(kāi)發(fā)語(yǔ)言有VHDL語(yǔ)言或 Verilog語(yǔ)言。本文用 VHDL語(yǔ)言編程,采用DIGILENT公司的便攜式 Basys2開(kāi)發(fā)板,其上嵌有Xilinx Spartan-3E系列FPGA器件XC3S100E[6]。

      16×16點(diǎn)陣有32個(gè)引腳,不適合直接與微控制器相連,占用太多的引腳資源。實(shí)際上常將譯碼器、串并轉(zhuǎn)換芯片組成行列驅(qū)動(dòng)電路用于控制LED點(diǎn)陣顯示,常見(jiàn)的有用3-8譯碼器74HC138或4-16譯碼器 74HC154輪詢掃描點(diǎn)陣行,用移位寄存器74HC595鎖存點(diǎn)陣列數(shù)據(jù)[1,4]。本文選用74HC138與74HC595驅(qū)動(dòng)的點(diǎn)陣模塊。

      1 16×16點(diǎn)陣模塊的硬件電路

      16×16點(diǎn)陣的每一行接LED燈的正極,每一列接 LED燈的負(fù)極。點(diǎn)陣的 16行 H1—H16由兩片74HC138組合控制,Hi=1時(shí)第 i行被選通;點(diǎn)陣的16列L1—L16由兩片74HC595級(jí)聯(lián)進(jìn)行控制,Hi=1、Lj=0時(shí),第i行第j列的LED燈被點(diǎn)亮。

      1.1 點(diǎn)陣行驅(qū)動(dòng)74HC138

      74HC138是一個(gè) 3-8譯碼器,當(dāng)使能信號(hào)E3E2E1=100時(shí),A2A1A0從 000到 111依次取值,使輸出端Y0—Y7依次輸出低電平[7]。如圖1所示,用2個(gè)74HC138組合能夠?qū)崿F(xiàn)4-16譯碼器,在輸出端外接三極管(圖 1中只示意性地畫(huà)了一個(gè))可以驅(qū)動(dòng)16×16點(diǎn)陣的點(diǎn)陣行 H1—H16(高電平有效)。始終使 G=0,當(dāng) D=0時(shí),74HC138-1使能,CBA從 000到 111依次取值,H1至H8行依次被選通;當(dāng) D=1時(shí),74HC138-2使能,CBA從000到111依次取值,H9至H16行依次被選通。

      圖1 用74HC138控制點(diǎn)陣行Fig.1 Control of dot matrix row with 74HC138

      1.2 點(diǎn)陣列驅(qū)動(dòng)74HC595

      74HC595是一個(gè)移位寄存器,可實(shí)現(xiàn)數(shù)據(jù)的串行輸入/8位并行輸出或者串行輸出[8]。如圖 2所示,將 74HC595-1的 SQH與 74HC595-2的 SI相連,也就是將兩片74HC595級(jí)聯(lián),可實(shí)現(xiàn)16位數(shù)據(jù)的并行輸出,用于控制16×16點(diǎn)陣的16列L1—L16。

      圖2 用74HC595控制點(diǎn)陣列Fig.2 Control of dot matrix column with 74HC595

      74HC595有三個(gè)重要的輸入引腳,SCK(數(shù)據(jù)輸入時(shí)鐘)、SI(數(shù)據(jù)輸入)、RCK(輸出鎖存時(shí)鐘),分別對(duì)應(yīng)于點(diǎn)陣模塊上的引腳名稱為 CLK、DATA、LATCH。它們的工作時(shí)序如圖 3所示,當(dāng)RCK為低電平時(shí),從SI串行輸入的數(shù)據(jù)D0—D15在每個(gè)SCK的上升沿依次被載入移位寄存器。從第 8個(gè) SCK的下降沿開(kāi)始,數(shù)據(jù)將出現(xiàn)在74HC595-2的輸入端SI。連續(xù)輸入 16位數(shù)據(jù)后,在 RCK的上升沿 D0—D15被鎖存到輸出存儲(chǔ)器中,立即更新點(diǎn)陣列 L16—L1上的信息。

      圖3 74HC595的時(shí)序圖Fig.3 Timing diagram of 74HC595

      2 點(diǎn)陣顯示驅(qū)動(dòng)模塊

      圖4點(diǎn)陣顯示驅(qū)動(dòng)模塊 disp_dot16×16實(shí)現(xiàn)的是點(diǎn)陣行控制信號(hào)的產(chǎn)生、16位點(diǎn)陣列數(shù)據(jù)的存取與串行輸出。

      圖4 點(diǎn)陣顯示驅(qū)動(dòng)模塊Fig.4 Dot matrix display driver module

      2.1 點(diǎn)陣列數(shù)據(jù)的存儲(chǔ)與調(diào)用

      點(diǎn)陣列數(shù)據(jù)從 74HC595串行輸入。由于74HC595只有一個(gè)輸出存儲(chǔ)器,只能存儲(chǔ)一行數(shù)據(jù)。所以需要通過(guò)編程輪詢掃描點(diǎn)陣的 H1—H16行,同時(shí)在 L1—L16列輸入待顯示的信息,利用人眼的視覺(jué)暫存現(xiàn)象實(shí)現(xiàn)16×16點(diǎn)陣圖形的顯示。

      點(diǎn)陣圖像的數(shù)據(jù)較多,適于用ROM或RAM存儲(chǔ)起來(lái),然后用查找表的方式輸出。本設(shè)計(jì)直接調(diào)用Xilinx ISE軟件開(kāi)發(fā)環(huán)境提供的ROM IP核(romip模塊) ,在其上存儲(chǔ)了一幅16×16點(diǎn)陣的圖像信息。在時(shí)鐘clk_row的上升沿,根據(jù)ctrl_addr模塊地址addr從romip模塊中讀取數(shù)據(jù)dout,地址addr自加1。

      2.2 點(diǎn)陣行列控制器的VHDL程序設(shè)計(jì)

      ctrl_addr模塊的地址 addr不僅控制點(diǎn)陣列數(shù)據(jù)的存取,還控制ctrl_dot模塊的點(diǎn)陣行選通信號(hào)dcba和點(diǎn)陣列數(shù)據(jù)data的更新。為了使74HC595正常工作,需要按照?qǐng)D 3所示的工作時(shí)序編寫(xiě)它的 VHDL控制程序,將16位并行數(shù)據(jù)data_line(15∶0)轉(zhuǎn)換為串行數(shù)據(jù)輸出給 data,同時(shí)產(chǎn)生 74HC595芯片所需的數(shù)據(jù)輸入時(shí)鐘clk_hc595和輸出鎖存時(shí)鐘latch,它們分別與 16×16點(diǎn)陣模塊的 DATA、CLK、LATCH端相連,如圖2所示。點(diǎn)陣行列控制器的VHDL程序段用如下if語(yǔ)句編程實(shí)現(xiàn)。

      g<='0'; --選通 74HC138

      if rising_edge(clk)then

      if latch_tmp='1' then -- ①

      clk_hc595<='0';

      if(addr_l=addr_tmp)then

      data_tmp <= data_line;

      addr_tmp:=addr_tmp+1;

      latch_tmp<='0';

      shift_f<='1';

      else

      dcba<=addr_l-1;

      end if;

      else

      if shift_f='1' then -- ②

      clk_hc595<='0';

      data<=data_tmp(0) ;

      data_tmp(14 downto 0)<=data_tmp

      (15 downto 1);

      shift_f<='0';

      else -- ③

      clk_hc595<='1';

      if cnt=X"F" then

      latch_tmp<='1';

      cnt:=X"0";shift_f<='0';

      else

      cnt:=cnt+1;shift_f<='1';

      end if;

      end if;

      end if;

      latch<=latch_tmp;

      end if;

      ① 裝載新數(shù)據(jù)/選通點(diǎn)陣行。當(dāng) latch_tmp為 1時(shí),使 clk_hc595為 0。當(dāng) addr_l與預(yù)設(shè)的 addr_tmp不一致時(shí),說(shuō)明地址未更新,點(diǎn)陣顯示上一行的信息,繼續(xù)檢測(cè)。當(dāng)檢測(cè)到addr_l與addr_tmp相同時(shí),說(shuō)明有新數(shù)據(jù)到來(lái),將新數(shù)據(jù) data_line裝載到data_tmp;addr_tmp自加 1,準(zhǔn)備下一個(gè)數(shù)據(jù)的地址;使latch_tmp為0,移位標(biāo)志位shift_f置1。

      ② 16位數(shù)據(jù)串行輸出,先低位后高位。當(dāng)latch_tmp為 0時(shí),如果 shift_f為 1,則將 16位并行數(shù)據(jù)的最低位輸出給 data,其他數(shù)據(jù)右移一位,實(shí)現(xiàn)數(shù)據(jù)從低位到高位的串行輸出;使 clk_hc595為 0,shift_f為 0。

      ③ 產(chǎn)生時(shí)鐘clk_hc595和輸出鎖存信號(hào)latch的上升沿。當(dāng)latch_tmp為0時(shí),如果shift_f為0,則使clk_hc595由 0變?yōu)?1,每移一位數(shù)產(chǎn)生一個(gè)clk_hc595時(shí)鐘;當(dāng) cnt<15時(shí),說(shuō)明 16位數(shù)據(jù)未傳完,使cnt自加1,shift_f為1,在下一個(gè)clk時(shí)鐘的上升沿轉(zhuǎn)到②繼續(xù)串行輸出。當(dāng)計(jì)數(shù)器 cnt=15時(shí),表明16位數(shù)據(jù)全部串行輸出完畢,使latch_tmp由0變?yōu)?1,產(chǎn)生輸出鎖存信號(hào) latch的上升沿,鎖存數(shù)據(jù)。使cnt清零,shift_f為0,在下一個(gè)clk時(shí)鐘上升沿轉(zhuǎn)到①,等待下一次數(shù)據(jù)更新。

      3 16×16點(diǎn)陣顯示的硬件實(shí)現(xiàn)效果

      對(duì)工程進(jìn)行綜合、實(shí)現(xiàn)、產(chǎn)生可編程文件,下載到Basys2開(kāi)發(fā)板上,實(shí)現(xiàn)了如圖5所示的顯示效果。

      圖5 16×16點(diǎn)陣顯示效果(津門)Fig.5 16×16 dot matrix display effect(Jinmen)

      在存儲(chǔ)器中存入更多幅圖像信息,然后對(duì)地址模塊 ctrl_addr進(jìn)行更復(fù)雜的編程控制,即可實(shí)現(xiàn)圖像的動(dòng)態(tài)顯示,使一幅幅圖像切換顯示,使點(diǎn)陣顯示信息向左或向右移,等等。

      4 結(jié) 論

      本文著重介紹了點(diǎn)陣行列控制器的 VHDL程序設(shè)計(jì),用 if嵌套語(yǔ)句編程實(shí)現(xiàn)了數(shù)據(jù)的存儲(chǔ)調(diào)用與串行輸出、控制 74HC138驅(qū)動(dòng)點(diǎn)陣行選通、控制74HC595驅(qū)動(dòng)點(diǎn)陣列,從而在點(diǎn)陣屏上顯示出預(yù)設(shè)的圖像信息。

      猜你喜歡
      行列譯碼器時(shí)鐘
      用“行列排除法”解四宮數(shù)獨(dú)(2)
      用“行列排除法”解四宮數(shù)獨(dú)(1)
      別樣的“時(shí)鐘”
      古代的時(shí)鐘
      糾錯(cuò)模式可配置的NAND Flash BCH譯碼器設(shè)計(jì)
      單層小波分解下圖像行列壓縮感知選擇算法
      跟蹤導(dǎo)練(一)5
      有趣的時(shí)鐘
      時(shí)鐘會(huì)開(kāi)“花”
      HINOC2.0系統(tǒng)中高速LDPC譯碼器結(jié)構(gòu)設(shè)計(jì)
      靖远县| 台安县| 乐安县| 盐津县| 沂水县| 偃师市| 全椒县| 玛多县| 巴马| 碌曲县| 惠东县| 东乌珠穆沁旗| 龙口市| 昌江| 曲沃县| 大洼县| 武汉市| 清原| 北流市| 彭阳县| 宁安市| 中超| 舞阳县| 绥滨县| 凭祥市| 聊城市| 监利县| 庆云县| 北票市| 石泉县| 霍州市| 崇仁县| 清涧县| 景谷| 永年县| 噶尔县| 义乌市| 龙里县| 荔波县| 车致| 河间市|