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

📄 displaylcd.v

📁 一套基于XILIX,SPATAN2,XC2S200 芯片实验板上的,10个典型VRILOGHDL的FPGA实验,有帮助,
💻 V
字号:
module LCDdevice(sysclk, sysrst, DI, RW, EN, CSA, CSB, RST, DATA, ctl);
    input sysclk, sysrst, ctl;
    output reg RW, DI, CSA, CSB, RST;
    inout wire	[7:0]DATA;
    output wire EN;

    reg [4:0] counter;
	reg [9:0] addrnum;
    reg [2:0] state;
    
    reg [7:0] databuf;
    reg ebuf;
	reg [7:0] memregs [255:0];

    parameter RESET=3'B000,INITIAL=3'B001, WRITE=3'B010, IDLE=3'B100;

	//sysclk = 100khz,效果在100KHZ时最好/
    always @(posedge sysclk or negedge sysrst) 
    begin
    	if(!sysrst)
		begin
			RST = 0;
			RW = 0;
			counter = 0;
			state = RESET;
		end
		else
		begin
			case(state)
				RESET: 
				begin
					counter = counter + 1;
					if(counter == 3)
					begin
						RST = 1;	 /*Reset*/
					end
					else if(counter == 5)
					begin
						present_state = INITIAL;
						counter = 0;
					end
				INITIAL :
				begin
				   	counter = counter + 1;
				   	if(counter == 5)
				   	begin
				   		CSA = 1;
						CSB = 1;
						databuf = 8'h3f;   //开显示
						ebuf = 1;	
				   	end
					else if( counter == 6)
						ebuf = 0;
					else if(counter == 7)
					begin
						counter = 0;
						addrnum = 10'b0000000000;
						state = WRITE;
					end
				end
				WRITE :
				begin
					counter = counter + 1;
					CSA = ~(addrnum[6]);
					CSB = addrnum[6];
					ebuf = ~ebuf;

					if (counter[2:1] == 2'b00)//页地址
					begin
						databuf = {(5'B10111),addrnum[9:7]};
					end
					else if (counter[2:1] == 2'b01)//列地址
						databuf = {2'b01,addrnum[5:0]};
					else if (counter[2:1] == 2'b10)//写数据
					begin
						if (ctl)
							databuf = memregs[addrnum[7:0]];
						else
							databuf = 8'h00;
					end
					else if (counter[2:1] == 2'b11)
					begin
						ebuf = 0;
						counter = 0;

						addrnum = addrnum + 1;
						if(addrnum == 10'b1111111111)  //总共1024个字节/
						begin
							addrnum = 10'b0000000000;
							state = IDLE;
						end
					end
				end						   
				IDLE :
				begin
					if (ctl)
						state = INITIAL;
					else
						state = IDLE;
				end
				default: state = INITIAL;
			endcase
		end
    end

    assign DATA = databuf;
    assign EN = ebuf;

    always @(state)
    begin
		if (state == WRITE)
			DI = counter[2];
		else
			DI = 0;
    end

	always @(negedge sysrst)
	begin
		if(!sysrst)
		begin
		memregs[0]=8'h00; memregs[1]=8'h00;memregs[2]=8'hf0;memregs[3]=8'hf8;memregs[4]=8'h98; memregs[5]=8'h98;memregs[6]=8'h98;memregs[7]=8'hfe;memregs[8]=8'h98; memregs[9]=8'h98;memregs[10]=8'h98;memregs[11]=8'h98;memregs[12]=8'hf8;
memregs[13]=8'h00;memregs[14]=8'h00;memregs[15]=8'h00;memregs[16]=8'h00;memregs[17]=8'h80;memregs[18]=8'h84;memregs[19]=8'h86;memregs[20]=8'h86;memregs[21]=8'h86;memregs[22]=8'h86;memregs[23]=8'he6;memregs[24]=8'hf6;memregs[25]=8'h9e;memregs[26]=8'h9e;memregs[27]=8'h8e;memregs[28]=8'h86;memregs[29]=8'h86;memregs[30]=8'h80;memregs[31]=8'h80;memregs[32]=8'h00;memregs[33]=8'h6c;memregs[34]=8'h6c;memregs[35]=8'hfc;memregs[36]=8'hfc;
memregs[37]=8'h66;memregs[38]=8'h66;memregs[39]=8'h00;memregs[40]=8'hc8;memregs[41]=8'h98;memregs[42]=8'h10;memregs[43]=8'h02;memregs[44]=8'hfe;memregs[45]=8'h00;memregs[46]=8'h00;memregs[47]=8'h00;memregs[48]=8'h00;memregs[49]=8'h30;memregs[50]=8'h30;memregs[51]=8'hfe;memregs[52]=8'hfe;
memregs[53]=8'h30;memregs[54]=8'h88;memregs[55]=8'hd8;memregs[56]=8'h98;memregs[57]=8'hfe;memregs[58]=8'hfe;memregs[59]=8'h98;memregs[60]=8'h98;
memregs[61]=8'h98;memregs[62]=8'h18;memregs[63]=8'h00;memregs[64]=8'h00;memregs[65]=8'h20;memregs[66]=8'h20;memregs[67]=8'h20;memregs[68]=8'h20;memregs[69]=8'h20;memregs[70]=8'h20;memregs[71]=8'hfe;memregs[72]=8'hfe;
memregs[73]=8'h20;memregs[74]=8'h20;memregs[75]=8'h20;memregs[76]=8'h20;memregs[77]=8'h20;memregs[78]=8'h60;memregs[79]=8'h00;memregs[80]=8'h00;memregs[81]=8'h70;memregs[82]=8'h70;memregs[83]=8'h96;memregs[84]=8'h9e;memregs[85]=8'h90;memregs[86]=8'h90;memregs[87]=8'h96;memregs[88]=8'h96;memregs[89]=8'h90;memregs[90]=8'h98;memregs[91]=8'h9e;memregs[92]=8'h96;memregs[93]=8'h70;memregs[94]=8'h70;memregs[95]=8'h00;memregs[96]=8'h0;
memregs[97]=8'h00;memregs[98]=8'h00;memregs[99]=8'h00;memregs[100]=8'h00;
memregs[101]=8'h00;memregs[102]=8'h00;memregs[103]=8'h00;memregs[104]=8'h00;memregs[105]=8'h00;memregs[106]=8'h00;memregs[107]=8'h00;memregs[108]=8'h00;memregs[109]=8'h00;memregs[110]=8'h00;memregs[111]=8'h00;memregs[112]=8'h00;memregs[113]=8'h00;memregs[114]=8'h00;memregs[115]=8'h00;memregs[116]=8'h00;memregs[117]=8'h00;memregs[118]=8'h00;memregs[119]=8'h00;memregs[120]=8'h00;memregs[121]=8'h00;memregs[122]=8'h00;memregs[123]=8'h00;memregs[124]=8'h00;memregs[125]=8'h00;memregs[126]=8'h00;memregs[127]=8'h00;memregs[128]=8'h00;memregs[129]=8'h00;memregs[130]=8'h1f;memregs[131]=8'h1f;memregs[132]=8'h04;memregs[133]=8'h04;memregs[134]=8'h04;memregs[135]=8'h3f;memregs[136]=8'h64;memregs[137]=8'h64;memregs[138]=8'h64;memregs[139]=8'h64;memregs[140]=8'h67;memregs[141]=8'h60;memregs[142]=8'h30;memregs[143]=8'h00;memregs[144]=8'h00;memregs[145]=8'h00;memregs[146]=8'h00;memregs[147]=8'h00;memregs[148]=8'h00;memregs[149]=8'h60;memregs[150]=8'h60;memregs[151]=8'h7f;memregs[152]=8'h3f;memregs[153]=8'h00;memregs[154]=8'h00;memregs[155]=8'h00;memregs[156]=8'h00;memregs[157]=8'h00;memregs[158]=8'h00;memregs[159]=8'h00;memregs[160]=8'h00;memregs[161]=8'h1c;memregs[162]=8'h0e;memregs[163]=8'h7f;memregs[164]=8'hff;memregs[165]=8'h03;memregs[166]=8'h0f;memregs[167]=8'h08;memregs[168]=8'h08;memregs[169]=8'h0d;memregs[170]=8'h0c;memregs[171]=8'h04;memregs[172]=8'hff;memregs[173]=8'h04;memregs[174]=8'h06;memregs[175]=8'h02;memregs[176]=8'h00;memregs[177]=8'h02;memregs[178]=8'h63;memregs[179]=8'h7f;memregs[180]=8'h3f;memregs[181]=8'h01;memregs[182]=8'h60;memregs[183]=8'h60;memregs[184]=8'h27;memregs[185]=8'h3e;memregs[186]=8'h18;memregs[187]=8'h3c;memregs[188]=8'h27;memregs[189]=8'h61;memregs[190]=8'h60;memregs[191]=8'h00;memregs[192]=8'h00;memregs[193]=8'h60;memregs[194]=8'h60;memregs[195]=8'h30;memregs[196]=8'h30;memregs[197]=8'h1c;memregs[198]=8'h0e;memregs[199]=8'h03;memregs[200]=8'h03;memregs[201]=8'h0e;memregs[202]=8'h1c;memregs[203]=8'h18;memregs[204]=8'h30;memregs[205]=8'h60;memregs[206]=8'h20;memregs[207]=8'h00;memregs[208]=8'h00;memregs[209]=8'h0c;memregs[210]=8'h04;memregs[211]=8'h04;memregs[212]=8'h04;memregs[213]=8'h04;memregs[214]=8'h44;memregs[215]=8'h44;memregs[216]=8'h7f;memregs[217]=8'h05;memregs[218]=8'h05;memregs[219]=8'h05;memregs[220]=8'h04;memregs[221]=8'h04;memregs[222]=8'h04;memregs[223]=8'h00;memregs[224]=8'h00;memregs[225]=8'h00;memregs[226]=8'h00;memregs[227]=8'h00;memregs[228]=8'h00 memregs[229]=8'h00;memregs[230]=8'h00;memregs[231]=8'h00;memregs[232]=8'h00;memregs[233]=8'h00;memregs[234]=8'h00;memregs[235]=8'h00;memregs[236]=8'h00;memregs[237]=8'h00;memregs[238]=8'h00;memregs[239]=8'h00;memregs[240]=8'h00;memregs[241]=8'h00;memregs[242]=8'h00;memregs[243]=8'h00;memregs[244]=8'h00;memregs[245]=8'h00;memregs[246]=8'h00;memregs[247]=8'h00;memregs[248]=8'h00;memregs[249]=8'h00;memregs[250]=8'h00;memregs[251]=8'h00;memregs[252]=8'h00;memregs[253]=8'h00;memregs[254]=8'h00;memregs[255]=8'h00;
		end
	end
 
endmodule

⌨️ 快捷键说明

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