📄 lcd_controller.v
字号:
module LCD_Controller ( // Host Side iDATA,iRS, iStart,oDone, iCLK,iRST_N, // LCD Interface LCD_DATA, LCD_RW, LCD_EN, LCD_RS );// CLKparameter CLK_Divide = 16;// Host Sideinput [7:0] iDATA;input iRS,iStart;input iCLK,iRST_N;output reg oDone;// LCD Interfaceoutput [7:0] LCD_DATA;output reg LCD_EN;output LCD_RW; //output LCD_RS;// Internal Registerreg [4:0] Cont; //frequency division counter variable reg [1:0] ST; //state registerreg preStart, //save the pre-state of iStart mStart; //a flag decides whether the state machine execute or not ///////////////////////////////////////////////// Only write to LCD, bypass iRS to LCD_RSassign LCD_DATA = iDATA; assign LCD_RW = 1'b0; assign LCD_RS = iRS;/////////////////////////////////////////////always@(posedge iCLK or negedge iRST_N) begin if(!iRST_N)//?????? begin oDone <= 1'b0; LCD_EN <= 1'b0; preStart<= 1'b0; mStart <= 1'b0; Cont <= 0; ST <= 0; end else begin ////// Input Start Detect /////// preStart<= iStart; if({preStart,iStart}==2'b01) begin mStart <= 1'b1; oDone <= 1'b0; end ////////////////////////////////// if(mStart) begin case(ST) //state machine for create the signal LCD_EN 0: ST <= 1; // Wait Setup 1: begin LCD_EN <= 1'b1; ST <= 2; end 2: begin if(Cont<CLK_Divide) // 16 frequency division //the Enable pulse width (high level)=230ns Cont <= Cont+1; else ST <= 3; end 3: begin LCD_EN <= 1'b0; mStart <= 1'b0; oDone <= 1'b1; Cont <= 0; ST <= 0; end endcase end endendendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -