OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7390|回复: 3

[ALTERA] 想利用fpga来实现32里的lcd屏显示,但是接口是mcu的,我对控制器进行了配置但是无法显示,请大佬指点

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-5-19
在线时间
5 小时
发表于 2020-11-13 11:01:50 | 显示全部楼层 |阅读模式
1金钱
想用fpga实现32里的lcd屏显示,尺寸为240*320
请问我的配置哪里有问题

module lcd_config(
                    input            clk_ref        ,        //360khz
                    input            rst_n        ,
                    input    [15:0]    data_in        ,

                    output    reg        lcd_dcx            ,
                    output    reg        lcd_csx            ,
                    output    reg        lcd_wrx            ,
                    output    reg        lcd_rdx            ,
                    output    reg        lcd_rst            ,
                    output    [15:0]    lcd_data        ,

                    output    [9:0]    x_pos            ,
                    output    [9:0]    y_pos            
                    );

reg        [15:0]    data_r;

reg        [9:0]    x_cnt;
reg        [9:0]    y_cnt;

reg        [15:0]    delay_cnt;

reg        [9:0]    state_cnt;


assign      lcd_data = data_r ;
assign      x_pos = x_cnt ;
assign      y_pos = y_cnt ;

always @(posedge clk_ref or negedge rst_n) begin
    if (!rst_n) begin
        delay_cnt    <= 16'd0;
        state_cnt    <= 10'd0;
        data_r        <= 16'd0;
        x_cnt        <= 10'd0;
        y_cnt        <= 10'd0;
        lcd_csx        <= 1'b1;
        lcd_rst        <= 1'b1;
        lcd_wrx        <= 1'b0;
        lcd_dcx        <= 1'b0;
        lcd_rdx        <= 1'b0;
    end
    else begin
        case(state_cnt)
            10'd0 : begin         //硬复位
                lcd_rst    <= 1'd0;
                lcd_csx <= 1'b0;
                state_cnt <= state_cnt + 1'b1;
            end
            10'd1 : begin         //延时100ms
                if(delay_cnt < 16'd36_000) begin
                    delay_cnt <= delay_cnt + 1'b1;
                end
                else begin
                    state_cnt <= state_cnt + 1'b1;
                    delay_cnt <= 16'd0;
                    lcd_rst      <= 1'b1;
                end
            end
            10'd2 : begin         //软复位        
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h01;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd3 : begin         //写信号上升沿
                lcd_wrx  <= 1'b1;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd4 : begin          //延时5ms
                if(delay_cnt < 16'd1800) begin
                    delay_cnt <= delay_cnt + 1'b1;
                end
                else begin
                    delay_cnt <= 16'd0;
                    state_cnt <= state_cnt + 1'b1;
                end
            end
            10'd5 : begin         //睡眠模式关闭
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h11;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd6 : begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx  <= 1'b1;
            end
            10'd7 : begin         //delay 120ms
                if(delay_cnt < 16'd43200) begin
                    delay_cnt <= delay_cnt + 1'b1;
                end
                else begin
                    delay_cnt <= 16'd0;
                    state_cnt <= state_cnt + 1'b1;
                end
            end
            10'd8 : begin         //打开正常模式
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h13;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd9 : begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd10: begin         //开显示
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h29;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd11: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd12: begin         //列地址设置
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h2a;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd13: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd14: begin         //列地址参数sc 15:8
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd15: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd16: begin         //列地址参数sc 7:0
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd17: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd18: begin         //列地址参数ec 15:8
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd19: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd20: begin         //列地址参数ec 7:0
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'hef;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd21: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd22: begin         //页地址设置
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h2b;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd23: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd24: begin         //页地址参数sp 15:8
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd25: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd26: begin         //页地址参数sp 7:0
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd27: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd28: begin         //页地址参数ep 15:8
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h01;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd29: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd30: begin         //页地址参数ep 7:0
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h3f;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd31: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd32: begin         //存储器访问控制
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h36;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd33: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd34: begin         //参数
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd35: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd36: begin         //像素格式控制
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h3a;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd37: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd38: begin         //参数
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h55;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd39: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd40: begin       //帧率控制
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'hb1;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd41: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd42: begin         //参数
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h00;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd43: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd44: begin         //参数
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h15;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd45: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd46: begin       //显示功能控制
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'hb6;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd47: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd48: begin         //参数
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h0a;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd49: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd50: begin         //参数
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h82;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd51: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd52: begin         //写入数据命令
                lcd_dcx     <= 1'b0;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= 8'h2c;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd53: state_cnt<= state_cnt + 1'b1;
            10'd54: begin
                state_cnt<= state_cnt + 1'b1;
                lcd_wrx <= 1'b1;
            end
            10'd55: state_cnt<= state_cnt + 1'b1;
            10'd56: begin            
                lcd_dcx     <= 1'b1;
                lcd_wrx  <= 1'b0;
                lcd_rdx  <= 1'b1;
                data_r     <= data_in;
                state_cnt<= state_cnt + 1'b1;
            end
            10'd57: state_cnt<= state_cnt + 1'b1;
            10'd58: begin                 //写信号上升沿到来时,写入数据同时计数xy轴
                lcd_wrx <= 1'b1;
                if(x_cnt < 10'd239) begin
                    x_cnt <= x_cnt + 1'b1;
                    state_cnt <= 10'd55;
                end
                else begin
                    x_cnt <= 10'd0;
                    if(y_cnt < 10'd319) begin
                        y_cnt <= y_cnt + 1'b1;
                        state_cnt <= 10'd55;
                    end
                    else begin
                        y_cnt <= 10'd0;
                        state_cnt <= 10'd52;
                    end
                end
            end
            default : state_cnt <= 10'd0;
        endcase
    end
end

endmodule


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

3

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-5-19
在线时间
5 小时
 楼主| 发表于 2020-11-14 10:18:27 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2020-11-15 01:26:39 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2020-11-15 09:53:04 | 显示全部楼层
Nios II里有MCU显示的例程,可以参考着来弄
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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