Verilog HDL 之 LCD1602英文显示
从即日起,开始将自己变成一名真正的程序猿……
今天开始使用Verilog HDL进行建模,首先真是的是LCD1602英文显示部分的代码,具体代码如下:
1 module lcd1602 (clock, reset, rw, en,data); 2 input clock; //系统时钟输入50M 3 output [7:0] data; //LCD的8位数据口 4 output reset,rw,en; //LCD的控制脚 5 6 wire e; 7 wire [7:0] data; 8 wire clkr; 9 wire reset; 10 //reg [15:0] counter; 11 12 13 clock_dev u1 ( 14 .clock(clock), 15 .clk_out(clkr)); 16 17 display u2( 18 .clkr(clkr), 19 .data(data), 20 .reset(reset), 21 .e(e)); 22 assign en=clkr|e; 23 assign rw=0; 24 endmodule
4 module lcd1602 (clock, reset, rw, en,data); 5 input clock; //系统时钟输入50M 6 output [7:0] data; //LCD的8位数据口 7 output reset,rw,en; //LCD的控制脚 8 9 wire e; 10 wire [7:0] data; 11 wire clkr; 12 wire reset; 13 //reg [15:0] counter; 14 15 16 clock_dev u1 ( 17 .clock(clock), 18 .clk_out(clkr)); 19 20 display u2( 21 .clkr(clkr), 22 .data(data), 23 .reset(reset), 24 .e(e)); 25 assign en=clkr|e; 26 assign rw=0; 27 endmodule
采用分层设计原理,这是顶层部分,底层还有始终分频模快和具体显示控制模块,
1 module clock_dev(clock,clk_out); 2 input clock; 3 output reg clk_out; 4 5 reg [31:0] counter; 6 7 always @ (posedge clock) 8 begin 9 if (counter<32'hfffe) 10 counter=counter+32'd1; 11 else 12 counter=32'd0; 13 end 14 15 always @ (posedge clock ) 16 begin 17 if (counter==32'hff) 18 clk_out=~clk_out; 19 20 end 21 22 endmodule 23
最后是显示控制模块: