|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 hyjkvvv 于 2012-5-23 13:10 编辑
FPGA用的是VIRTEX 5,XC5VFX130T, LCD用的是1602
程序的功能就是在01H位置处显示一个字符"W"
CLK分别用过250KHZ和1KHZ的,接通后LCD第一行一直是黑色方块,没有其他反应~
想请教下代码有木有问题?还有就是1602插在FPGA上之后需要打开什么开关或者进行其他设置么?谢谢!
代码描述:
input clk,rst; output reg EN,RS,RW; output reg [7:0] DB8;
一开始RW信号置0,RS置0, one信号每个时钟加1,从1到6循环, cc信号在one为6时加1,取值从0到7,
每当one加到等于6时DB8置不同的指令:清屏幕 8'b00000001; 8位总线&1行显示8'b00110000; 光标闪烁显示8'b00001111; 光标右移动,字符显示不移位8'b00000100; 输入显示地址 DB8 <= 8'b10000001; (RS置1)DB8置数据B8 <= h57; (H57是"W"在DDRAM中的字符码)
每当one等于1时EN拉高一个时钟信号后拉低~
代码如下:
module lcd(clk,rst,EN,RS,RW,DB8);
input clk,rst;
output reg EN,RS,RW;
output reg [7:0] DB8;
reg[3:0] cc;
integer one;
always @(posedge clk)
begin
if(!rst)
RW<=1'b0;
end
always @(posedge clk)
begin
if(!rst)
one<=0;
else if ((!cc)&(one==0))
one<=1;
else if(one!=6)
one<=one+1;
else if ((one==6)&(cc!=8))
one<=1;
else if (cc==8)
one<=0;
end
always @(posedge clk)
begin
if(!rst)
cc<=4'h0;
else if (cc==0)
cc<=1;
else if ((cc!=4'h8)&(one==6)&(cc!=0))
cc<=cc+1;
else if(cc==4'h8)
cc<=cc;
end
always @(posedge clk)
begin
if(!rst)
RS <= 1'b0;
else if((cc==6)&(one==3))
RS <= 1'b1;
end
always @(posedge clk)
begin
if(!rst)
DB8 <= 8'h0;
else if(cc==0)
// Clear_Lcd:
DB8 <= 8'b00000001;
else if((cc==1)&(one==6)) //(DB8[7]==1)
//8 BIT AND 1 ROW:
DB8 <= 8'b00110000;
else if((cc==2)&(one==6)) //(DB8[7]==1)
// GUANGBIAOXIANSHI :
DB8 <= 8'b00001111;
else if((cc==3)&(one==6)) //(DB8[7]==1)
// GUANGBIAO RIGHTSHIFT, CHAR NOT MOVE:
DB8 <= 8'b00000100;
else if((cc==4)&(one==6)) //(DB8[7]==1)
//Write_Addr 01H:
DB8 <= 8'b10000001;
else if((cc==6)&(one==6))
DB8 <= 8'h57; // show"W"
end
always @(negedge clk)
begin
if(!rst)
EN<=1'b0;
else if ((cc!=0)&(cc!=6)&(cc!=8)&(one==1))
EN<=1'b1;
else if ((cc!=0)&(cc!=6)&(cc!=8)&(one==2)&(EN==1))
EN<=1'b0;
end
endmodule |
|