FPGA控制LCD1602字符显示

1.LCD1602(DDRAM)的外形是这样子滴:
FPGA控制LCD1602字符显示_第1张图片
背面:
FPGA控制LCD1602字符显示_第2张图片
可见区范围:16✖2行;可通过“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。
FPGA控制LCD1602字符显示_第3张图片
管脚分配:
FPGA控制LCD1602字符显示_第4张图片
2.LCD配置:
(1)通用配置
/*清屏 */
FPGA控制LCD1602字符显示_第5张图片
/*置输入模式 */
FPGA控制LCD1602字符显示_第6张图片
/*显示开关控制 */
FPGA控制LCD1602字符显示_第7张图片
/*置功能 */
FPGA控制LCD1602字符显示_第8张图片
(2)显示数据
FPGA控制LCD1602字符显示_第9张图片
只配置前16个地址(如下),用于显示:
FPGA控制LCD1602字符显示_第10张图片
之后逐次配置第一行、第二行的地址和数据:
/*置第一行地址 */
/*置第一行数据 */
/*置第二行地址 */
/*置第二行数据 */
3.FPGA实现:

module LCD1602(
input clk,
input rst_n,

output reg RS,
output reg RW,
output reg E,
output reg [7:0]DB
);

reg [30:0]counter;
always@(posedge clk or negedge rst_n)
	begin
		if(!rst_n)
			begin
				counter<=0;
				E<=0;
			end 
		else	
			begin
				if(counter<24999)
					counter<=counter+1;
				else 
					begin
						counter<=0;
						E<=~E;
					end 
			end 
	end 

reg [3:0]state;
reg [127:0]disp_data1;
reg [47:0]disp_data2;
reg [3:0]cnt;
always@(posedge E or negedge rst_n)
	begin
		if(!rst_n)
			begin
				state<=0;
				RS<=0;
				RW<=0;
				DB<=0;
				disp_data1<="welcome you come";
				disp_data2<="123456";
			end 
		else	
			begin
				case(state)
					0:begin
						RS<=0;
						RW<=0;
						DB<=8'b00111000;
						state<=1;
					end 
					1:begin
						RS<=0;
						RW<=0;
						DB<=8'b00001100;
						state<=2;
					end 
					2:begin
						RS<=0;
						RW<=0;
						DB<=8'b00000001;
						state<=3;
					end
					3:begin
						RS<=0;
						RW<=0;
						DB<=8'b00010100;
						state<=4;
					end
					4:begin
						RS<=0;
						RW<=0;
						DB<=8'b10000000;
						state<=5;
					end
					5:begin
						RS<=1;
						RW<=0;
						DB<=disp_data1[127:120];
						disp_data1<={disp_data1[119:0],disp_data1[127:120]};
						cnt<=cnt+1;
						if(cnt==15)
							begin
								state<=6;
								cnt<=0;
							end 
					end
					6:begin
						RS<=0;
						RW<=0;
						DB<=8'b11000101;
						state<=7;
					end
					7:begin
						RS<=1;
						RW<=0;
						DB<=disp_data2[47:40];
						disp_data2<={disp_data2[39:0],disp_data2[47:40]};
						cnt<=cnt+1;
						if(cnt==5)
							begin
								state<=4;
								cnt<=0;
							end 
					end
					default:;
					endcase
			end 
	end 

endmodule

你可能感兴趣的:(FPGA控制LCD1602字符显示)