前面說過,在C,C++等語言學(xué)習(xí)中,“Hello World”將會(huì)是第一個(gè)學(xué)習(xí)的代碼,但是在FPGA中由于電路驅(qū)動(dòng)的復(fù)雜性,與單片機(jī)雷同,我們無法在電腦上實(shí)現(xiàn)“Hello World”的顯示,而必須依靠相關(guān)硬件。因此我們不得不在一定的基礎(chǔ)上,才能講解關(guān)于LCD1602字符液晶的驅(qū)動(dòng),以及Hello World的顯示。 雷同于前面MCU按鍵消抖動(dòng)移植代碼,此處也可以移植MCU LCD1602驅(qū)動(dòng)代碼。本例程不是Bingo原創(chuàng),是按照網(wǎng)友“小時(shí)不識(shí)月”的代碼,移植修改最后定型為Bingo版本(O(∩_∩)O哈哈~)。 電路圖此處不解釋,太簡單了。 一、驅(qū)動(dòng)說明 由于FPGA的高速并行操作,并非順序執(zhí)行,在代碼上與MCU有所不同。此處先講解驅(qū)動(dòng)原理: (1)分頻以得到500KHz固定的頻率,初始化LCD1602。如下圖所示,LCD_EN的頻率應(yīng)該控制在2M以內(nèi)(不同的LCD1602參數(shù)會(huì)有所不同)。 ![]() (2)通過三段式狀態(tài)機(jī),來初始化以及給數(shù)據(jù)。 (3)通過循環(huán)讀取某一“數(shù)組”,循環(huán)給LCD1602數(shù)據(jù),以接口形式方便改變。 二、FPGA LCD1602 FSM 1. 代碼 /************************************************* * Module Name : lcd1602_driver * Engineer : Crazy Bingo * Target Device : EP2C8Q208C8 * Tool versions : Quartus II 11.0 * Create Date : 2011-7-3 * Revision : v1.0 * Description : **************************************************/ module lcd1602_driver ( input clk, input rst_n, output lcd_en, // lcd enable output reg lcd_rs, // record,statement output lcd_rw, output reg [7:0] lcd_data ); parameter [127:0] line_rom1 = "I am CrazyBingo!"; parameter [127:0] line_rom2 = "Hello World*^_^*"; //-------------------------------------- reg [15:0] cnt; always @ (posedge clk or negedge rst_n) begin if(!rst_n) cnt (2)模塊可分為一下幾個(gè)狀態(tài) 3. “Hello World”實(shí)物顯示 parameter [127:0] line_rom1 = "I am CrazyBingo!"; parameter [127:0] line_rom2 = "Hello World*^_^*"; |