📄 lcd.v
字号:
module lcd(clk,data,rst,rs,rw,en,cs1,cs2,test);
input clk,rst;
output [7:0] data;
output rs,rw,en,cs1,cs2;
output [3:0]test;
reg [3:0] test;
reg [7:0] data,xaddr,yaddr,xpage;
reg [7:0] rom1[31:0],rom2[31:0],rom3[31:0],rom4[31:0];
reg en,rs,rw,cs1,cs2;
reg [4:0]state;
parameter s1=1, s2=2, s3=3, s4=4,
s5=5, s6=6, s7=7, s8=8,
s9=9, s10=10, s11=11, s12=12,
s13=13, s14=14, s15=15, s16=16,
s17=17, s18=18, s19=19;
reg [6:0] addr,addr1;
reg ison;
reg [2:0] count;
initial
begin
rom1[0]=8'h08;rom1[1]=8'h08;rom1[2]=8'h08;rom1[3]=8'h88; //"东",
rom1[4]=8'h68;rom1[5]=8'h18;rom1[6]=8'h0f;rom1[7]=8'he8;
rom1[8]=8'h08;rom1[9]=8'h08;rom1[10]=8'h08;rom1[11]=8'h88;
rom1[12]=8'h08;rom1[13]=8'h0c;rom1[14]=8'h08;rom1[15]=8'h00;
rom1[16]=8'h00;rom1[17]=8'h40;rom1[18]=8'h21;rom1[19]=8'h11;
rom1[20]=8'h0d;rom1[21]=8'h41;rom1[22]=8'h81;rom1[23]=8'h7f;
rom1[24]=8'h01;rom1[25]=8'h05;rom1[26]=8'h09;rom1[27]=8'h31;
rom1[28]=8'h61;rom1[29]=8'h00;rom1[30]=8'h00;rom1[31]=8'h00;
rom2[0]=8'h02;rom2[1]=8'hf2;rom2[2]=8'h12;rom2[3]=8'h12; //"疆",
rom2[4]=8'h12;rom2[5]=8'h3e;rom2[6]=8'h82;rom2[7]=8'hfa;
rom2[8]=8'haa;rom2[9]=8'haa;rom2[10]=8'hfa;rom2[11]=8'haa;
rom2[12]=8'haa;rom2[13]=8'hfb;rom2[14]=8'h82;rom2[15]=8'h00;
rom2[16]=8'h20;rom2[17]=8'h25;rom2[18]=8'h1f;rom2[19]=8'h55;
rom2[20]=8'h81;rom2[21]=8'h7f;rom2[22]=8'h80;rom2[23]=8'hbe;
rom2[24]=8'haa;rom2[25]=8'haa;rom2[26]=8'hbe;rom2[27]=8'haa;
rom2[28]=8'haa;rom2[29]=8'hbe;rom2[30]=8'h80;rom2[31]=8'h00;
rom3[0]=8'h20;rom3[1]=8'h24;rom3[2]=8'h24;rom3[3]=8'ha4; //"教",
rom3[4]=8'hff;rom3[5]=8'ha4;rom3[6]=8'hb4;rom3[7]=8'hac;
rom3[8]=8'h20;rom3[9]=8'h9f;rom3[10]=8'h10;rom3[11]=8'h10;
rom3[12]=8'hf0;rom3[13]=8'h18;rom3[14]=8'h10;rom3[15]=8'h00;
rom3[16]=8'h02;rom3[17]=8'h12;rom3[18]=8'h51;rom3[19]=8'h90;
rom3[20]=8'h7e;rom3[21]=8'h0a;rom3[22]=8'h89;rom3[23]=8'h40;
rom3[24]=8'h20;rom3[25]=8'h1b;rom3[26]=8'h04;rom3[27]=8'h1b;
rom3[28]=8'h60;rom3[29]=8'hc0;rom3[30]=8'h40;rom3[31]=8'h00;
rom4[0]=8'h80;rom4[1]=8'h40;rom4[2]=8'h20;rom4[3]=8'hf8; //"仪",
rom4[4]=8'h07;rom4[5]=8'h00;rom4[6]=8'h38;rom4[7]=8'hc0;
rom4[8]=8'h02;rom4[9]=8'h04;rom4[10]=8'h0c;rom4[11]=8'h80;
rom4[12]=8'h60;rom4[13]=8'h1c;rom4[14]=8'h00;rom4[15]=8'h00;
rom4[16]=8'h00;rom4[17]=8'h00;rom4[18]=8'h00;rom4[19]=8'hff;
rom4[20]=8'h80;rom4[21]=8'h40;rom4[22]=8'h20;rom4[23]=8'h10;
rom4[24]=8'h0b;rom4[25]=8'h04;rom4[26]=8'h0a;rom4[27]=8'h11;
rom4[28]=8'h60;rom4[29]=8'hc0;rom4[30]=8'h40;rom4[31]=8'h00;
end
always @(negedge rst)
begin
if(!rst)
begin
rom1[0]=8'h08;rom1[1]=8'h08;rom1[2]=8'h08;rom1[3]=8'h88; //"东",
rom1[4]=8'h68;rom1[5]=8'h18;rom1[6]=8'h0f;rom1[7]=8'he8;
rom1[8]=8'h08;rom1[9]=8'h08;rom1[10]=8'h08;rom1[11]=8'h88;
rom1[12]=8'h08;rom1[13]=8'h0c;rom1[14]=8'h08;rom1[15]=8'h00;
rom1[16]=8'h00;rom1[17]=8'h40;rom1[18]=8'h21;rom1[19]=8'h11;
rom1[20]=8'h0d;rom1[21]=8'h41;rom1[22]=8'h81;rom1[23]=8'h7f;
rom1[24]=8'h01;rom1[25]=8'h05;rom1[26]=8'h09;rom1[27]=8'h31;
rom1[28]=8'h61;rom1[29]=8'h00;rom1[30]=8'h00;rom1[31]=8'h00;
rom2[0]=8'h02;rom2[1]=8'hf2;rom2[2]=8'h12;rom2[3]=8'h12; //"疆",
rom2[4]=8'h12;rom2[5]=8'h3e;rom2[6]=8'h82;rom2[7]=8'hfa;
rom2[8]=8'haa;rom2[9]=8'haa;rom2[10]=8'hfa;rom2[11]=8'haa;
rom2[12]=8'haa;rom2[13]=8'hfb;rom2[14]=8'h82;rom2[15]=8'h00;
rom2[16]=8'h20;rom2[17]=8'h25;rom2[18]=8'h1f;rom2[19]=8'h55;
rom2[20]=8'h81;rom2[21]=8'h7f;rom2[22]=8'h80;rom2[23]=8'hbe;
rom2[24]=8'haa;rom2[25]=8'haa;rom2[26]=8'hbe;rom2[27]=8'haa;
rom2[28]=8'haa;rom2[29]=8'hbe;rom2[30]=8'h80;rom2[31]=8'h00;
rom3[0]=8'h20;rom3[1]=8'h24;rom3[2]=8'h24;rom3[3]=8'ha4; //"教",
rom3[4]=8'hff;rom3[5]=8'ha4;rom3[6]=8'hb4;rom3[7]=8'hac;
rom3[8]=8'h20;rom3[9]=8'h9f;rom3[10]=8'h10;rom3[11]=8'h10;
rom3[12]=8'hf0;rom3[13]=8'h18;rom3[14]=8'h10;rom3[15]=8'h00;
rom3[16]=8'h02;rom3[17]=8'h12;rom3[18]=8'h51;rom3[19]=8'h90;
rom3[20]=8'h7e;rom3[21]=8'h0a;rom3[22]=8'h89;rom3[23]=8'h40;
rom3[24]=8'h20;rom3[25]=8'h1b;rom3[26]=8'h04;rom3[27]=8'h1b;
rom3[28]=8'h60;rom3[29]=8'hc0;rom3[30]=8'h40;rom3[31]=8'h00;
rom4[0]=8'h80;rom4[1]=8'h40;rom4[2]=8'h20;rom4[3]=8'hf8; //"仪",
rom4[4]=8'h07;rom4[5]=8'h00;rom4[6]=8'h38;rom4[7]=8'hc0;
rom4[8]=8'h02;rom4[9]=8'h04;rom4[10]=8'h0c;rom4[11]=8'h80;
rom4[12]=8'h60;rom4[13]=8'h1c;rom4[14]=8'h00;rom4[15]=8'h00;
rom4[16]=8'h00;rom4[17]=8'h00;rom4[18]=8'h00;rom4[19]=8'hff;
rom4[20]=8'h80;rom4[21]=8'h40;rom4[22]=8'h20;rom4[23]=8'h10;
rom4[24]=8'h0b;rom4[25]=8'h04;rom4[26]=8'h0a;rom4[27]=8'h11;
rom4[28]=8'h60;rom4[29]=8'hc0;rom4[30]=8'h40;rom4[31]=8'h00;
end
end
always @(posedge clk)
begin
count=count+1;
if(count==7)
en=0;
else
en=1;
end
always @(negedge en)
begin
if(!rst)
begin
cs1<=1;
cs2<=0;
if(cs1==1&& cs2==0)
begin
rs<=0;
rw<=0;
data<=8'b00111111;
cs1<=0;
cs2<=1;
state<=s1;
end
else if(cs1==0&& cs2==1)
begin
rs<=0;
rw<=0;
data<=8'b00111111;
cs1<=1;
cs2<=0;
state<=s1;
end
else
begin
cs1<=1;
cs2<=0;
end
test<=7;
xaddr=8'hb8;
yaddr=8'h40;
xpage=8'hb8;
end
else
begin
case(state)
s1:begin
cs1<=1;
cs2<=0;
rs<=0;
rw<=0;
xpage<=8'b10111000;
data<=8'b11000000;
state<=s2;
end
s2:begin
addr1<=0;
rs<=0;
rw<=0;
data<=xpage;
state<=s3;
end
s3:begin
rs<=0;
rw<=0;
data<=8'b01000000;
state<=s4;
end
s4:begin
rs<=1; //左半屏清零
rw<=0;
data<=8'b00000000;
if(xpage>=8'b10111111)
begin
if(addr1>63)
begin
state<=s5;
test[0]<=~test[0];
end
else
begin
addr1<=addr1+1;
state<=s4;
end
end
else
begin
if(addr1>63)
begin
xpage<=xpage+1;
state<=s2;
end
else
begin
addr1<=addr1+1;
state<=s4;
end
end
end
s5:begin
cs1<=0;
cs2<=1;
rs<=0;
rw<=0;
xpage<=8'b10111000;
data<=8'b11000000;
state<=s6;
end
s6:begin
addr1<=0;
rs<=0;
rw<=0;
data<=xpage;
state<=s7;
end
s7:begin
rs<=0;
rw<=0;
data<=8'b01000000;
state<=s8;
end
s8:begin //右半屏清零
rs<=1;
rw<=0;
data<=8'b00000000;
if(xpage>=8'b10111111)
begin
if(addr1>63)
begin
state<=s9;
test[1]<=~test[1];
end
else
begin
addr1<=addr1+1;
state<=s8;
end
end
else
begin
if(addr1>63)
begin
xpage<=xpage+1;
state<=s6;
end
else
begin
addr1<=addr1+1;
state<=s8;
end
end
end
s9:begin
cs1<=1;
cs2<=0;
addr<=0;
rs<=0;
rw<=0;
data<=8'b10111011;
state<=s10;
end
s10:begin
rs<=0;
rw<=0;
data<=8'b01010000;
state<=s11;
end
s11:begin //D
rs<=1;
rw<=0;
data<=rom1[addr];
if(addr>15)
state<=s12;
else
begin
addr<=addr+1;
state<=s11;
end
/* if(addr==0)
data<=8'b10000001;
else if(addr==1)
data<=8'b11111111;
else if(addr==2)
data<=8'b10000001;
else if(addr==3)
data<=8'b10000001;
else if(addr==4)
data<=8'b01111110;
else if(addr==5)
data<=8'b00000000;
if(addr>5)
state<=s12;
else
begin
addr<=addr+1;
state<=s11;
end */
end
s12:begin
addr<=0;
rs<=0;
rw<=0;
data<=8'b01110000;
state<=s13;
end
s13:begin //J
rs<=1;
rw<=0;
data<=rom2[addr];
if(addr>15)
state<=14;
else
begin
addr<=addr+1;
state<=s13;
end
/* if(addr==0)
data<=8'b10000001;
else if(addr==1)
data<=8'b10000001;
else if(addr==2)
data<=8'b01000001;//8'b10000010;
else if(addr==3)
data<=8'b00111111;//8'b11111100;
else if(addr==4)
data<=8'b00000001;//8'b10000000;
else if(addr==5)
data<=8'b00000000;
if(addr>=5)
state<=s14;
else
begin
addr<=addr+1;
state<=s13;
end */
end
s14:begin
// cs1<=0;
// cs2<=1;
cs1<=1;
cs2<=0;
addr<=0;
rs<=0;
rw<=0;
data<=8'b10111100;
state<=s15;
end
s15:begin
rs<=0;
rw<=0;
data<=8'b01010000;
state<=s16;
test[3]<=1;
end
s16:begin //C
test[3]<=0;
rs<=1;
rw<=0;
data<=rom1[16+addr];
if(addr>31)
state<=s17;
else
begin
addr<=addr+1;
state<=s16;
end
/* if(addr==0)
data<=8'b01111110;
else if(addr==1)
data<=8'b10000001;
else if(addr==2)
data<=8'b10000001;
else if(addr==3)
data<=8'b10000001;
else if(addr==4)
data<=8'b11000010;//8'b01000011;
else if(addr==5)
data<=8'b00000000;
if(addr>=5)
state<=s17;
else
begin
addr<=addr+1;
state<=s16;
end */
end
s17:begin
addr<=0;
rs<=0;
rw<=0;
data<=8'b01110000;
state<=s18;
end
s18:begin //E
rs<=1;
rw<=0;
data<=rom2[16+addr];
if(addr>31)
state<=s19;
else
begin
addr<=addr+1;
state<=s18;
end
/* if(addr==0)
data<=8'b10000001;
else if(addr==1)
data<=8'b11111111;
else if(addr==2)
data<=8'b10010001;//8'b10001001;
else if(addr==3)
data<=8'b10111001;//8'b10011101;
else if(addr==4)
data<=8'b11000011;//8'b11000011;
else if(addr==5)
data<=8'b00000000;
if(addr>=5)
state<=s19;
else
begin
addr<=addr+1;
state<=s18;
end */
end
s19:begin state<=s9;end
endcase
end
end
endmodule
/*
--"东",
x"08",x"08",x"08",x"88",x"68",x"18",x"0F",x"E8",
x"08",x"08",x"08",x"88",x"08",x"0C",x"08",x"00",
x"00",x"40",x"21",x"11",x"0D",x"41",x"81",x"7F",
x"01",x"05",x"09",x"31",x"61",x"00",x"00",x"00");
--"疆",
constant rom2:rom:=(
x"02",x"F2",x"12",x"12",x"12",x"3E",x"82",x"FA",
x"AA",x"AA",x"FA",x"AA",x"AA",x"FB",x"82",x"00",
x"20",x"25",x"1F",x"55",x"81",x"7F",x"80",x"BE",
x"AA",x"AA",x"BE",x"AA",x"AA",x"BE",x"80",x"00");
--"教",
constant rom3:rom:=(
x"20",x"24",x"24",x"A4",x"FF",x"A4",x"B4",x"AC",
x"20",x"9F",x"10",x"10",x"F0",x"18",x"10",x"00",
x"02",x"12",x"51",x"90",x"7E",x"0A",x"89",x"40",
x"20",x"1B",x"04",x"1B",x"60",x"C0",x"40",x"00");
--"仪",
constant rom4:rom:=(
x"80",x"40",x"20",x"F8",x"07",x"00",x"38",x"C0",
x"02",x"04",x"0C",x"80",x"60",x"1C",x"00",x"00",
x"00",x"00",x"00",x"FF",x"80",x"40",x"20",x"10",
x"0B",x"04",x"0A",x"11",x"60",x"C0",x"40",x"00");
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -