搜索
bottom↓
回复: 2

lcd1602程序,自身不能驱动1602,得先下个别的1602程序进去才好使是为什么?

[复制链接]

出0入0汤圆

发表于 2011-3-27 16:17:36 | 显示全部楼层 |阅读模式
module lcd_1602(
                output reg rs,            //数据命令选择端(H/L)
                output  rw,               //读写选择端(H/L)
                output  e,                //使能信号
                output reg[8:1] data,     //数据信号
                output led_on,            //背光,高电平开,与vga_vs共用
                input rst_n,clk           //复位,25MHz时钟
                 );
        assign rw=1'b0;                          //始终为写状态
        assign e=lcd_clk;                        //使能高脉冲
        assign led_on=1'b1;                     //开背光
                                         
//******时钟模块*********       
//        *******分频********                                                 
reg[15:1] cnt;
always@(posedge clk) begin
        if(!rst_n) cnt<=1'b0;
//        else if(cnt==15'h7fff) cnt<=15'd0;
        else cnt<=cnt+1'b1;
end

wire lcd_clk = cnt[15];                     // (2^15 / 25M) = 1.31ms

parameter idle =4'b0000;                    //空闲状态

//*********初始化**********
parameter disp =4'b0001;                    //显示模式设置
parameter disp_clr=4'b0011;                 //清屏
parameter cursor_set1=4'b0010;              //光标设置
parameter cursor_set2=4'b0110;              //光标设置

parameter write_add =4'b0111;              //起始地址

//***********写数据***********
parameter write=4'b0101;
parameter write2_add=4'b1101;
parameter write1=4'b1111;

reg[128:1] zifu1_r="  I  LOVE  YOU  ";
reg[128:1] zifu2_r="     FOREVER    ";

reg[4:1] current,next;
reg[5:1] n,m;

always@(posedge lcd_clk,negedge rst_n) begin
        if(!rst_n) current<=idle;
        else current<=next;
end

always  begin
        case(current)
        idle:         next=disp;
           disp:         next=disp_clr;
        disp_clr:     next=cursor_set1;
        cursor_set1:  next=cursor_set2;
        cursor_set2:  next=write_add;
        write_add:    next=write;
        write:        begin
                      if(n==15) next=write2_add;
                      else next=write;
                      end
        write2_add:   next=write1;
        write1:       begin
                      if(m==15) next=write_add;
                      else next=write1;
                   end
        endcase
end

always@(posedge lcd_clk,negedge rst_n) begin
         if(!rst_n) begin
              rs   <= 0;         // 写指令
              data <= 8'hxx;
             end
   else  begin
            case(current)
             idle,disp,cursor_set1,cursor_set2,write_add,write2_add:rs<=1'b0;     //写指令
              write,write1:rs<=1'b1;
             endcase  
  
           case(current)
//*********初始化**********
             disp:         data<=8'h38;           //显示开
                disp_clr:     data<=8'h01;            //清屏指令
             cursor_set1:  data<=8'h0f;            //显示开,光标闪烁
             cursor_set2:  data<=8'h06;            //地址指针加1,整屏不移动
             write_add:    data<=8'h80;                    // 起始地址
             write:    begin
                      data<=zifu1_r[128:121];
                   zifu1_r<={zifu1_r[120:1],zifu1_r[128:121]};
                   n<=n+1'b1;
                       end
             write2_add:data<=8'h80+8'h40;
             write1:begin               
                  data<=zifu2_r[128:121];
                  zifu2_r<={zifu2_r[120:1],zifu2_r[128:121]};
                  m<=m+1'b1;   
                    end
             idle: data<=8'hxx;
          endcase
          end
end

       
endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-4-2 12:36:52 | 显示全部楼层
我前段时间也碰到过这个问题,可能是初始化的问题。

出0入0汤圆

 楼主| 发表于 2011-4-10 10:28:07 | 显示全部楼层
回复【楼主位】molushali 陌路沙砾
-----------------------------------------------------------------------

嗯,初始化的问题,
cursor_set1:  data<=8'h0f;            //显示开,光标闪烁
cursor_set2:  data<=8'h06;            //地址指针加1,整屏不移动
要改成cursor_set1:  data<=8'h06;         
      cursor_set2:  data<=8'h0f;      
这样就好使了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表