差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
lcd240_240disp [2020/08/21 17:28] gongyu 创建 |
lcd240_240disp [2020/08/22 21:30] (当前版本) gongyu [1 FPGA控制] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ### 240*240分辨率RGB LCD的控制 | + | ## 1.54寸240*240分辨率RGB LCD的控制 |
+ | |||
+ | ### 1 FPGA控制 | ||
+ | |||
+ | #### 1.1 按键输入控制及显示输出主程序: | ||
+ | <code verilog> | ||
+ | //========================================================================== | ||
+ | // | ||
+ | // Author: Step | ||
+ | // Module: isp_154 | ||
+ | // Description: | ||
+ | // Web: www.stepfapga.com | ||
+ | //-------------------------------------------------------------------------- | ||
+ | // Info: | ||
+ | // V1.0---yyyy/mm/dd---Initial version | ||
+ | // | ||
+ | //========================================================================== | ||
+ | |||
+ | //timescale | ||
+ | `timescale 1ns / 1ns | ||
+ | |||
+ | //define | ||
+ | //include | ||
+ | //module | ||
+ | module isp_154 ( | ||
+ | input clk_12m, | ||
+ | |||
+ | input key_l, key_r, key_o, | ||
+ | |||
+ | input [7:0] adc_i, | ||
+ | |||
+ | output lcd_csn, | ||
+ | output lcd_sck, | ||
+ | output lcd_sda, | ||
+ | output lcd_res, | ||
+ | output lcd_dcn | ||
+ | ); | ||
+ | |||
+ | wire adc_done= 1'b1; | ||
+ | |||
+ | wire sample_done, display_done; | ||
+ | wire sample_en, display_en; | ||
+ | //Arbiter, control sample and display in different time | ||
+ | Arbiter u_Arbiter ( | ||
+ | .clk_in (clk_12m ), // system clock | ||
+ | .rst_n_in (1'b1 ), //system reset, active low | ||
+ | |||
+ | .sample_done (sample_done ), | ||
+ | .display_done (display_done ), | ||
+ | |||
+ | .sample_en (sample_en ), | ||
+ | .display_en (display_en ) | ||
+ | ); | ||
+ | |||
+ | wire adc_done_o; | ||
+ | wire [7:0] trig_data; | ||
+ | Time_Scale u_Time_Scale ( | ||
+ | .clk_in (clk_12m ), // system clock | ||
+ | .rst_n_in (1'b1 ), //system reset, active low | ||
+ | |||
+ | .key_l (key_l ), // encoder B | ||
+ | .key_r (key_r ), // encoder OK | ||
+ | .key_o (key_o ), // | ||
+ | |||
+ | .trig_data (trig_data ), | ||
+ | |||
+ | .adc_done (adc_done ), | ||
+ | .adc_done_o (adc_done_o ) | ||
+ | ); | ||
+ | |||
+ | wire ram_adc_clk_en; | ||
+ | wire [7:0] ram_adc_addr; | ||
+ | wire [7:0] ram_adc_data; | ||
+ | ADC_Sample u_ADC_Sample ( | ||
+ | .clk_in (clk_12m ), // system clock | ||
+ | .rst_n_in (1'b1 ), //system reset, active low | ||
+ | |||
+ | .adc_done (adc_done_o ), | ||
+ | .adc_data (adc_i ), | ||
+ | |||
+ | .trig_data (trig_data ), | ||
+ | |||
+ | .sample_en (sample_en ), | ||
+ | .sample_done (sample_done ), | ||
+ | |||
+ | .ram_adc_clk_en (ram_adc_clk_en ), | ||
+ | .ram_adc_addr (ram_adc_addr ), | ||
+ | .ram_adc_data (ram_adc_data ) | ||
+ | ); | ||
+ | |||
+ | wire [7:0] QA; | ||
+ | wire ram_lcd_clk_en; | ||
+ | wire [7:0] ram_lcd_addr; | ||
+ | wire [7:0] ram_lcd_data; | ||
+ | dp_ram u1 ( | ||
+ | .ResetA ( 1'b0 ), | ||
+ | .WrA ( 1'b1 ), | ||
+ | .ClockEnA ( ram_adc_clk_en ), | ||
+ | .ClockA ( clk_12m ), | ||
+ | .AddressA ( ram_adc_addr ), | ||
+ | .DataInA ( ram_adc_data ), | ||
+ | .QA ( QA ), | ||
+ | |||
+ | .ResetB ( 1'b0 ), | ||
+ | .WrB ( 1'b0 ), | ||
+ | .ClockEnB ( ram_lcd_clk_en ), | ||
+ | .ClockB ( clk_12m ), | ||
+ | .AddressB ( ram_lcd_addr ), | ||
+ | .DataInB ( 8'b0 ), | ||
+ | .QB ( ram_lcd_data ) | ||
+ | ); | ||
+ | |||
+ | |||
+ | LCD_RGB u_LCD_RGB ( | ||
+ | .clk ( clk_12m ), | ||
+ | .rst_n ( 1'b1 ), | ||
+ | .display_en ( display_en ), | ||
+ | .display_done ( display_done ), | ||
+ | |||
+ | .ram_lcd_clk_en ( ram_lcd_clk_en ), | ||
+ | .ram_lcd_addr ( ram_lcd_addr ), | ||
+ | .ram_lcd_data ( ram_lcd_data ), | ||
+ | |||
+ | .lcd_csn ( lcd_csn ), | ||
+ | .lcd_res ( lcd_res ), | ||
+ | .lcd_dcn ( lcd_dcn ), | ||
+ | .lcd_sck ( lcd_sck ), | ||
+ | .lcd_sda ( lcd_sda ) | ||
+ | ); | ||
+ | |||
+ | |||
+ | |||
+ | endmodule //isp_154 | ||
+ | |||
+ | </code> | ||
+ | |||
+ | #### 1.2 RGB LCD的控制 | ||
- | #### FPGA控制 | ||
<code verilog> | <code verilog> | ||
// -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
行 46: | 行 181: | ||
localparam INIT_DEPTH = 16'd59; // the number of init command and data | localparam INIT_DEPTH = 16'd59; // the number of init command and data | ||
- | localparam RED = 16'hf800; | + | localparam RED = 16'hf800; |
localparam GREEN = 16'h07e0; | localparam GREEN = 16'h07e0; | ||
localparam BLUE = 16'h001f; | localparam BLUE = 16'h001f; | ||
行 60: | 行 195: | ||
localparam DELAY = 3'd5; | localparam DELAY = 3'd5; | ||
- | localparam LOW = 1'b0; | + | localparam LOW = 1'b0; |
localparam HIGH = 1'b1; | localparam HIGH = 1'b1; | ||
行 262: | 行 397: | ||
// data for init | // data for init | ||
always @(*) begin | always @(*) begin | ||
- | reg_init[0] = {1'b0,8'h11}; | + | reg_init[0] = {1'b0,8'h11}; |
- | reg_init[1] = {1'b0,8'h36}; | + | reg_init[1] = {1'b0,8'h36}; |
- | reg_init[2] = {1'b1,8'ha0}; | + | reg_init[2] = {1'b1,8'ha0}; |
- | reg_init[3] = {1'b0,8'h3A}; | + | reg_init[3] = {1'b0,8'h3A}; |
- | reg_init[4] = {1'b1,8'h05}; | + | reg_init[4] = {1'b1,8'h05}; |
- | reg_init[5] = {1'b0,8'hB2}; | + | reg_init[5] = {1'b0,8'hB2}; |
- | reg_init[6] = {1'b1,8'h0C}; | + | reg_init[6] = {1'b1,8'h0C}; |
- | reg_init[7] = {1'b1,8'h0C}; | + | reg_init[7] = {1'b1,8'h0C}; |
- | reg_init[8] = {1'b1,8'h00}; | + | reg_init[8] = {1'b1,8'h00}; |
- | reg_init[9] = {1'b1,8'h33}; | + | reg_init[9] = {1'b1,8'h33}; |
reg_init[10] = {1'b1,8'h33}; | reg_init[10] = {1'b1,8'h33}; | ||
reg_init[11] = {1'b0,8'hB7}; | reg_init[11] = {1'b0,8'hB7}; |