诸位帮个忙我的液晶程序 对第一排第一个写一个字符 但是整个屏幕都显示了!!看看!!
module home(clk,rs,rw,en,date);
input clk;
output rs,rw,en;
reg rs,rw,en;
output [7:0] date;
reg [7:0] date;
reg [19:0] cnt;
reg [3:0] sum;
reg [4:0] num;
reg [3:0] temp;
always @(posedge clk)
begin
cnt <= cnt+1;
num <= num+1;
if(num==20)
begin
num <= 0;
temp <= temp+1;
if(temp==15)
begin
temp <= 0;
end
end
if(cnt==500000)
begin
cnt <= 0;
sum = sum+1;
if(sum==15)
begin
sum = 6;
end
end
end
always @(sum,temp)
begin
case(sum)
4'd3 :
begin
rs <= 0;
rw <= 0;
en <= 1;
if(temp==1)
begin
date<= 8'h38;
end
if(temp==10)
begin
en <= 0;
end
end
4'd4 :
begin
rs <= 0;
rw <= 0;
en <= 1;
if(temp==1)
begin
date<= 8'h38;
end
if(temp==10)
begin
en <= 0;
end
end
4'd5 :
begin
rs <= 0;
rw <= 0;
en <= 1;
if(temp==1)
begin
date= 8'h38;
date= 8'h38;
date= 8'h08;
date= 8'h01;
date= 8'h04;
date= 8'h0c;
end
if(temp==10)
begin
en <= 0;
end
end
4'd6 :
begin
rs <= 0;
rw <= 0;
en <= 1;
if(temp==1)
begin
date<= 8'h81;
end
if(temp==10)
begin
en <= 0;
end
end
4'd7 :
begin
rs <= 1;
rw <= 0;
en <= 1;
if(temp==1)
begin
date<= 8'h41;
end
if(temp==10)
begin
en <= 0;
end
end
default :
begin
rs <= 1;
rw <= 1;
en <= 0;
end
endcase
end
endmodule
if(temp==1)
begin
date= 8'h38;
date= 8'h38;
date= 8'h08;
date= 8'h01;
date= 8'h04;
date= 8'h0c;
end
这里可能有问题,RS和RW设置以后数据的读取是不是要在en的fail edge,你一下子对date连续赋值,这些阻塞语句赋值后,date最后的值为8‘h0c,然后你再来个en的下降沿
读取了8’h0c的值。因此,上面的命令都没有执行,所以初始化有问题,你再试试,把大date的赋值用多个包括if(temp==1) begin...end if(temp==10) en <= 0;来写。