搜索
bottom↓
回复: 20

12864液晶显示

[复制链接]

出0入0汤圆

发表于 2013-5-29 08:42:08 | 显示全部楼层 |阅读模式
Verilog写液晶12864显示图片取摸之后怎么办啊?  取摸生成的数据怎么处理?单片机上产生的HEX文件不能用啊。求指导???

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-29 09:25:21 | 显示全部楼层
处理成 mif文件 就可以了

出0入0汤圆

 楼主| 发表于 2013-5-29 14:21:12 | 显示全部楼层
关键是用Verilog处理很麻烦 编译软件是QUARTUS ; 有专门的生成MIF软件,但是不可以;如果用Quartus处理的话,需要手输,那么多不现实。怎样可以实现MIF文件的生成???

出0入0汤圆

 楼主| 发表于 2013-5-29 14:21:35 | 显示全部楼层
txmc 发表于 2013-5-29 09:25
处理成 mif文件 就可以了

关键是用Verilog处理很麻烦 编译软件是QUARTUS ; 有专门的生成MIF软件,但是不可以;如果用Quartus处理的话,需要手输,那么多不现实。怎样可以实现MIF文件的生成???

出0入0汤圆

发表于 2013-5-29 15:07:33 | 显示全部楼层
紫风幻月 发表于 2013-5-29 14:21
关键是用Verilog处理很麻烦 编译软件是QUARTUS ; 有专门的生成MIF软件,但是不可以;如果用Quartus处理 ...

给你个软件吧 提取字模的软件你会用吧 将提取出来的字模粘贴到这个软件里面,可以自动生成了 很方便的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-5-29 15:32:09 | 显示全部楼层
我最近接触了下CPLD,有几个感觉
1.CPLD做控制时,程序(严格说不叫程序)相当不好写。
2.感觉CPLD与单片机有很大区别。适用于单片机的,不一定就适合于CPLD,虽然CPLD(也包括FPGA)号称能实现单片机的一切的一切。像DS18B20,DS1302,1602,12864等用单片机很容易控制的东西,用CPLD控制起来可真不简单。
3.做单片机多了,转变思维方式很费劲。

能请教下楼主实现控制12864的思路吗

出0入0汤圆

 楼主| 发表于 2013-5-30 16:58:37 | 显示全部楼层
songshanxiaozi 发表于 2013-5-29 15:32
我最近接触了下CPLD,有几个感觉
1.CPLD做控制时,程序(严格说不叫程序)相当不好写。
2.感觉CPLD与单片机 ...

取摸之后,用Quartus生成MIF文件,然后定制ROM,把数据送到ROM里,通过ROM把数据再送到LCD12864中;   

出0入0汤圆

 楼主| 发表于 2013-5-30 17:00:04 | 显示全部楼层
txmc 发表于 2013-5-29 15:07
给你个软件吧 提取字模的软件你会用吧 将提取出来的字模粘贴到这个软件里面,可以自动生成了 很方便的
...

我知道了  我用Quartus生成MIF文件,已经可以了  谢谢

出0入0汤圆

 楼主| 发表于 2013-5-30 17:14:36 | 显示全部楼层
songshanxiaozi 发表于 2013-5-29 15:32
我最近接触了下CPLD,有几个感觉
1.CPLD做控制时,程序(严格说不叫程序)相当不好写。
2.感觉CPLD与单片机 ...

黑金动力社区的例子  我看不明白  麻烦你看看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-5-30 17:35:38 | 显示全部楼层
把CPLD或者FPGA当单片机使用,那就是写状态机了。某些场合下也不见得比单片机麻烦。

出0入0汤圆

 楼主| 发表于 2013-5-30 18:33:58 | 显示全部楼层
avrwoo 发表于 2013-5-30 17:35
把CPLD或者FPGA当单片机使用,那就是写状态机了。某些场合下也不见得比单片机麻烦。 ...

那你的思路是怎样的?

出0入0汤圆

发表于 2013-6-1 10:02:43 | 显示全部楼层
紫风幻月 发表于 2013-5-30 18:33
那你的思路是怎样的?


思路就是状态机啊。你用单片机驱动个液晶的思路,无非就是读写的时序,然后把它转化成VHDL中的状态机。论坛里不是还有用VHDL写的DS18B20的驱动吗?

出0入0汤圆

 楼主| 发表于 2013-6-1 14:19:05 | 显示全部楼层
avrwoo 发表于 2013-6-1 10:02
思路就是状态机啊。你用单片机驱动个液晶的思路,无非就是读写的时序,然后把它转化成VHDL中的状态机。论 ...

现在的问题是我定制了两个模块  一是ROM  二是液晶程序,我如何把ROM中的值送到液晶里去?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-1 21:05:02 | 显示全部楼层
紫风幻月 发表于 2013-6-1 14:19
现在的问题是我定制了两个模块  一是ROM  二是液晶程序,我如何把ROM中的值送到液晶里去? ...

在你的LCD模块中,在定义一个IN的端口,宽度和和你的ROM位宽一样,把ROM中的数据读过来。

出0入0汤圆

发表于 2013-6-2 08:36:49 | 显示全部楼层
学习一下   

出10入113汤圆

发表于 2013-6-2 08:46:17 | 显示全部楼层
外挂个单片机也行哦

出0入0汤圆

 楼主| 发表于 2013-6-3 08:31:41 | 显示全部楼层
饭桶 发表于 2013-6-2 08:46
外挂个单片机也行哦

如果挂单片机的话,不如直接用单片机就是了,那样就简单了。我用VerilogHDL写的

出0入0汤圆

 楼主| 发表于 2013-6-3 08:32:27 | 显示全部楼层
avrwoo 发表于 2013-6-1 21:05
在你的LCD模块中,在定义一个IN的端口,宽度和和你的ROM位宽一样,把ROM中的数据读过来。 ...

