⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.v

📁 stm32数码相框
💻 V
字号:
module lcd(sram_data,in_out_data,clk_in_data,clkin,OE,CE,WE,LB,UB,ADDER,DE,CLKOUT,HSYNC,YSYNC,PON,HL,JGND,DATA,led1,led2);
inout [15:0] sram_data;
input [15:0] in_out_data;
input clkin,clk_in_data;
output DE,CLKOUT,HSYNC,YSYNC,PON,HL,led1,led2,OE,CE,WE,LB,UB,ADDER;
output [15:0]DATA;
output [7:0]JGND;
reg DE,CLKOUT,HSYNC,YSYNC,DEX,PON,TONG,HL,led1,led2,OE,CE,WE,LB,UB,read_need,read,in_rw,rw_o,tt,te,delay;
reg [15:0] DATA;
reg [17:0] ADDER;
reg [17:0] ADDER_TFT;
reg [17:0] ADDER_CON;
reg [5:0] temp;
reg [9:0] tmp;
reg [9:0] temp1;
reg [10:0] temp3;
reg [10:0] temp4;
reg [9:0] temp2;
reg [7:0] JGND;
reg [27:0] jishu1;
reg [27:0] jishu2;
reg [4:0] state;
reg [15:0] rw_data;
reg [15:0] rd_data;
reg [1:0] rw;
reg [4:0] shi;
initial
begin

	DE=1'b0;
	CLKOUT=1'b0;
	HSYNC=1'b0;
	YSYNC=1'b0;
	temp=0;
	tmp=0;
	te=1'b1;
	JGND=8'hff;
	HL=1'b1;
	temp1=0;
	temp2=0;
	temp3=0;
	temp4=0;
	delay=0;
	PON=1'b0;
	TONG=1'b0;
	DATA=16'hffff;
	OE=1'b1;
	CE=1'b1;
	WE=1'b1;
	read_need=1'b0;
	in_rw=1'b1;
	rw=1'b1;
	rd_data=16'hf800;
	ADDER_TFT=18'b00_0000_0000_0000_0000;
	ADDER_CON=18'b00_0000_0000_0000_0000;
	shi=4'b0000;
end

assign sram_data=(rw_o==te)? rw_data:16'hzzzz;

always@(posedge clkin)
if(delay)
begin
	if(temp==6'd14)
	begin	
		CLKOUT=~CLKOUT;
		temp=0;
	end
	else	
		temp=temp+1'b1;
end




always@(posedge clkin)
begin
	if(jishu1==27'd50000000)
	begin	
		led1=~led1;
		jishu1<=0;
	end
	else
	
		jishu1<=jishu1+1'b1;

end

always@(posedge clkin)
begin
	if(jishu2==27'd10000000)
	begin	
		//led2=~led2;
		delay=1;
		jishu2=0;
	end
	else
	
		jishu2<=jishu2+1'b1;

end


always@(posedge clkin)
begin
	if(delay)
		begin
	if(state==6'd14)
	begin	
		state=0;
	end
	else	
		state=state+1'b1;
end
end

always@(posedge clkin)
if(delay)		
begin
	case (state)
               1:begin
                    if(read_need==1)
                    begin
						led2=0;
						ADDER<=ADDER_TFT;
						read=1;
					end
                 end
                2:begin
                    if(read==1)
                    begin
						CE<=0;
					end
				  end 
				3:begin
                    if(read==1)
                    begin
						OE<=1'b0;
						WE<=1'b1;
						UB<=1'b0;
						LB<=1'b0;
						
					end
				  end
				  
			
				4:begin
                    if(read==1)
						begin
							ADDER_TFT<=ADDER_TFT+1;
							OE<=1'b1;
							CE<=1'b1;

							
							read<=1'b0;
							
						end					
					end	
					
				5:begin
                    
							DATA<=sram_data;				
					end
					
				6:begin
                    
						begin
							ADDER<=18'hzzzzz;
							UB<=1'b1;
							LB<=1'b1;
						end					
					end
					
				7:begin
                    if(in_rw==1)
						begin
							ADDER<=ADDER_CON;
							rw<=1'b1;
							led2=1;
						end					
					end
				8:begin
                    if(rw==1)
						begin
							CE<=1'b0;
							WE<=1'b0;
							UB<=1'b0;
							LB<=1'b0;
							led2=1;
							rw_o<=1'b1;
						end					
					end
				
				10:begin
                    if(rw==1)
						begin
							CE<=1'b1;
							WE<=1'b1;
							UB<=1'b1;
							LB<=1'b1;
						end					
					end

				11:begin
                    if(rw==1)
						begin
							
							ADDER_CON<=ADDER_CON+1'b1;
							ADDER<=18'hzzzzz;
							rw<=1'b0;
							rw_o<=1'b0;
							if(shi==4)in_rw<=1'b0;
						end					
					end
					
								
				
				12:begin
                    
							if(temp2==9'd286)
								begin
									ADDER_TFT<=0;
									ADDER_CON<=0;
									
								end
								
					end			
              default:temp3=temp3+1'b1;
           endcase
end

always@(posedge clkin)
 begin
							if(shi==1)rw_data<=16'hf800;
							else if(shi==2)rw_data<=16'h001f;
							else if(shi==3)rw_data<=16'h07e0;
							
end



always@(posedge CLKOUT)
if(delay)
begin
	temp1=temp1+1'b1;
	if(temp1==6'd41)
	begin
		HSYNC=1'b1;
		
	end
		
	else if(DEX&temp1==6'd45)
	begin
		DE=1'b1;
		TONG=1'b1;
		PON=1'b1;
		JGND=8'hff;
		read_need=1'b1;
	end


else if(temp1==10'd285)
JGND=8'h00;
		
	else if(temp1==10'd533)
	begin	
		HSYNC=1'b0;
		DE=1'b0;
		TONG=1'b0;
		temp1=0;
		read_need=1'b0;
		end
end

always@(posedge HSYNC)
if(delay)
	begin
	temp2=temp2+1'b1;
	
	if(temp2==4'd11)
		begin
		YSYNC=1'b1;
		end
	else if(temp2==4'd13)
		begin
			DEX=1'b1;
		end
	else if(temp2==9'd105)
		shi=1;
	else if(temp2==9'd185)
		shi=2;
	else if(temp2==9'd245)
		shi=3;
	else if(temp2==9'd286)
		begin
		DEX=1'b0;
		shi=4;
		end	
	
		
		
	if(temp2==9'd289)
	begin
		YSYNC=1'b0;
		temp2=0;

	end
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -