在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2340|回复: 3

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

[复制链接]
发表于 2012-5-22 21:14:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 hyjkvvv 于 2012-5-23 13:10 编辑

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
发表于 2012-5-23 10:17:07 | 显示全部楼层
还是讨论思路,代码,有功夫看的人不多,再说你的代码风格也不好
 楼主| 发表于 2012-5-23 15:07:34 | 显示全部楼层
回复 2# solarwafer


    谢谢~加了代码描述~
 楼主| 发表于 2012-5-24 10:25:23 | 显示全部楼层
默默的自顶~~各种迷茫- -|| 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 14:31 , Processed in 0.016901 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表