紫风幻月 发表于 2013-5-29 08:42:08

12864液晶显示

Verilog写液晶12864显示图片取摸之后怎么办啊?取摸生成的数据怎么处理?单片机上产生的HEX文件不能用啊。求指导???

txmc 发表于 2013-5-29 09:25:21

处理成 mif文件 就可以了

紫风幻月 发表于 2013-5-29 14:21:12

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

紫风幻月 发表于 2013-5-29 14:21:35

txmc 发表于 2013-5-29 09:25 static/image/common/back.gif
处理成 mif文件 就可以了

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

txmc 发表于 2013-5-29 15:07:33

紫风幻月 发表于 2013-5-29 14:21 static/image/common/back.gif
关键是用Verilog处理很麻烦 编译软件是QUARTUS ; 有专门的生成MIF软件,但是不可以;如果用Quartus处理 ...

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

songshanxiaozi 发表于 2013-5-29 15:32:09

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

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

紫风幻月 发表于 2013-5-30 16:58:37

songshanxiaozi 发表于 2013-5-29 15:32 static/image/common/back.gif
我最近接触了下CPLD,有几个感觉
1.CPLD做控制时,程序(严格说不叫程序)相当不好写。
2.感觉CPLD与单片机 ...

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

紫风幻月 发表于 2013-5-30 17:00:04

txmc 发表于 2013-5-29 15:07 static/image/common/back.gif
给你个软件吧 提取字模的软件你会用吧 将提取出来的字模粘贴到这个软件里面,可以自动生成了 很方便的
...

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

紫风幻月 发表于 2013-5-30 17:14:36

songshanxiaozi 发表于 2013-5-29 15:32 static/image/common/back.gif
我最近接触了下CPLD,有几个感觉
1.CPLD做控制时,程序(严格说不叫程序)相当不好写。
2.感觉CPLD与单片机 ...

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

avrwoo 发表于 2013-5-30 17:35:38

把CPLD或者FPGA当单片机使用,那就是写状态机了。某些场合下也不见得比单片机麻烦。

紫风幻月 发表于 2013-5-30 18:33:58

avrwoo 发表于 2013-5-30 17:35 static/image/common/back.gif
把CPLD或者FPGA当单片机使用,那就是写状态机了。某些场合下也不见得比单片机麻烦。 ...

那你的思路是怎样的?

avrwoo 发表于 2013-6-1 10:02:43

紫风幻月 发表于 2013-5-30 18:33 static/image/common/back.gif
那你的思路是怎样的?

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

紫风幻月 发表于 2013-6-1 14:19:05

avrwoo 发表于 2013-6-1 10:02 static/image/common/back.gif
思路就是状态机啊。你用单片机驱动个液晶的思路,无非就是读写的时序,然后把它转化成VHDL中的状态机。论 ...

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

avrwoo 发表于 2013-6-1 21:05:02

紫风幻月 发表于 2013-6-1 14:19 static/image/common/back.gif
现在的问题是我定制了两个模块一是ROM二是液晶程序,我如何把ROM中的值送到液晶里去? ...

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

二进制 发表于 2013-6-2 08:36:49

学习一下   

饭桶 发表于 2013-6-2 08:46:17

外挂个单片机也行哦

紫风幻月 发表于 2013-6-3 08:31:41

饭桶 发表于 2013-6-2 08:46 static/image/common/back.gif
外挂个单片机也行哦

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

紫风幻月 发表于 2013-6-3 08:32:27

avrwoo 发表于 2013-6-1 21:05 static/image/common/back.gif
在你的LCD模块中,在定义一个IN的端口,宽度和和你的ROM位宽一样,把ROM中的数据读过来。 ...

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

avrwoo 发表于 2013-6-3 10:53:36

紫风幻月 发表于 2013-6-3 08:32 static/image/common/back.gif
我也想过不过不知怎加;你有思路吗?

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

紫风幻月 发表于 2013-6-4 10:13:04

本帖最后由 紫风幻月 于 2013-6-4 14:51 编辑

1111111111111

紫风幻月 发表于 2013-6-4 14:50:28

紫风幻月 发表于 2013-6-3 08:32 static/image/common/back.gif
我也想过不过不知怎加;你有思路吗?

定制好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 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 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 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 cnt;//coord count
reg data;    //8-bit LCD DATA
wire 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};
state <= DISPLAY1;
end
//*********************** X coord set ***********************
DISPLAY1 :
begin
data <= {4'd8,cnt,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 == 4'hf);//line finish
assign frame_done = (cnt == 7'h3f);//screen finish
//---------------------------------------------------------// RAM
//---------------------------------------------------------
rom rom (.address (cnt),.clock (clock),.q (data_disp));
endmodule
页: [1]
查看完整版本: 12864液晶显示