前面說過,在C,C++等語言學習中,“Hello World”將會是第一個學習的代碼,但是在FPGA中由于電路驅動的復雜性,與單片機雷同,我們無法在電腦上實現“Hello World”的顯示,而必須依靠相關硬件。因此我們不得不在一定的基礎上,才能講解關于LCD1602字符液晶的驅動,以及Hello World的顯示。 雷同于前面MCU按鍵消抖動移植代碼,此處也可以移植MCU LCD1602驅動代碼。本例程不是Bingo原創,是按照網友“小時不識月”的代碼,移植修改最后定型為Bingo版本(O(∩_∩)O哈哈~)。 電路圖此處不解釋,太簡單了。 一、驅動說明 由于FPGA的高速并行操作,并非順序執行,在代碼上與MCU有所不同。此處先講解驅動原理: (1)分頻以得到500KHz固定的頻率,初始化LCD1602。如下圖所示,LCD_EN的頻率應該控制在2M以內(不同的LCD1602參數會有所不同)。 (2)通過三段式狀態機,來初始化以及給數據。 (3)通過循環讀取某一“數組”,循環給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)模塊可分為一下幾個狀態 3. “Hello World”實物顯示 parameter [127:0] line_rom1 = "I am CrazyBingo!"; parameter [127:0] line_rom2 = "Hello World*^_^*"; |