1602LCD

2019-07-16 00:46发布

小弟写了一个1602LCD代码,下到板子上发现液晶无显示,先确定是代码有问题,可用MODELSIM仿真发现功能实现正常,想搞时序仿真,但软件运行起来实在太卡了。望各位走过路过的高手不吝赐教
module lcd1602(rst,clk,rw,rs,d,e);
        input clk,rst;
        output rs,rw,e;
        output [7:0]d;
       
        reg rs,rw,e;
        //reg[7:0]d_buf;
        reg[1:0] state;
        reg[7:0]m16[15:0];
        reg[15:0]clk_cnt;
        reg[4:0]dcnt;
        reg[7:0]d;
        //reg[15:0]cnt;
       
        reg  clk_en;
        //wire dcnt_done;
       
        parameter idle=2'b00;
        parameter write=2'b01;
        //parameter wait_a=2'b10;
       
        //assign d<=rw?8'bzzzzzzzz:d_buf;
        //assign clk_en=&clk_cnt;
        //assign dcnt_done=&dcnt;
       
        always@(posedge clk or negedge rst)begin
                if(!rst)begin
                        clk_cnt<=0;
                        clk_en<=0;
                end
                else begin clk_cnt<=clk_cnt+16'b1;
                if(clk_cnt==32767)
                        clk_en<=~clk_en; end
        end
       
        always@(posedge clk_en or negedge rst)begin
                if(!rst)begin
                        d<=8'h00;
                        state<=idle;
                        dcnt<=0;
                        e<=0;
                        //cnt<=0;
                end
                else begin
                case(state)
                        idle: begin
                                                m16[0]<=8'h30;
                                                m16[1]<=8'h0c;
                                                m16[2]<=8'h06;
                                                m16[3]<=8'h01;
                                                m16[4]<=8'h80;
                                                m16[5]<="H";
                                                m16[6]<="E";
                                                m16[7]<="L";
                                                m16[8]<="L";
                                                m16[9]<="O";
                                                m16[10]<=" ";
                                                m16[11]<="W";
                                                m16[12]<="O";
                                                m16[13]<="R";
                                                m16[14]<="L";
                                                m16[15]<="D";
                                                rw<=0;
                                                e<=0;
                                                dcnt<=0;
                                                        state<=write;
                                        end
                        write:begin
                                                e<=1;
                                                dcnt<=dcnt+4'd1;
                                                d<=m16[dcnt];
                                                        if(dcnt<=3)begin
                                                                rs<=0;
                                                                state<=write;
                                                        end
                                                        else begin
                                                                if(dcnt==5'h0f)
                                                                        state<=idle;
                                                                else begin
                                                                        rs<=1;
                                                                        state<=write;
                                                                end
                                                        end        
                                                end
                default:state<=idle;
                        endcase
                end
        end

endmodule        

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
youzizhile
1楼-- · 2019-07-16 01:12
参照LCD时序设计的吗?lcd1602首先要初始化的, 1602 lcd初始化.JPG ,我觉得你没有满足这个时序。要满足也这个时序才行,修改下程序。参考下这个http://blog.sina.com.cn/s/blog_6144b6670100j37o.html
dqg3121
2楼-- · 2019-07-16 03:05
 精彩回答 2  元偷偷看……
小工兵
3楼-- · 2019-07-16 08:34
youzizhile 发表于 2014-4-30 14:19
参照LCD时序设计的吗?lcd1602首先要初始化的,,我觉得你没有满足这个时序。要满足也这个时序才行,修改下 ...

谢谢,问题解决了,只要不要重复地清屏就可以了
小工兵
4楼-- · 2019-07-16 13:07
dqg3121 发表于 2014-4-30 16:50
留过qq,1079667326,我也在搞这个,可以交流

谢谢,问题解决了,只要不重复地清屏就可以了,我的程序里,每次都要清一下屏,所以才会出现那种情况
dqg3121
5楼-- · 2019-07-16 17:56
哦,不错啊,可以共同交流学习
小工兵
6楼-- · 2019-07-16 19:08
dqg3121 发表于 2014-5-3 15:08
哦,不错啊,可以共同交流学习

。。。。。。。。。。

一周热门 更多>