ywhfdl 发表于 2012-4-13 16:10:23

verilog的1602动态显示

在开始,我只想先出出气,他奶奶的!!



接下来,我说下我写这个代码的目的,在网上对于verilog 的1602代码,都只是写一串字符进去,有个鸟用啊!!我们用1602是为了看那几个字符吗??如果是,那么下文你就不用看了,

我想应该不是,我们是为了借助这个液晶,显示更多的东西,把芯片内部的一些调试信息,或则是所需要显示的状态及时拿出来给我们看,这个才是目的,显示器,就是为了获取当前的数据,因此,我在这里写一个1602 的简单动态显示的代码,其状态为:在液晶的第一个位置,写入1--9 的1s自加1,循环,如果这个明白了,那么其他的什么XX,都就明白了!也不多说了,下面是代码,




module LCD
(
rst,
key1,
clk,
rw,
rs,
en,
data,
);
input clk,rst,key1;//CLK 50M
output rs,en,rw;
output data;

reg rs,en_sel;
reg data;
reg add;
reg count,count1,jishu,cnt;//LCD CLK 分频计数器
reg lcd_clk;

reg next,xianshi;
parameter state0=6'h00,   //设置8位格式,2行,5*7    8'h38;
    state1=6'h01,//整体显示,关光标,不闪烁8'h0C    闪烁 8'h0e
    state2=6'h02,//设定输入方式,增量不移位 8'h06
    state3=6'h03,//清除显示   8'h01
    state4=6'h04,//显示第一行的指令80H
    state5=6'h05,//显示第二行的指令80H+40H
   
    scan =6'h06,
    nul=6'h07;

parameter data0=6'h10;
   
always @(posedge clk )   //获得LCD时钟
begin
count<=count+1;
if(count==25000)
begin
   count<=0;
   lcd_clk<=~lcd_clk;
end
end
initial xianshi<=8'b00110001;//让初始化完以后,就显示1
always @(posedge lcd_clk,negedge rst)
begin
if(!rst)
begin
   next<=state0;
   xianshi<=8'b00110001;
end
else
begin
   case(next)
    state0 :
   begin rs<=0; data<=8'h38; next<=state1; end
    state1 :
   begin rs<=0; data<=8'h0e; next<=state2; end
    state2 :
   begin rs<=0; data<=8'h06; next<=state3; end
    state3 :
   begin rs<=0; data<=8'h01; next<=state4; end   
    state4 :
   begin rs<=0; data<=8'h80; next<=data0; end
   
    data0 :
   begin rs<=1; data<=xianshi; next<=scan ; end
    scan :
    begin
   if(add==1000)
   begin
       en_sel<=1;
       add<=0;
       xianshi<=xianshi+8'b00000001;
       if(xianshi==8'b00111001)
      xianshi<=8'b00110001;
       next<=state0;
   
   end
   else
   begin
      add<=add+1;
      en_sel<=0;
      next<=data0;
   end
    end
    default:   next<=state0;
   endcase
end
end
assign en=lcd_clk && en_sel;
assign rw=0;
endmodule


代码能完成基本的0--9自加,但是有瑕疵,我这里就抛砖引玉,高手指点,新手学习!本人是在板子上验证过的哈!不是空口白话。

fhyfhy 发表于 2012-12-31 22:56:29

还不错啊!!继续努力啊
页: [1]
查看完整版本: verilog的1602动态显示