我也想过  不过不知怎加;你有思路吗?

出0入0汤圆

发表于 2013-6-3 10:53:36 | 显示全部楼层
紫风幻月 发表于 2013-6-3 08:32
我也想过  不过不知怎加;你有思路吗?

在你ROM中存好你要显示的数据,需要显示什么信息,就给ROM相应的地址,把数据送给LCD模块。

出0入0汤圆

 楼主| 发表于 2013-6-4 10:13:04 | 显示全部楼层
本帖最后由 紫风幻月 于 2013-6-4 14:51 编辑

1111111111111

出0入0汤圆

 楼主| 发表于 2013-6-4 14:50:28 | 显示全部楼层
紫风幻月 发表于 2013-6-3 08:32
我也想过  不过不知怎加;你有思路吗?

定制好ROM了  数据存进去了   怎么液晶一点反应都没有   谁能看看怎么回事?


module lcd(clock,rst_n,rs,rw,en,data,psb);
input clock;  //system clock,50MHz
input rst_n; //global reset, low level effective
output rs;  //LCD Command/Data select,0=Command,1=Data
output rw;//LCD Read/Write Select,0=Write,1=Read
output en;//LCD Enable,fail edge effective
output [7:0] data;//8-bit LCD DATA
output psb;
//wire
assign psb = 1'b1;
assign rw = 1'b1;  //LCD Write mode
//---------------------------------------------------------
// Produce 0.5KHz(2ms) clock
//---------------------------------------------------------
reg lcd_clock;          //20KHz clock
reg [11:0] lcd_cnt;   //count
always@(posedge clock or negedge rst_n)
begin
if(!rst_n)   //reset
begin
lcd_cnt <= 12'd0;
lcd_clock <= 1'b0;
end
else if(lcd_cnt == 12'd2499)//50us
begin
lcd_cnt <= 12'd0;
lcd_clock <= ~ lcd_clock;   //50us turn,20KHz
end
else
lcd_cnt <= lcd_cnt +1'b1;
end
//---------------------------------------------------------
// Parameter set
//---------------------------------------------------------
parameter IDLE         = 4'd0; //initial
parameter SETMODE      = 4'd1; //entry mode set
parameter SWITCHMODE   = 4'd2; //display status
parameter SETFUNCTION0 = 4'd3; //function set
parameter SETFUNCTION1 = 4'd4; //function set
parameter DISPLAY0     = 4'd5; //Y coord set
parameter DISPLAY1     = 4'd6; //X coord set
parameter WRITERAM     = 4'd7; //write
parameter STOP         = 4'd8; //stop
parameter CLEAR        = 4'd9; //clear
//---------------------------------------------------------
// LCD Read or Write Select
//---------------------------------------------------------
reg [3:0] state;//state
reg rs;//LCD Command/Data select,0=Command,1=Data
//Only write data, the rs will be high level, other is low level
always @(posedge lcd_clock or negedge rst_n)        
begin
if(!rst_n)
rs <= 1'b0;   //reset, command mode
else if(state == WRITERAM)
rs <= 1'b1;   //start write, data mode
else
rs <= 1'b0;   //finish write, command mode
end
reg flag;       //flag, LCD12864 operate finish with low level
assign en  = (flag == 1)?lcd_clock:1'b0;
//---------------------------------------------------------
// State machine
//---------------------------------------------------------
reg [9:0] cnt;  //coord count
reg [7:0] data;    //8-bit LCD DATA
wire [7:0] data_disp; //display data
always@(posedge lcd_clock or negedge rst_n)
begin
if(!rst_n)  //reset
begin
state <= IDLE;
data <= 8'bzzzz_zzzz;
flag <= 1'b1;
cnt <= 10'd0;
end
else
begin
case(state)
//************************start****************************
IDLE :      
begin
state <= SETFUNCTION0;
data <= 8'bzzzz_zzzz;

flag <= 1'b1;
cnt <= 10'd0;
end
//************************ function set ********************
SETFUNCTION0 : begin
data <= 8'h30;//8 bit MPU port
state <= SETMODE ;//basic instruction set
end
//************************ set mode ************************
SETMODE :           //cursor move to the right
begin                   //DDRAM address count add 1
data <= 8'h06; //frame
state <= CLEAR;
end

CLEAR:
begin
data<=8'h01;
state<=SWITCHMODE;
end

//************************ switch mode**********************
SWITCHMODE :         //display on

begin            //cursor display off
data <= 8'h0c; //glint display off
state <= SETFUNCTION1;
end
//*********************** function set *********************
SETFUNCTION1 :
begin
data <= 8'h36;//8 bit MPU port
state <= DISPLAY0;//expanded instruction set
end
//*********************** Y coord set **********************
DISPLAY0 :
begin
data <= {3'b100,cnt[8:4]};
state <= DISPLAY1;
end
//*********************** X coord set ***********************
DISPLAY1 :
begin
data <= {4'd8,cnt[9],3'd0};
state <= WRITERAM;
end
//**********************writeram**************************
WRITERAM :
begin
data <= data_disp;
cnt <= cnt + 1'b1;
if(line_done)
begin
if(frame_done)
state <= STOP;//screen finish
else
state <= DISPLAY0;//line finish
end
else
state <= WRITERAM;
end
//********************** stop******************************
STOP :
begin
state <= STOP;
flag <= 1'b0;
end
default: state <= IDLE;
endcase
end
end
assign line_done = (cnt[3:0] == 4'hf);//line finish
assign frame_done = (cnt[9:4] == 7'h3f);//screen finish
//---------------------------------------------------------// RAM
//---------------------------------------------------------
rom rom (.address (cnt),.clock (clock),.q (data_disp));
endmodule
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表