前面說(shuō)過(guò),在C,C++等語(yǔ)言學(xué)習中,“Hello World”將會(huì )是第一個(gè)學(xué)習的代碼,但是在FPGA中由于電路驅動(dòng)的復雜性,與單片機雷同,我們無(wú)法在電腦上實(shí)現“Hello World”的顯示,而必須依靠相關(guān)硬件。因此我們不得不在一定的基礎上,才能講解關(guān)于LCD1602字符液晶的驅動(dòng),以及Hello World的顯示。 雷同于前面MCU按鍵消抖動(dòng)移植代碼,此處也可以移植MCU LCD1602驅動(dòng)代碼。本例程不是Bingo原創(chuàng ),是按照網(wǎng)友“小時(shí)不識月”的代碼,移植修改最后定型為Bingo版本(O(∩_∩)O哈哈~)。 電路圖此處不解釋?zhuān)?jiǎn)單了。 一、驅動(dòng)說(shuō)明 由于FPGA的高速并行操作,并非順序執行,在代碼上與MCU有所不同。此處先講解驅動(dòng)原理: (1)分頻以得到500KHz固定的頻率,初始化LCD1602。如下圖所示,LCD_EN的頻率應該控制在2M以?xún)?不同的LCD1602參數會(huì )有所不同)。 (2)通過(guò)三段式狀態(tài)機,來(lái)初始化以及給數據。 (3)通過(guò)循環(huán)讀取某一“數組”,循環(huán)給LCD1602數據,以接口形式方便改變。 二、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*^_^*"; |