专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
求教:关于ep2c5t188的1602显示程序
2019-07-16 00:40
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
5339
2
974
麻烦大家帮我看看程序。1602的,晶振是50MHZ的。弄了很久,一直没能显示出来字符。。刚开始接触verilog HDL。希望大家帮帮忙,这个问题困扰很久很久了
1602.txt
下载积分: 积分 -1 分
3.43 KB, 下载次数: 5, 下载积分: 积分 -1 分
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
joneseaver
2019-07-16 03:39
程序在下面。
/*---------------------------
1602 LCD display
----------------------------*/
module LCD_1602
(
rst,clk,rs,rw,en,dataport
);
input rst;
input clk;
output rs;
output rw;
output en;
output [7:0] dataport;
reg f_1MHZ;
reg f_10K;
reg state;
reg state1;
reg rs;
reg rw;
reg[4:0] count1;
reg[7:0] count;
reg[7:0] dataport;
reg[3:0] counter;
//reg[7:0] chara[3:0];
wire en;
///////////////////////////////////////////////
parameter init = 1'b0,
write_data = 1'b1;
assign en = f_10K;
/*---------------------------
1MHZ frequency divided
----------------------------*/
always@(posedge clk )
begin
if(count == 24)
begin
count <= 4'b0;
f_1MHZ <= ~f_1MHZ;
end
else
begin
count <= count + 1'b1;
f_1MHZ <= f_1MHZ;
end
end
/*---------------------------
10KHZ frequency divided
----------------------------*/
always@(posedge f_1MHZ )
begin
if(count == 50)
begin
count1 <= 5'b0;
f_10K <= ~f_10K;
end
else
begin
count1 <= count1 + 1'b1;
f_10K <= f_10K;
end
end
/*---------------------------
character obtain
always @(posedge clk )
begin
case(counter)
4'd0 : chara[counter] = "0" ;
4'd1 : chara[counter] = "1" ;
4'd2 : chara[counter] = "2" ;
4'd3 : chara[counter] = "3" ;
// 4'd4 : chara[flag] = "4" ;
// 4'd5 : chara[flag] = "5" ;
// 4'd6 : chara[flag] = "6" ;
// 4'd7 : chara[flag] = "7" ;
// 4'd8 : chara[flag] = "8" ;
// 4'd9 : chara[flag] = "9" ;
endcase
end
----------------------------*/
/*--------------------------
rst
-------------------------*/
always@(posedge clk or negedge rst ) // rst
begin
if(!rst)
state1 <= init; //如果复位case语句从init开始执行
else
state1 <= state; //否则看state的状态
end
/*---------------------------
LCD initialize
----------------------------*/
//initial begin
always@(posedge f_10K ) // write command
begin
case(state1)
init:
begin
rs <= 1'b0; //写命令
rw <= 1'b0;
counter <= counter + 1'b1;
case(counter)
1:dataport <= 8'h38; //display mode
2:dataport <= 8'h08; // close cursor
3:dataport <= 8'h01; //clear screen
4:dataport <= 8'h06; //cursor move set
5:dataport <= 8'h0c; //open display and cursor set
6:
begin
dataport <= 8'h80; //cursor location
state <= write_data;
counter <= 3'b000; //计数清零
end
default : counter <= 3'b000;
endcase
end
write_data:
begin
rs <= 1'b1; //写数据
rw <= 1'b0;
counter <= counter + 1'b1;
case(counter)
1:dataport <= "F";
2:dataport <= "P";
3:dataport <= "G";
4:dataport <= "A";
5:dataport <= ":";
6:dataport <= " ";
// 7:dataport = chara[0];
// 8:dataport = chara[1];
// 9:dataport = chara[2];
// 10:dataport = chara[3];
7:
begin
rs <= 1'b0;
dataport <= 8'h80;
counter <= 3'b000;
state <= init; //重新刷写字符
end
default : counter <= 3'b000;
endcase
// if(counter == 10)
// begin
// counter = 0;
// state = write_data_2;
// end
end
default: state <= init;
endcase
end
endmodule
加载中...
查看其它2个回答
一周热门
更多
>
相关问题
如何用FPGA驱动LCD屏?
5 个回答
请教一下各位专家如何用FPGA做eDP接口?
6 个回答
FPGA CH7301c DVI(显示器数字接口)没有数字输出
7 个回答
100颗FPGA的板子,开开眼界
6 个回答
求教自制最小系统版
10 个回答
相关文章
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
Xilinx的FPGA开发工具——ISE开发流程
0个评论
基于FPGA的详细设计流程
0个评论
干货分享,FPGA硬件系统的设计技巧
0个评论
一种通过FPGA对AD9558时钟管理芯片进行配置的方法
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
FPGA
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
/*---------------------------
1602 LCD display
----------------------------*/
module LCD_1602
(
rst,clk,rs,rw,en,dataport
);
input rst;
input clk;
output rs;
output rw;
output en;
output [7:0] dataport;
reg f_1MHZ;
reg f_10K;
reg state;
reg state1;
reg rs;
reg rw;
reg[4:0] count1;
reg[7:0] count;
reg[7:0] dataport;
reg[3:0] counter;
//reg[7:0] chara[3:0];
wire en;
///////////////////////////////////////////////
parameter init = 1'b0,
write_data = 1'b1;
assign en = f_10K;
/*---------------------------
1MHZ frequency divided
----------------------------*/
always@(posedge clk )
begin
if(count == 24)
begin
count <= 4'b0;
f_1MHZ <= ~f_1MHZ;
end
else
begin
count <= count + 1'b1;
f_1MHZ <= f_1MHZ;
end
end
/*---------------------------
10KHZ frequency divided
----------------------------*/
always@(posedge f_1MHZ )
begin
if(count == 50)
begin
count1 <= 5'b0;
f_10K <= ~f_10K;
end
else
begin
count1 <= count1 + 1'b1;
f_10K <= f_10K;
end
end
/*---------------------------
character obtain
always @(posedge clk )
begin
case(counter)
4'd0 : chara[counter] = "0" ;
4'd1 : chara[counter] = "1" ;
4'd2 : chara[counter] = "2" ;
4'd3 : chara[counter] = "3" ;
// 4'd4 : chara[flag] = "4" ;
// 4'd5 : chara[flag] = "5" ;
// 4'd6 : chara[flag] = "6" ;
// 4'd7 : chara[flag] = "7" ;
// 4'd8 : chara[flag] = "8" ;
// 4'd9 : chara[flag] = "9" ;
endcase
end
----------------------------*/
/*--------------------------
rst
-------------------------*/
always@(posedge clk or negedge rst ) // rst
begin
if(!rst)
state1 <= init; //如果复位case语句从init开始执行
else
state1 <= state; //否则看state的状态
end
/*---------------------------
LCD initialize
----------------------------*/
//initial begin
always@(posedge f_10K ) // write command
begin
case(state1)
init:
begin
rs <= 1'b0; //写命令
rw <= 1'b0;
counter <= counter + 1'b1;
case(counter)
1:dataport <= 8'h38; //display mode
2:dataport <= 8'h08; // close cursor
3:dataport <= 8'h01; //clear screen
4:dataport <= 8'h06; //cursor move set
5:dataport <= 8'h0c; //open display and cursor set
6:
begin
dataport <= 8'h80; //cursor location
state <= write_data;
counter <= 3'b000; //计数清零
end
default : counter <= 3'b000;
endcase
end
write_data:
begin
rs <= 1'b1; //写数据
rw <= 1'b0;
counter <= counter + 1'b1;
case(counter)
1:dataport <= "F";
2:dataport <= "P";
3:dataport <= "G";
4:dataport <= "A";
5:dataport <= ":";
6:dataport <= " ";
// 7:dataport = chara[0];
// 8:dataport = chara[1];
// 9:dataport = chara[2];
// 10:dataport = chara[3];
7:
begin
rs <= 1'b0;
dataport <= 8'h80;
counter <= 3'b000;
state <= init; //重新刷写字符
end
default : counter <= 3'b000;
endcase
// if(counter == 10)
// begin
// counter = 0;
// state = write_data_2;
// end
end
default: state <= init;
endcase
end
endmodule
一周热门 更多>