?? lcd_test_initial.v.bak
字號:
//`include "F:\jeffie\quartus\lcdfinal\LCD_Controller.v"
module LCD_TEST_initial( // Host Side
iCLK,iRST_N,
LEDR,
LEDG,
// LCD Side
LCD_DATA,LCD_RW,LCD_EN,LCD_RS,LCD_XX,led_ctrl,password,try_count );
// Host Side
input iCLK;// 輸入時鐘為50M
input iRST_N;//
input [4:0]LCD_XX;
input [1:0]try_count;
input [4:0]led_ctrl;
output [17:0]LEDR;
output [8:0]LEDG;
input [15:0]password;
// LCD Side
output [7:0] LCD_DATA;
output LCD_RW,LCD_EN,LCD_RS;
// Internal Wires/Registers
reg [5:0] LUT_INDEX;
reg [8:0] LUT_DATA;
reg [5:0] mLCD_ST; //LCD state register
reg [17:0] mDLY; //delay register
reg[17:0]LEDR;
reg[8:0]LEDG;
//reg [1:0] mDLY;
reg mLCD_Start;
reg [7:0] mLCD_DATA;
reg mLCD_RS;
wire mLCD_Done;
parameter LCD_INTIAL = 0;
parameter LCD_LINE1 = 5; //前5個LUT的數(shù)據(jù)用于初始化,
//故第一行的數(shù)據(jù)從LUT_INDEX=5開始
parameter LCD_CH_LINE = LCD_LINE1+16; //換行索引
parameter LCD_LINE2 = LCD_LINE1+16+1; //第二行的起始索引
parameter LUT_SIZE = LCD_LINE1+32+1;//查找表的大小
always@(posedge iCLK or negedge iRST_N )
begin
if(!iRST_N) //reset
begin
LUT_INDEX <= 0;
mLCD_ST <= 0;
mDLY <= 0;
mLCD_Start <= 0;
mLCD_DATA <= 0;
mLCD_RS <= 0;
LEDR[17:0]=18'b000000000000000000;
LEDG[8:0]=9'b000000000;
end
else
begin
if(LUT_INDEX<LUT_SIZE) //LUT_SIZE = LCD_LINE1+32+1; LCD_LINE1 = 5;
begin
case(mLCD_ST)
0: begin
mLCD_DATA <= LUT_DATA[7:0];
mLCD_RS <= LUT_DATA[8];
mLCD_Start <= 1;
mLCD_ST <= 1;
end
1: begin
if(mLCD_Done)
begin
mLCD_Start <= 0;
mLCD_ST <= 2;
end
end
2: begin
if(mDLY<18'h3FFFE) //顯示延時5.24ms
//if(mDLY<2'h3f)
mDLY <= mDLY+1;
else
begin
mDLY <= 0;
mLCD_ST <= 3;
end
end
3: begin
LUT_INDEX <= LUT_INDEX+1; //訪問下一個查找表(的數(shù)據(jù))
mLCD_ST <= 0;
end
endcase
end
else
if(led_ctrl)
begin
LUT_INDEX<=LCD_INTIAL+0;
mLCD_ST <= 0;
end
end
end
//reg [4:0]LUT_DATAX;
always @(LUT_INDEX)//@(posedge iCLK )
begin
case(LCD_XX)
5'b00001:
begin
LEDG[8]<='b1;
case(LUT_INDEX)
// Initial
LCD_INTIAL+0: LUT_DATA <= 9'h038; //Function Set:
/*9'h038=9'b0_0011_1000:
位4:1,顯示數(shù)據(jù)長度為:8 bit;
位3:1,顯示2行
位2:0,顯示點陣為5*8
位1、位0:無關(guān)位*/
LCD_INTIAL+1: LUT_DATA <= 9'h00C; //Display ON/OFF Control
/*9'h00C=9'b0_0000_1100:
位2:1,打開顯示
位1:1,顯示光標
位0:0,光標不閃爍*/
LCD_INTIAL+2: LUT_DATA <= 9'h001; //Clear Display
LCD_INTIAL+3: LUT_DATA <= 9'h006; //Entry Mode Set
/*9'h006=9'b0_0000_0110:
TOTEST*/
LCD_INTIAL+4: LUT_DATA <= 9'h080; //Set DDRAM Address
/*設(shè)置DDRAM 的地址:AC(address counter)=0*/
// Line 1 // Welcome!
LCD_LINE1+0: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+1: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+2: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+3: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+4: LUT_DATA <= 9'h157; //W
LCD_LINE1+5: LUT_DATA <= 9'h165; //e
LCD_LINE1+6: LUT_DATA <= 9'h16C; //l
LCD_LINE1+7: LUT_DATA <= 9'h163; //c
LCD_LINE1+8: LUT_DATA <= 9'h16F; //o
LCD_LINE1+9: LUT_DATA <= 9'h16D; //m
LCD_LINE1+10: LUT_DATA <= 9'h165; //e
LCD_LINE1+11: LUT_DATA <= 9'h121; //!
LCD_LINE1+12: LUT_DATA <= 9'h120; //" "
LCD_LINE1+13: LUT_DATA <= 9'h120; //" "
LCD_LINE1+14: LUT_DATA <= 9'h120; //" "
LCD_LINE1+15: LUT_DATA <= 9'h120; //" "
// Change Line
LCD_CH_LINE: LUT_DATA <= 9'h0C0; //change line instruction
// Line 2
LCD_LINE2+0: LUT_DATA <= 9'h17F; //
LCD_LINE2+1: LUT_DATA <= 9'h17F;//
LCD_LINE2+2: LUT_DATA <= 9'h120; //
LCD_LINE2+3: LUT_DATA <= 9'h120; //
LCD_LINE2+4: LUT_DATA <= 9'h120; //
LCD_LINE2+5: LUT_DATA <= 9'h120; //
LCD_LINE2+6: LUT_DATA <= 9'h120; //
LCD_LINE2+7: LUT_DATA <= 9'h120; //
LCD_LINE2+8: LUT_DATA <= 9'h120; //
LCD_LINE2+9: LUT_DATA <= 9'h120; //
LCD_LINE2+10: LUT_DATA <= 9'h120; //
LCD_LINE2+11: LUT_DATA <= 9'h120;//
LCD_LINE2+12: LUT_DATA <= 9'h130+password[15:12];//
LCD_LINE2+13: LUT_DATA <= 9'h130+password[11:8];//
LCD_LINE2+14: LUT_DATA <= 9'h130+password[7:4];//
LCD_LINE2+15: LUT_DATA <= 9'h130+password[3:0];//
default: LUT_DATA <= 9'h000;//
endcase
end
5'b00100:
begin
LEDR[try_count]='b1;
case(LUT_INDEX)
// Initial
LCD_INTIAL+0: LUT_DATA <= 9'h038; //Function Set:
/*9'h038=9'b0_0011_1000:
位4:1,顯示數(shù)據(jù)長度為:8 bit;
位3:1,顯示2行
位2:0,顯示點陣為5*8
位1、位0:無關(guān)位*/
LCD_INTIAL+1: LUT_DATA <= 9'h00C; //Display ON/OFF Control
/*9'h00C=9'b0_0000_1100:
位2:1,打開顯示
位1:1,顯示光標
位0:0,光標不閃爍*/
LCD_INTIAL+2: LUT_DATA <= 9'h001; //Clear Display
LCD_INTIAL+3: LUT_DATA <= 9'h006; //Entry Mode Set
/*9'h006=9'b0_0000_0110:
TOTEST*/
LCD_INTIAL+4: LUT_DATA <= 9'h080; //Set DDRAM Address
/*設(shè)置DDRAM 的地址:AC(address counter)=0*/
// Line 1 // Welcome!
LCD_LINE1+0: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+1: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+2: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+3: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+4: LUT_DATA <= 9'h157; //W
LCD_LINE1+5: LUT_DATA <= 9'h165; //e
LCD_LINE1+6: LUT_DATA <= 9'h16C; //l
LCD_LINE1+7: LUT_DATA <= 9'h163; //c
LCD_LINE1+8: LUT_DATA <= 9'h16F; //o
LCD_LINE1+9: LUT_DATA <= 9'h16D; //m
LCD_LINE1+10: LUT_DATA <= 9'h165; //e
LCD_LINE1+11: LUT_DATA <= 9'h121; //!
LCD_LINE1+12: LUT_DATA <= 9'h120; //" "
LCD_LINE1+13: LUT_DATA <= 9'h120; //" "
LCD_LINE1+14: LUT_DATA <= 9'h120; //" "
LCD_LINE1+15: LUT_DATA <= 9'h120; //" "
// Change Line
LCD_CH_LINE: LUT_DATA <= 9'h0C0; //change line instruction
// Line 2
LCD_LINE2+0: LUT_DATA <= 9'h153; // S
LCD_LINE2+1: LUT_DATA <= 9'h174;//t
LCD_LINE2+2: LUT_DATA <= 9'h161;//a
LCD_LINE2+3: LUT_DATA <= 9'h174;//t
LCD_LINE2+4: LUT_DATA <= 9'h165;//e
LCD_LINE2+5: LUT_DATA <= 9'h13A;//:
LCD_LINE2+6: LUT_DATA <= 9'h120;//
LCD_LINE2+7: LUT_DATA <= 9'h120;//
LCD_LINE2+8: LUT_DATA <= 9'h120;//
LCD_LINE2+9: LUT_DATA <= 9'h120;//
LCD_LINE2+10: LUT_DATA <= 9'h120;//
LCD_LINE2+11: LUT_DATA <= 9'h157;//W
LCD_LINE2+12: LUT_DATA <= 9'h152;//R
LCD_LINE2+13: LUT_DATA <= 9'h14F;//O
LCD_LINE2+14: LUT_DATA <= 9'h14E;//N
LCD_LINE2+15: LUT_DATA <= 9'h147;//G
default: LUT_DATA <= 9'h000;//
endcase
end
5'b01000:
begin
LEDR[17:0]<=18'b111111111111111111;
case(LUT_INDEX)
// Initial
LCD_INTIAL+0: LUT_DATA <= 9'h038; //Function Set:
/*9'h038=9'b0_0011_1000:
位4:1,顯示數(shù)據(jù)長度為:8 bit;
位3:1,顯示2行
位2:0,顯示點陣為5*8
位1、位0:無關(guān)位*/
LCD_INTIAL+1: LUT_DATA <= 9'h00C; //Display ON/OFF Control
/*9'h00C=9'b0_0000_1100:
位2:1,打開顯示
位1:1,顯示光標
位0:0,光標不閃爍*/
LCD_INTIAL+2: LUT_DATA <= 9'h001; //Clear Display
LCD_INTIAL+3: LUT_DATA <= 9'h006; //Entry Mode Set
/*9'h006=9'b0_0000_0110:
TOTEST*/
LCD_INTIAL+4: LUT_DATA <= 9'h080; //Set DDRAM Address
/*設(shè)置DDRAM 的地址:AC(address counter)=0*/
// Line 1 // Welcome!
LCD_LINE1+0: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+1: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+2: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+3: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+4: LUT_DATA <= 9'h157; //W
LCD_LINE1+5: LUT_DATA <= 9'h165; //e
LCD_LINE1+6: LUT_DATA <= 9'h16C; //l
LCD_LINE1+7: LUT_DATA <= 9'h163; //c
LCD_LINE1+8: LUT_DATA <= 9'h16F; //o
LCD_LINE1+9: LUT_DATA <= 9'h16D; //m
LCD_LINE1+10: LUT_DATA <= 9'h165; //e
LCD_LINE1+11: LUT_DATA <= 9'h121; //!
LCD_LINE1+12: LUT_DATA <= 9'h120; //" "
LCD_LINE1+13: LUT_DATA <= 9'h120; //" "
LCD_LINE1+14: LUT_DATA <= 9'h120; //" "
LCD_LINE1+15: LUT_DATA <= 9'h120; //" "
// Change Line
LCD_CH_LINE: LUT_DATA <= 9'h0C0; //change line instruction
// Line 2
LCD_LINE2+0: LUT_DATA <= 9'h153; // S
LCD_LINE2+1: LUT_DATA <= 9'h174;//t
LCD_LINE2+2: LUT_DATA <= 9'h161;//a
LCD_LINE2+3: LUT_DATA <= 9'h174;//t
LCD_LINE2+4: LUT_DATA <= 9'h165;//e
LCD_LINE2+5: LUT_DATA <= 9'h13A;//:
LCD_LINE2+6: LUT_DATA <= 9'h120;//
LCD_LINE2+7: LUT_DATA <= 9'h120;//
LCD_LINE2+8: LUT_DATA <= 9'h120;//
LCD_LINE2+9: LUT_DATA <= 9'h120;//
LCD_LINE2+10: LUT_DATA <= 9'h120;//
LCD_LINE2+11: LUT_DATA <= 9'h141;//a
LCD_LINE2+12: LUT_DATA <= 9'h14C;//l
LCD_LINE2+13: LUT_DATA <= 9'h141;//a
LCD_LINE2+14: LUT_DATA <= 9'h152;//r
LCD_LINE2+15: LUT_DATA <= 9'h14D;//m
default: LUT_DATA <= 9'h000;//
endcase
end
5'b10000:
begin
LEDG[7:0]<=8'b11111111;
case(LUT_INDEX)
// Initial
LCD_INTIAL+0: LUT_DATA <= 9'h038; //Function Set:
/*9'h038=9'b0_0011_1000:
位4:1,顯示數(shù)據(jù)長度為:8 bit;
位3:1,顯示2行
位2:0,顯示點陣為5*8
位1、位0:無關(guān)位*/
LCD_INTIAL+1: LUT_DATA <= 9'h00C; //Display ON/OFF Control
/*9'h00C=9'b0_0000_1100:
位2:1,打開顯示
位1:1,顯示光標
位0:0,光標不閃爍*/
LCD_INTIAL+2: LUT_DATA <= 9'h001; //Clear Display
LCD_INTIAL+3: LUT_DATA <= 9'h006; //Entry Mode Set
/*9'h006=9'b0_0000_0110:
TOTEST*/
LCD_INTIAL+4: LUT_DATA <= 9'h080; //Set DDRAM Address
/*設(shè)置DDRAM 的地址:AC(address counter)=0*/
// Line 1 // Welcome!
LCD_LINE1+0: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+1: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+2: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+3: LUT_DATA <= 9'h120; //" " blank
LCD_LINE1+4: LUT_DATA <= 9'h157; //W
LCD_LINE1+5: LUT_DATA <= 9'h165; //e
LCD_LINE1+6: LUT_DATA <= 9'h16C; //l
LCD_LINE1+7: LUT_DATA <= 9'h163; //c
LCD_LINE1+8: LUT_DATA <= 9'h16F; //o
LCD_LINE1+9: LUT_DATA <= 9'h16D; //m
LCD_LINE1+10: LUT_DATA <= 9'h165; //e
LCD_LINE1+11: LUT_DATA <= 9'h121; //!
LCD_LINE1+12: LUT_DATA <= 9'h120; //" "
LCD_LINE1+13: LUT_DATA <= 9'h120; //" "
LCD_LINE1+14: LUT_DATA <= 9'h120; //" "
LCD_LINE1+15: LUT_DATA <= 9'h120; //" "
// Change Line
LCD_CH_LINE: LUT_DATA <= 9'h0C0; //change line instruction
// Line 2
LCD_LINE2+0: LUT_DATA <= 9'h120;//
LCD_LINE2+1: LUT_DATA <= 9'h153;//S
LCD_LINE2+2: LUT_DATA <= 9'h159;//Y
LCD_LINE2+3: LUT_DATA <= 9'h153; // S
LCD_LINE2+4: LUT_DATA <= 9'h154;//T
LCD_LINE2+5: LUT_DATA <= 9'h145;//E
LCD_LINE2+6: LUT_DATA <= 9'h14D;//M
LCD_LINE2+7: LUT_DATA <= 9'h120;//
LCD_LINE2+8: LUT_DATA <= 9'h14C;//L
LCD_LINE2+9: LUT_DATA <= 9'h14F;//O
LCD_LINE2+10: LUT_DATA <= 9'h143;//C
LCD_LINE2+11: LUT_DATA <= 9'h120;//
LCD_LINE2+12: LUT_DATA <= 9'h14F;//O
LCD_LINE2+13: LUT_DATA <= 9'h150;//P
LCD_LINE2+14: LUT_DATA <= 9'h145;//E
LCD_LINE2+15: LUT_DATA <= 9'h14E;//N
default: LUT_DATA <= 9'h000;//
endcase
end
endcase
end
LCD_Controller u0 ( // Host Side
.iDATA(mLCD_DATA),
.iRS(mLCD_RS),
.iStart(mLCD_Start),
.oDone(mLCD_Done),
.iCLK(iCLK),
.iRST_N(iRST_N),
// LCD Interface
.LCD_DATA(LCD_DATA),
.LCD_RW(LCD_RW),
.LCD_EN(LCD_EN),
.LCD_RS(LCD_RS) );
endmodule
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -