LCD1602显示英文字符实验FPGA(EP4CE6)Verilog例程quartus11.0工程源码,可以做为你的学习设计参考。 module lcd(clk, rs, rw, en,dat); input clk; output [7:0] dat; output rs,rw,en; //tri en; reg e; reg [7:0] dat; reg rs; reg [15:0] counter; reg [4:0] current,next; reg clkr; reg [1:0] cnt; parameter set0=4'h0; parameter set1=4'h1; parameter set2=4'h2; parameter set3=4'h3; parameter dat0=4'h4; parameter dat1=4'h5; parameter dat2=4'h6; parameter dat3=4'h7; parameter dat4=4'h8; parameter dat5=4'h9; parameter dat6=4'hA; parameter dat7=4'hB; parameter dat8=4'hC; parameter dat9=4'hD; parameter dat10=4'hE; parameter dat11=5'h10; parameter nul=4'hF; always @(posedge clk) begin counter=counter+1; if(counter==16'h000f) clkr=~clkr; end always @(posedge clkr) begin current=next; case(current) set0: begin rs<=0; dat<=8'h30; next<=set1; end set1: begin rs<=0; dat<=8'h0c; next<=set2; end set2: begin rs<=0; dat<=8'h6; next<=set3; end set3: begin rs<=0; dat<=8'h1; next<=dat0; end dat0: begin rs<=1; dat<="H"; next<=dat1; end dat1: begin rs<=1; dat<="E"; next<=dat2; end dat2: begin rs<=1; dat<="L"; next<=dat3; end dat3: begin rs<=1; dat<="L"; next<=dat4; end dat4: begin rs<=1; dat<="O"; next<=dat5; end dat5: begin rs<=1; dat<=" "; next<=dat6; end dat6: begin rs<=1; dat<="W"; next<=dat7; end dat7: begin rs<=1; dat<="O"; next<=dat8; end dat8: begin rs<=1; dat<="R"; next<=dat9; end dat9: begin rs<=1; dat<="L"; next<=dat10; end dat10: begin rs<=1; dat<="D"; next<=dat11; end dat11: begin rs<=1; dat<="!"; next<=nul; end nul: begin rs<=0; dat<=8'h00; //行一遍 然后 把液晶的E 脚 拉高 if(cnt!=2'h2) begin e<=0;next<=set0;cnt<=cnt+1; end else begin next<=nul; e<=1;
LCD12864屏显示中文实验cylone4e FPGA(EP4CE6)Verilog例程quartus11.0工程源码,可以做为你的学习设计参考。 module LCD12864 (clk, rs, rw, en,dat); input clk; //系统时钟输入50M output [7:0] dat; //LCD的8位数据口 output rs,rw,en; //LCD的控制脚 reg e; reg [7:0] dat; reg rs; reg [15:0] counter; reg [6:0] current,next; reg clkr; reg [1:0] cnt; //定义的一些状态机。 parameter set0=6'h0; parameter set1=6'h1; parameter set2=6'h2; parameter set3=6'h3; parameter set4=6'h4; parameter set5=6'h5; parameter set6=6'h6; parameter dat0=6'h7; parameter dat1=6'h8; parameter dat2=6'h9; parameter dat3=6'hA; parameter dat4=6'hB; parameter dat5=6'hC; parameter dat6=6'hD; parameter dat7=6'hE; parameter dat8=6'hF; parameter dat9=6'h10; parameter dat10=6'h11; parameter dat11=6'h12; parameter dat12=6'h13; parameter dat13=6'h14; parameter dat14=6'h15; parameter dat15=6'h16; parameter dat16=6'h17; parameter dat17=6'h18; parameter dat18=6'h19; parameter dat19=6'h1A; parameter dat20=6'h1B; parameter dat21=6'h1C; parameter dat22=6'h1D; parameter dat23=6'h1E; parameter dat24=6'h1F; parameter dat25=6'h20; parameter dat26=6'h21; parameter dat27=6'h22; parameter dat28=6'h23; parameter dat29=6'h24; parameter dat30=6'h25; parameter dat31=6'h26; parameter dat32=6'h27; parameter dat33=6'h28; parameter dat34=6'h29; parameter dat35=6'h2A; parameter dat36=6'h2B; parameter dat37=6'h2C; parameter dat38=6'h2D; parameter dat39=6'h2E; parameter dat40=6'h3F; parameter nul=6'h35; always @(posedge clk) // begin counter=counter+1; if(counter==16'h000f) clkr=~clkr; end always @(posedge clkr) begin current=next; case(current) set0: begin rs<=0; dat<=8'h31; next<=set1; end //*设置8位格式,* set1: begin rs<=0; dat<=8'h0C; next<=set2; end //*整体显示,关光标,不闪烁*/ set2: begin rs<=0; dat<=8'h06; next<=set3; end //*设定输入方式,增量不移位*/ set3: begin rs<=0;