黑金开发板板上实现的液晶刷屏程序(1)

1、首先介绍一下手中的资源配置

(声明:本人只是黑金开发板的用户,并非黑金技术支持

  FPGA芯片型号:Cyclone IV,EP4CE15

  液晶参数:SSD1289,320*240,RGB(565)

  开发板from:黑金淘宝官网

  TFT液晶from:黑金淘宝官网

2、向上一张贴图:

  

3、贴上自己的源码:

  1)显示部分代码:

  1 module TFT(
  2     //system
  3     CLK,
  4     RSTn,
  5     //tft signal
  6     LCD_CS,
  7     LCD_RS,
  8     LCD_RD,
  9     LCD_WR,
 10     LCD_RST,
 11     LCD_DATA
 12 );
 13     
 14     input             CLK;
 15     input             RSTn;
 16     //TIF signal wire
 17     output            LCD_CS;
 18     output            LCD_RS;
 19     output             LCD_RD;
 20     output             LCD_WR;
 21     output            LCD_RST;
 22     output [15:0]    LCD_DATA;
 23     
 24     reg                LCD_CS;
 25     reg                LCD_RS;
 26     reg                LCD_WR;
 27     reg        [15:0]    LCD_DATA;
 28     
 29     assign LCD_RD     = 1'b1;
 30     assign LCD_RST     = 1'b1;
 31         
 32     reg [3:0]        state_lcd_write;
 33     reg [7:0]        addr_command;
 34     reg    [16:0]        LCD_DATA_TEMP;
 35     reg [31:0]        count_dot;
 36     reg [15:0]        count_delay;
 37     always @(posedge CLK or negedge RSTn)
 38     if(!RSTn)
 39         begin
 40             state_lcd_write <= 4'd0;
 41             LCD_CS <= 1'b1;
 42             LCD_WR <= 1'b1;
 43             LCD_RS <= 1'b0;
 44             LCD_DATA <= 16'd0;
 45             addr_command <= 8'd0;
 46             LCD_DATA_TEMP <= 17'd0;
 47             count_dot <= 16'd0;
 48             count_delay <= 16'd0;
 49         end
 50     else
 51         begin
 52         case(state_lcd_write)
 53             4'd0:
 54                 if(count_delay == 16'd2499)//init delay
 55                     begin
 56                         state_lcd_write <= 4'd1;
 57                         count_delay <= 16'd0;
 58                     end
 59                 else
 60                     begin
 61                     state_lcd_write <= 4'd0;
 62                     count_delay <= count_delay + 1'b1;
 63                     end
 64             4'd1:
 65                 if(count_delay == 16'd999)//dot delay
 66                     begin
 67                         state_lcd_write <= 4'd2;
 68                         LCD_CS        <= 1'b1;
 69                         LCD_WR        <= 1'b1;
 70                         LCD_DATA_TEMP<=display_command(addr_command);
 71                         count_delay <= 16'd0;
 72                     end
 73                 else
 74                     begin
 75                     state_lcd_write <= 4'd1;
 76                     count_delay <= count_delay + 1'b1;
 77                     end
 78             4'd2:
 79                 if(LCD_DATA_TEMP[16])//data
 80                     begin
 81                         state_lcd_write <= state_lcd_write + 1'b1;
 82                         LCD_CS    <= 1'b0;
 83                         LCD_RS    <= 1'b0;
 84                         LCD_WR    <= 1'b0;
 85                         LCD_DATA<= LCD_DATA_TEMP[15:0];
 86                     end
 87                 else    //command
 88                     begin
 89                         state_lcd_write <= state_lcd_write + 1'b1;
 90                         LCD_CS    <= 1'b0;
 91                         LCD_RS    <= 1'b1;
 92                         LCD_WR    <= 1'b0;
 93                         LCD_DATA<= LCD_DATA_TEMP[15:0];
 94                     end
 95             4'd3:
 96                 state_lcd_write <= state_lcd_write + 1'b1;
 97             4'd4:
 98                 begin
 99                     state_lcd_write <= state_lcd_write + 1'b1;
100                     LCD_CS    <= 1'b1;
101                 end
102             4'd5:
103                 begin 
104                     state_lcd_write <= state_lcd_write + 1'b1;
105                     LCD_WR    <= 1'b1;
106                 end
107             4'd6:if(addr_command == 8'd83)            //red
108                     begin
109                         count_dot <= count_dot + 1'b1;
110                         state_lcd_write <= 4'd1;
111                         if(count_dot == 32'd76800 )
112                             begin 
113                                 addr_command <= 8'd84;
114                                 count_dot <= 32'd1;
115                             end
116                         else state_lcd_write <= 4'd1;
117                     end
118                 else if(addr_command == 8'd84)        //white
119                     begin
120                         count_dot <= count_dot + 1'b1;
121                         state_lcd_write <= 4'd1;
122                         if(count_dot ==32'd76800 )
123                             begin 
124                                 addr_command <= 8'd83;
125                                 count_dot <= 32'd0;
126                             end
127                         else state_lcd_write <= 4'd1;
128                     end
129                 else 
130                     begin
131                         addr_command <= addr_command + 1'b1;
132                         state_lcd_write <= 4'd0;
133                     end
134             4'd7:state_lcd_write <= 4'd7;
135                         
136                     
137         endcase
138         end
139     
140     function [16:0] display_command;
141     input [7:0]addr;
142         begin
143             case (addr)
144                 8'd0:display_command = {1'b1,16'h0000};
145                 8'd1:display_command = {1'b0,16'h0001};
146                 
147                 8'd2:display_command = {1'b1,16'h0003};
148                 8'd3:display_command = {1'b0,16'h6664};
149                 
150                 8'd4:display_command = {1'b1,16'h000C};
151                 8'd5:display_command = {1'b0,16'h0000};
152                                       
153                 8'd6:display_command = {1'b1,16'h000D};
154                 8'd7:display_command = {1'b0,16'h080C};
155                 
156                 8'd8:display_command = {1'b1,16'h000E};
157                 8'd9:display_command = {1'b0,16'h2B00};
158                                      
159                 8'd10:display_command = {1'b1,16'h001E};
160                 8'd11:display_command = {1'b0,16'h00B0};
161                 
162                 8'd12:display_command = {1'b1,16'h0001};                 
163                 8'd13:display_command = {1'b0,16'h2B3F};
164                 
165                 8'd14:display_command = {1'b1,16'h0002};
166                 8'd15:display_command = {1'b0,16'h0600};
167                 
168                 8'd16:display_command = {1'b1,16'h0010};
169                 8'd17:display_command = {1'b0,16'h0000};
170                 
171                 8'd18:display_command = {1'b1,16'h0011};//set display control mode
172                 8'd19:display_command = {1'b0,16'h6070};
173                 
174                 8'd20:display_command = {1'b1,16'h0005};
175                 8'd21:display_command = {1'b0,16'h0000};
176                 
177                 8'd22:display_command = {1'b1,16'h0006};           
178                 8'd23:display_command = {1'b0,16'h0000};
179                 
180                 8'd24:display_command = {1'b1,16'h0016};
181                 8'd25:display_command = {1'b0,16'hEF1C};
182                 
183                 8'd26:display_command = {1'b1,16'h0017};
184                 8'd27:display_command = {1'b0,16'h0003};
185                 8'd28:display_command = {1'b1,16'h0007};
186                 8'd29:display_command = {1'b0,16'h0233};
187                 8'd30:display_command = {1'b1,16'h000B};
188                 8'd31:display_command = {1'b0,16'h0000};
189                 8'd32:display_command = {1'b1,16'h000F};
190                 8'd33:display_command = {1'b0,16'h0000};
191                 8'd34:display_command = {1'b1,16'h0041};
192                 8'd35:display_command = {1'b0,16'h0000};
193                 8'd36:display_command = {1'b1,16'h0042};
194                 8'd37:display_command = {1'b0,16'h0000};
195                                       
196                 8'd38:display_command = {1'b1,16'h0048};
197                 8'd39:display_command = {1'b0,16'h0000};
198                                   
199                 8'd40:display_command = {1'b1,16'h0049};
200                 8'd41:display_command = {1'b0,16'h013F};
201                                   
202                 8'd42:display_command = {1'b1,16'h004A};
203                 8'd43:display_command = {1'b0,16'h0000};
204                 
205                 8'd44:display_command = {1'b1,16'h004B};
206                 8'd45:display_command = {1'b0,16'h0000};
207                 
208                 8'd46:display_command = {1'b1,16'h0044};//horizontal ram address
209                 8'd47:display_command = {1'b0,16'hEF00};
210                 
211                 8'd48:display_command = {1'b1,16'h0045};//v
212                 8'd49:display_command = {1'b0,16'h0000};
213                 
214                 8'd50:display_command = {1'b1,16'h0046};
215                 8'd51:display_command = {1'b0,16'h013f};
216                 
217                 8'd52:display_command = {1'b1,16'h0030};
218                 8'd53:display_command = {1'b0,16'h0707};
219                 
220                 8'd54:display_command = {1'b1,16'h0031};
221                 8'd55:display_command = {1'b0,16'h0204};
222                 
223                 8'd56:display_command = {1'b1,16'h0032};
224                 8'd57:display_command = {1'b0,16'h0204};
225                 
226                 8'd58:display_command = {1'b1,16'h0033};
227                 8'd59:display_command = {1'b0,16'h0502};
228                 
229                 8'd60:display_command = {1'b1,16'h0034};
230                 8'd61:display_command = {1'b0,16'h0507};
231                 
232                 8'd62:display_command = {1'b1,16'h0035};
233                 8'd63:display_command = {1'b0,16'h0204};
234                 
235                 8'd64:display_command = {1'b1,16'h0036};
236                 8'd65:display_command = {1'b0,16'h0204};
237                 
238                 8'd66:display_command = {1'b1,16'h0037};
239                 8'd67:display_command = {1'b0,16'h0502};  
240                 
241                 8'd68:display_command = {1'b1,16'h003A};
242                 8'd69:display_command = {1'b0,16'h0302};
243                 
244                 8'd70:display_command = {1'b1,16'h003B};
245                 8'd71:display_command = {1'b0,16'h0302};
246                 
247                 8'd72:display_command = {1'b1,16'h0023};
248                 8'd73:display_command = {1'b0,16'h0000}; 
249                 
250                 8'd74:display_command = {1'b1,16'h0024};
251                 8'd75:display_command = {1'b0,16'h0000}; 
252                 
253                 8'd76:display_command = {1'b1,16'h0025};
254                 8'd77:display_command = {1'b0,16'h8000};
255                 
256                 8'd78:display_command = {1'b1,16'h004E};//光标位置X
257                 8'd79:display_command = {1'b0,16'h00ef};
258                 
259                 8'd80:display_command = {1'b1,16'h004F};//光标位置Y
260                 8'd81:display_command = {1'b0,16'h013f};
261                 
262                 8'd82:display_command = {1'b1,16'h0022};//开始RAM显示
263                 8'd83:display_command = {1'b0,16'hf800};
264                 8'd84:display_command = {1'b0,16'hffff};
265             
266                 default:display_command = {1'b0,16'h0000};
267             endcase
268         end
269     endfunction
270     
271     
272 endmodule 

  2)引脚配置TCL文件:

 1 set_location_assignment PIN_K15 -to LCD_CS
 2 set_location_assignment PIN_J16 -to LCD_RS
 3 set_location_assignment PIN_L16 -to LCD_RST
 4 set_location_assignment PIN_L14 -to LCD_RD
 5 set_location_assignment PIN_K16 -to LCD_WR
 6 
 7 set_location_assignment PIN_T14 -to LCD_DATA[15]
 8 set_location_assignment PIN_R13 -to LCD_DATA[14]
 9 set_location_assignment PIN_T15 -to LCD_DATA[13]
10 set_location_assignment PIN_R14 -to LCD_DATA[12]
11 set_location_assignment PIN_P14 -to LCD_DATA[11]
12 set_location_assignment PIN_L9    -to LCD_DATA[10]
13 set_location_assignment PIN_N14 -to LCD_DATA[9]
14 set_location_assignment PIN_N12 -to LCD_DATA[8]
15 set_location_assignment PIN_L13 -to LCD_DATA[7]
16 set_location_assignment PIN_M11 -to LCD_DATA[6]
17 set_location_assignment PIN_R16 -to    LCD_DATA[5]
18 set_location_assignment PIN_K12 -to    LCD_DATA[4]
19 set_location_assignment PIN_P16 -to    LCD_DATA[3]
20 set_location_assignment PIN_P15 -to    LCD_DATA[2]
21 set_location_assignment PIN_N16 -to    LCD_DATA[1]
22 set_location_assignment PIN_N15 -to    LCD_DATA[0]
23 #
24 
25 set_location_assignment PIN_A9 -to CLK
26 set_location_assignment PIN_M1 -to RSTn

谢谢指正!如需要交流,请留言!

posted @ 2014-01-04 10:18  hex&pcb  阅读(817)  评论(0编辑  收藏  举报