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

来源:互联网 发布:优化算法 知乎 编辑:程序博客网 时间:2024/04/28 05:34

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                 end102             4'd5:103                 begin 104                     state_lcd_write <= state_lcd_write + 1'b1;105                     LCD_WR    <= 1'b1;106                 end107             4'd6:if(addr_command == 8'd83)            //red108                     begin109                         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                             end116                         else state_lcd_write <= 4'd1;117                     end118                 else if(addr_command == 8'd84)        //white119                     begin120                         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                             end127                         else state_lcd_write <= 4'd1;128                     end129                 else 130                     begin131                         addr_command <= addr_command + 1'b1;132                         state_lcd_write <= 4'd0;133                     end134             4'd7:state_lcd_write <= 4'd7;135                         136                     137         endcase138         end139     140     function [16:0] display_command;141     input [7:0]addr;142         begin143             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 mode172                 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 address209                 8'd47:display_command = {1'b0,16'hEF00};210                 211                 8'd48:display_command = {1'b1,16'h0045};//v212                 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};//光标位置X257                 8'd79:display_command = {1'b0,16'h00ef};258                 259                 8'd80:display_command = {1'b1,16'h004F};//光标位置Y260                 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             endcase268         end269     endfunction270     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 CLK26 set_location_assignment PIN_M1 -to RSTn

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

0 0