求教:关于ep2c5t188的1602显示程序

2019-07-16 00:40发布

麻烦大家帮我看看程序。1602的,晶振是50MHZ的。弄了很久,一直没能显示出来字符。。刚开始接触verilog HDL。希望大家帮帮忙,这个问题困扰很久很久了
1602.txt 下载积分: 积分 -1 分
3.43 KB, 下载次数: 5, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
joneseaver
2019-07-16 03:39
程序在下面。

/*---------------------------
       
        1602 LCD display
       
----------------------------*/

module LCD_1602
(
        rst,clk,rs,rw,en,dataport
);

input                                  rst;
input                                clk;
output                                rs;
output                                rw;
output                                en;
output [7:0]                dataport;

reg        f_1MHZ;
reg f_10K;
reg state;
reg state1;
reg rs;
reg        rw;

reg[4:0] count1;
reg[7:0] count;
reg[7:0] dataport;
reg[3:0] counter;
//reg[7:0] chara[3:0];
wire en;
///////////////////////////////////////////////
parameter init = 1'b0,
                  write_data = 1'b1;

assign en = f_10K;
/*---------------------------
       
        1MHZ frequency divided
       
----------------------------*/
always@(posedge clk  )       
begin
        if(count == 24)       
                begin
                        count <= 4'b0;
                        f_1MHZ <= ~f_1MHZ;
                       
                end
        else
                begin
                        count <= count + 1'b1;
                        f_1MHZ <= f_1MHZ;
                end
end

/*---------------------------
       
        10KHZ frequency divided
       
----------------------------*/
always@(posedge f_1MHZ  )       
begin
        if(count == 50)       
                begin
                        count1 <= 5'b0;
                        f_10K <= ~f_10K;
                       
                end
        else
                begin
                        count1 <= count1 + 1'b1;
                        f_10K <= f_10K;
                end
end


/*---------------------------
       
        character obtain
       

always @(posedge clk )
        begin
                case(counter)
                4'd0 : chara[counter] = "0" ;
                4'd1 : chara[counter] = "1" ;
                4'd2 : chara[counter] = "2" ;
                4'd3 : chara[counter] = "3" ;
//                4'd4 : chara[flag] = "4" ;
//                4'd5 : chara[flag] = "5" ;
//                4'd6 : chara[flag] = "6" ;
//                4'd7 : chara[flag] = "7" ;
//                4'd8 : chara[flag] = "8" ;
//                4'd9 : chara[flag] = "9" ;
                endcase
        end
----------------------------*/       

/*--------------------------
rst
-------------------------*/
       
always@(posedge clk or negedge rst )                // rst
begin
        if(!rst)
                state1 <= init;                //如果复位case语句从init开始执行
        else
                state1 <= state;        //否则看state的状态
end
/*---------------------------
       
        LCD initialize
       
----------------------------*/       

//initial begin
       
always@(posedge f_10K )                // write command
        begin
                case(state1)
                        init:
                                begin
                                                                                                               
                                        rs <= 1'b0;                                //写命令
                                        rw <= 1'b0;
                                        counter <= counter + 1'b1;
                                        case(counter)
                                                1:dataport <= 8'h38;                //display mode
                                                2:dataport <= 8'h08;                // close cursor
                                                3:dataport <= 8'h01;                //clear screen
                                                4:dataport <= 8'h06;                //cursor move set
                                                5:dataport <= 8'h0c;                //open display and cursor set
                                                6:
                                                        begin
                                                                dataport <= 8'h80;        //cursor location
                                                                state <= write_data;
                                                                counter <= 3'b000;        //计数清零
                                                       
                                                        end
                                                default : counter <= 3'b000;
                                        endcase
                                end
                        write_data:
                                        begin
                                                rs <= 1'b1;                                //写数据
                                                rw <= 1'b0;
                                                counter <= counter + 1'b1;
                                                case(counter)
                                                        1:dataport <= "F";
                                                        2:dataport <= "P";
                                                        3:dataport <= "G";
                                                        4:dataport <= "A";
                                                        5:dataport <= ":";
                                                        6:dataport <= " ";
                                //                        7:dataport = chara[0];
                                //                        8:dataport = chara[1];
                                //                        9:dataport = chara[2];
                                //                        10:dataport = chara[3];
                                                        7:
                                                                begin
                                                                        rs <= 1'b0;
                                                                        dataport <= 8'h80;
                                                                        counter <= 3'b000;
                                                                        state <= init;                //重新刷写字符
                                                                end
                                                        default : counter <= 3'b000;
                                                endcase
                               
                //                                if(counter == 10)
                //                                        begin
                //                                                counter = 0;
                //                                                state = write_data_2;
                //                                        end
                                        end
                        default:        state <= init;
                endcase
        end
endmodule

一周热门 更多>