微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问这段1602LCD的显示程序无法显示的原因(VERILOG)

请问这段1602LCD的显示程序无法显示的原因(VERILOG)

时间:10-02 整理:3721RD 点击:

FPGA用的是VIRTEX 5,XC5VFX130T, LCD用的是1602
程序的功能就是在01H位置处显示一个字符"W"
CLK分别用过250KHZ和1KHZ的,接通后LCD第一行一直是黑色方块,没有其他反应~
想请教下代码有木有问题?还有就是1602插在FPGA上之后需要打开什么开关或者进行其他设置么?谢谢!
代码描述:
input  clk,rst;      output reg  EN,RS,RW;    output reg [7:0] DB8;   
一开始RW信号置0,RS置0, one信号每个时钟加1,从1到6循环, cc信号在one为6时加1,取值从0到7,
每当one加到等于6时DB8置不同的指令:清屏幕 8'b00000001;  8位总线&1行显示8'b00110000;  光标闪烁显示8'b00001111;    光标右移动,字符显示不移位8'b00000100; 输入显示地址 DB8 <= 8'b10000001; (RS置1)DB8置数据B8 <= h57;  (H57是"W"在DDRAM中的字符码)
每当one等于1时EN拉高一个时钟信号后拉低~

代码如下:
module lcd(clk,rst,EN,RS,RW,DB8);
input  clk,rst;     
output reg  EN,RS,RW;
output reg [7:0] DB8;     
reg[3:0] cc;
integer one;
always @(posedge clk)
begin  
if(!rst)
RW<=1'b0;
end
always @(posedge clk)
begin  
if(!rst)
one<=0;
else if ((!cc)&(one==0))
one<=1;
else if(one!=6)
one<=one+1;
else if ((one==6)&(cc!=8))
one<=1;
else if (cc==8)
one<=0;
end
always @(posedge clk)
begin  
if(!rst)
cc<=4'h0;
else if (cc==0)
cc<=1;
else if ((cc!=4'h8)&(one==6)&(cc!=0))
cc<=cc+1;
else if(cc==4'h8)
cc<=cc;
end
always @(posedge clk)
begin
if(!rst)
          RS <= 1'b0;                                    
else if((cc==6)&(one==3))
         RS <= 1'b1;  
end
always @(posedge clk)
begin
if(!rst)
          DB8 <= 8'h0;                                      
else if(cc==0)                                    
    //  Clear_Lcd:
                DB8 <= 8'b00000001;                     
else if((cc==1)&(one==6)) //(DB8[7]==1)
//8 BIT AND 1 ROW:
                DB8 <= 8'b00110000;                     
else if((cc==2)&(one==6))  //(DB8[7]==1)
   //   GUANGBIAOXIANSHI :
                DB8 <= 8'b00001111;                        
else if((cc==3)&(one==6)) //(DB8[7]==1)
   //  GUANGBIAO RIGHTSHIFT, CHAR NOT MOVE:
                DB8 <= 8'b00000100;                     
else if((cc==4)&(one==6)) //(DB8[7]==1)
   //Write_Addr  01H:
                DB8 <= 8'b10000001;                        
else if((cc==6)&(one==6))
DB8 <= 8'h57;  // show"W"
end
always @(negedge clk)
begin  
if(!rst)
EN<=1'b0;
else if ((cc!=0)&(cc!=6)&(cc!=8)&(one==1))
EN<=1'b1;
else if ((cc!=0)&(cc!=6)&(cc!=8)&(one==2)&(EN==1))
EN<=1'b0;
end
endmodule

还是讨论思路,代码,有功夫看的人不多,再说你的代码风格也不好



    谢谢~加了代码描述~

默默的自顶各种迷茫- -|| 谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top