原创 FPGA学习二~~LCD1602显示(

2010-4-23 16:16 3268 5 5 分类: FPGA/CPLD

说明一下  我用的是Actel的A3PO30板  晶振是48M的   程序解释得很详细


这个是LCD1602的显示程序   主要是动态机的应用  能够实现动态机保持时间的变化


module yejin(clk,
             reset,
             lcd_rs,
             lcd_rw,
             lcd_e,
             lcd_d);


input clk,reset;
output lcd_rs;
output lcd_rw;
output lcd_e;
output [7:0]lcd_d;


reg lcd_rs,lcd_e;
reg [7:0]lcd_d;


assign lcd_rw=0;


reg [19:0]delay_count;
reg [19:0]num_count;


parameter state1=24'b0000_0000_0000_0000_0000_0001;
parameter state2=24'b0000_0000_0000_0000_0000_0010;
parameter state3=24'b0000_0000_0000_0000_0000_0100;
parameter state4=24'b0000_0000_0000_0000_0000_1000;
parameter state5=24'b0000_0000_0000_0000_0001_0000;
parameter state6=24'b0000_0000_0000_0000_0010_0000;
parameter state7=24'b0000_0000_0000_0000_0100_0000;
parameter state8=24'b0000_0000_0000_0000_1000_0000;
parameter state9=24'b0000_0000_0000_0001_0000_0000;
parameter state10=24'b0000_0000_0000_0010_0000_0000;
parameter state11=24'b0000_0000_0000_0100_0000_0000;
parameter state12=24'b0000_0000_0000_1000_0000_0000;
parameter state13=24'b0000_0000_0001_0000_0000_0000;
parameter state14=24'b0000_0000_0010_0000_0000_0000;
parameter state15=24'b0000_0000_0100_0000_0000_0000;
parameter state16=24'b0000_0000_1000_0000_0000_0000;
parameter state17=24'b0000_0001_0000_0000_0000_0000;
parameter state18=24'b0000_0010_0000_0000_0000_0000;
parameter state19=24'b0000_0100_0000_0000_0000_0000;
parameter state20=24'b0000_1000_0000_0000_0000_0000;
parameter state21=24'b0001_0000_0000_0000_0000_0000;
parameter state22=24'b0010_0000_0000_0000_0000_0000;
parameter state23=24'b0100_0000_0000_0000_0000_0000;



reg [23:0]state;
reg state_change;


always@(posedge clk or negedge reset)
begin
  if(!reset)
    begin
      state_change<=1'b0;
      delay_count<=1'b1;
    end
  else
    if(delay_count==num_count-1)
      begin
        state_change<=1'b1;
        delay_count<=1'b1;
      end
    else
      begin
        state_change<=1'b0;
        delay_count<=delay_count+1'b1;
      end
end


always@(posedge state_change or negedge reset)
begin
  if(!reset)
    begin
      state<=state1;
      num_count<=20'd750000;  //大概15ms
    end
  else
    begin
      case(state)
        state1:
          begin
                 state<=state2;
                 num_count<=20'd4;   //大概80ns
                 lcd_rs<=1'b0;
                 lcd_e<=1'b0;
                 lcd_d<=8'b0011_1000;
          end
        state2:
          begin
                 state<=state3;
                 num_count<=20'd12;  ////大概240ns
                 lcd_e<=1'b1;
          end
        state3:
          begin
                 state<=state4;
             

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条