专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
怎么用FPGA控制1602液晶,求高手指导一下(已解决)
2019-07-16 01:54
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
7463
14
1149
本帖最后由 hughqfb 于 2013-2-20 11:05 编辑
我自己有简单的verilog-HDL代码,可以显示简单的字符数字,但是我想要实时显示传感器的数据该怎么写呢?封装成一个模块,然后实例化?
大家有资料的可以上传上来,我东西做完了到时也会给大家分享的。嘿嘿。第四层楼我给出了代码。
祝大家新年快乐,万事如意哦!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
hughqfb
1楼-- · 2019-07-16 02:19
精彩回答 2 元偷偷看……
加载中...
hughqfb
2楼-- · 2019-07-16 07:27
关于变量在液晶中的显示方法?单片机中可以用C语言的数组,VerilogHDL中怎么办呢?用case语句的话代码量显得太大了,有没有相对好点的方法呢?
加载中...
hughqfb
3楼-- · 2019-07-16 12:20
下面是Verilog的1602显示代码,其中的变量是从别的模块传递过来的。有没有方法直接可以显示字符呢?
/************************************************************************************/
//LCD1602的显示
//
/************************************************************************************/
module lcd1602(clk,rst,lcd_rs,lcd_en,lcd_rw,lcd_data,back_light,ps_datain);
input clk,rst;//时钟、复位
input [7:0] ps_datain;//PS2数据输入
output lcd_rs,lcd_en,lcd_rw,back_light;//指令/数据控制、片选、读写控制、背光控制
output [7:0] lcd_data;//数据线
reg lcd_rs;//指令/数据控制
reg [7:0] lcd_data;//数据线
reg [7:0] current_state;//当前状态
reg [1:0] state_counter;//状态计数
reg en_temp;//使能标志
reg [15:0] clk_counter;//时钟计数
reg clk_en;//时钟使能
//reg [7:0] ps_datain_temp;
assign back_light=1'b1;//一直设置为高电平
assign lcd_rw=1'b0;//一直为写状态
/********************状态编码******************************/
parameter set0=8'b0000_0000,
set1=8'b0000_0001,
set2=8'b0000_0011,
set3=8'b0000_0100,
set4=8'b0000_0101,
data1=8'b0000_1000,
data2=8'b0000_1001,
data3=8'b0000_1010,
data4=8'b0000_1011,
data5=8'b0000_1100,
data6=8'b0000_1101,
data7=8'b0000_1110,
data8=8'b0000_1111,
data9=8'b0001_0000,
stop=8'b1111_1111;
/**************状态转换时钟***********************/
always @(posedge clk)
begin
if(clk_counter==16'h8000)
begin
clk_counter<=16'h0;
clk_en<=~clk_en;
end
else
clk_counter<=clk_counter+1'b1;
end
/**************状态转换**************************///
always @(posedge clk_en or negedge rst)
begin
if(!rst)
begin
current_state<=set0;
end
else
begin
case (current_state)
/*********************************************************************************/
set0:begin lcd_rs<=1'b0;lcd_data<=8'h38;current_state<=set1; end//显示模式设置
set1:begin lcd_rs<=1'b0;lcd_data<=8'h0c;current_state<=set2; end//显示开及光标设置
set2:begin lcd_rs<=1'b0;lcd_data<=8'h06;current_state<=set3; end//显示光标移动设置
set3:begin lcd_rs<=1'b0;lcd_data<=8'h01;current_state<=set4; end//显示清屏
set4:begin lcd_rs<=1'b0;lcd_data<=8'h80;current_state<=data1; end//设置第一行地址
/***********************************************************************************/
data1:begin lcd_rs<=1'b1;lcd_data<="K";current_state<=data2; end//显示第一个字符
data2:begin lcd_rs<=1'b1;lcd_data<="e";current_state<=data3; end//显示第二个字符
data3:begin lcd_rs<=1'b1;lcd_data<="y";current_state<=data4; end//显示第四个字符
data4:begin lcd_rs<=1'b1;lcd_data<="_";current_state<=data5; end//显示第五个字符
data5:begin lcd_rs<=1'b1;lcd_data<="P";current_state<=data6; end//显示第六个字符
data6:begin lcd_rs<=1'b1;lcd_data<="u";current_state<=data7; end//显示第七个字符
data7:begin lcd_rs<=1'b1;lcd_data<="t";current_state<=data8; end//显示第八个字符
data8:begin lcd_rs<=1'b1;lcd_data<=":";current_state<=data9; end//显示第九个字符
data9:begin lcd_rs<=1'b1;lcd_data<=ps_datain;current_state<=stop; end//显示获取的数据
/*********************************************************************************/
stop:begin //控制指令与数据写入的次数
lcd_rs<=1'b0;
lcd_data<=8'b0000_0000;
if(state_counter!=2'b10)
begin
en_temp<=1'b0;
current_state<=set0;
state_counter<=state_counter+1'b1;
end
else
begin
current_state<=set0;
en_temp<=1'b0;//最后数据写入完成后将lcd_en线拉高
end
end
default: current_state<=set0;
endcase
end
end
assign lcd_en=clk_en|en_temp;//lcd_en为‘1’有效
endmodule
复制代码
加载中...
hughqfb
4楼-- · 2019-07-16 14:07
大家都忙着过年啊!桑心啊!
加载中...
hughqfb
5楼-- · 2019-07-16 15:56
总的来说,1602液晶时序要求并不高,所以只要写好状态机在每个状态写入对应的代码即可!网上的很多1602的verilogHDL代码都是写入静态的字符,如果要求动态显示字符那就要把1602的接口驱完善。写好了我便上传资料,以便后来人参考。
加载中...
qq274822790
6楼-- · 2019-07-16 18:25
精彩回答 2 元偷偷看……
加载中...
1
2
3
下一页
一周热门
更多
>
相关问题
如何用FPGA驱动LCD屏?
5 个回答
请教一下各位专家如何用FPGA做eDP接口?
6 个回答
FPGA CH7301c DVI(显示器数字接口)没有数字输出
7 个回答
100颗FPGA的板子,开开眼界
6 个回答
求教自制最小系统版
10 个回答
基于FPGA的X射线安检设备控制器
2 个回答
CycolneIVGX核心板,可扩展PCIE,光纤接口,大家来鉴赏一下
6 个回答
关于VHDL或Verllog程序稳定性的问题
11 个回答
相关文章
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
Xilinx的FPGA开发工具——ISE开发流程
0个评论
基于FPGA的详细设计流程
0个评论
干货分享,FPGA硬件系统的设计技巧
0个评论
一种通过FPGA对AD9558时钟管理芯片进行配置的方法
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
FPGA
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- /************************************************************************************/
- //LCD1602的显示
- //
- /************************************************************************************/
- module lcd1602(clk,rst,lcd_rs,lcd_en,lcd_rw,lcd_data,back_light,ps_datain);
- input clk,rst;//时钟、复位
- input [7:0] ps_datain;//PS2数据输入
- output lcd_rs,lcd_en,lcd_rw,back_light;//指令/数据控制、片选、读写控制、背光控制
- output [7:0] lcd_data;//数据线
- reg lcd_rs;//指令/数据控制
- reg [7:0] lcd_data;//数据线
- reg [7:0] current_state;//当前状态
- reg [1:0] state_counter;//状态计数
- reg en_temp;//使能标志
- reg [15:0] clk_counter;//时钟计数
- reg clk_en;//时钟使能
- //reg [7:0] ps_datain_temp;
- assign back_light=1'b1;//一直设置为高电平
- assign lcd_rw=1'b0;//一直为写状态
- /********************状态编码******************************/
- parameter set0=8'b0000_0000,
- set1=8'b0000_0001,
- set2=8'b0000_0011,
- set3=8'b0000_0100,
- set4=8'b0000_0101,
- data1=8'b0000_1000,
- data2=8'b0000_1001,
- data3=8'b0000_1010,
- data4=8'b0000_1011,
- data5=8'b0000_1100,
- data6=8'b0000_1101,
- data7=8'b0000_1110,
- data8=8'b0000_1111,
- data9=8'b0001_0000,
- stop=8'b1111_1111;
- /**************状态转换时钟***********************/
- always @(posedge clk)
- begin
- if(clk_counter==16'h8000)
- begin
- clk_counter<=16'h0;
- clk_en<=~clk_en;
- end
- else
- clk_counter<=clk_counter+1'b1;
- end
- /**************状态转换**************************///
- always @(posedge clk_en or negedge rst)
- begin
- if(!rst)
- begin
- current_state<=set0;
- end
- else
- begin
- case (current_state)
- /*********************************************************************************/
- set0:begin lcd_rs<=1'b0;lcd_data<=8'h38;current_state<=set1; end//显示模式设置
- set1:begin lcd_rs<=1'b0;lcd_data<=8'h0c;current_state<=set2; end//显示开及光标设置
- set2:begin lcd_rs<=1'b0;lcd_data<=8'h06;current_state<=set3; end//显示光标移动设置
- set3:begin lcd_rs<=1'b0;lcd_data<=8'h01;current_state<=set4; end//显示清屏
- set4:begin lcd_rs<=1'b0;lcd_data<=8'h80;current_state<=data1; end//设置第一行地址
- /***********************************************************************************/
- data1:begin lcd_rs<=1'b1;lcd_data<="K";current_state<=data2; end//显示第一个字符
- data2:begin lcd_rs<=1'b1;lcd_data<="e";current_state<=data3; end//显示第二个字符
- data3:begin lcd_rs<=1'b1;lcd_data<="y";current_state<=data4; end//显示第四个字符
- data4:begin lcd_rs<=1'b1;lcd_data<="_";current_state<=data5; end//显示第五个字符
- data5:begin lcd_rs<=1'b1;lcd_data<="P";current_state<=data6; end//显示第六个字符
- data6:begin lcd_rs<=1'b1;lcd_data<="u";current_state<=data7; end//显示第七个字符
- data7:begin lcd_rs<=1'b1;lcd_data<="t";current_state<=data8; end//显示第八个字符
- data8:begin lcd_rs<=1'b1;lcd_data<=":";current_state<=data9; end//显示第九个字符
- data9:begin lcd_rs<=1'b1;lcd_data<=ps_datain;current_state<=stop; end//显示获取的数据
- /*********************************************************************************/
- stop:begin //控制指令与数据写入的次数
- lcd_rs<=1'b0;
- lcd_data<=8'b0000_0000;
- if(state_counter!=2'b10)
- begin
- en_temp<=1'b0;
- current_state<=set0;
- state_counter<=state_counter+1'b1;
- end
- else
- begin
- current_state<=set0;
- en_temp<=1'b0;//最后数据写入完成后将lcd_en线拉高
- end
- end
- default: current_state<=set0;
- endcase
- end
- end
- assign lcd_en=clk_en|en_temp;//lcd_en为‘1’有效
- endmodule
复制代码一周热门 更多>