Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- `timescale 1ns / 1ps
- // LCD Initializer
- // ----------------------------------------------------------------------------
- // For: Hitachi HD44780 Controller (And Compatible)
- // 8-Bit Mode
- //
- // Author: Geoff Sevart
- module LCD_Hitachi_HD44780_8Bit_Initializer(
- input CLK,
- output [7:0] LCD_D,
- output LCD_RS,
- output LCD_RW,
- output LCD_E,
- output Ready
- );
- reg [31:0] counter_cycles;
- reg [7:0] caseindex;
- reg [7:0] ib_DB;
- reg ib_RS;
- reg ib_E;
- reg ib_Ready;
- initial begin
- ib_DB = 0;
- ib_RS = 0;
- ib_E = 0;
- ib_Ready = 0;
- end
- always @(posedge CLK) begin
- case(caseindex)
- 0: begin
- //Delay
- if (counter_cycles == 25000000) begin
- counter_cycles <= 0;
- caseindex <= 1;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** FUNCTION SET *** *** ***
- 1: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00111000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 2;
- end
- 2: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 3;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 3: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 4;
- end
- 4: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 5;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 5: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 6;
- end
- 6: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 7;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 7: begin
- //Delay
- if (counter_cycles == 300000) begin
- counter_cycles <= 0;
- caseindex <= 8;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** FUNCTION SET *** *** ***
- 8: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00111000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 9;
- end
- 9: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 10;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 10: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 11;
- end
- 11: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 12;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 12: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 13;
- end
- 13: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 14;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 14: begin
- //Delay
- if (counter_cycles == 7500) begin
- counter_cycles <= 0;
- caseindex <= 15;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** FUNCTION SET *** *** ***
- 15: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00111000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 16;
- end
- 16: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 17;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 17: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 18;
- end
- 18: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 19;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 19: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 20;
- end
- 20: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 21;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** FUNCTION SET *** *** ***
- 21: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00111000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 22;
- end
- 22: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 23;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 23: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 24;
- end
- 24: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 25;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 25: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 26;
- end
- 26: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 27;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** DISPLAY OFF *** *** ***
- 27: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00001000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 28;
- end
- 28: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 29;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 29: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 30;
- end
- 30: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 31;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 31: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 32;
- end
- 32: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 33;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** CLEAR DISPLAY *** *** ***
- 33: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00000001;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 34;
- end
- 34: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 35;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 35: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 36;
- end
- 36: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 37;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 37: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 38;
- end
- 38: begin
- //Delay
- if (counter_cycles == 250000) begin
- counter_cycles <= 0;
- caseindex <= 39;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** ENTRY MODE SET *** *** ***
- 39: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00000110;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 40;
- end
- 40: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 41;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 41: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 42;
- end
- 42: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 43;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 43: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 44;
- end
- 44: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 45;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** FUNCTION SET *** *** ***
- 45: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00111000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 46;
- end
- 46: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 47;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 47: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 48;
- end
- 48: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 49;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 49: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 50;
- end
- 50: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 51;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** DISPLAY ON *** *** ***
- 51: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00001111;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 52;
- end
- 52: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 53;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 53: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 54;
- end
- 54: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 55;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 55: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 56;
- end
- 56: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 57;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** ENTRY MODE SET *** *** ***
- 57: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b00000110;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 58;
- end
- 58: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 59;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 59: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 60;
- end
- 60: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 61;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 61: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 62;
- end
- 62: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 63;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- //*** *** *** SET DDRAM Address *** *** ***
- 63: begin
- //Set Data, RS, and E - Then Wait for Data Setup
- ib_DB <= 8'b10000000;
- ib_RS <= 0;
- ib_E <= 0;
- caseindex <= 64;
- end
- 64: begin
- //Delay
- if (counter_cycles == 10) begin
- counter_cycles <= 0;
- caseindex <= 65;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 65: begin
- //Raise E - Then Wait for Recognition
- ib_E <= 1;
- caseindex <= 66;
- end
- 66: begin
- //Delay
- if (counter_cycles == 25) begin
- counter_cycles <= 0;
- caseindex <= 67;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 67: begin
- //Drop E - Then Wait for Command to Complete
- ib_E <= 0;
- caseindex <= 68;
- end
- 68: begin
- //Delay
- if (counter_cycles == 2500) begin
- counter_cycles <= 0;
- caseindex <= 69;
- end else begin
- counter_cycles <= counter_cycles + 1;
- end
- end
- 69: begin
- ib_Ready <= 1;
- end
- endcase
- end
- assign LCD_Data = ib_DB;
- assign LCD_RS = ib_RS;
- assign LCD_RW = 0;
- assign LCD_E = ib_E;
- assign Ready = ib_Ready;
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement