查看: 767|回复: 0
打印 上一主题 下一主题

verilog JM12864F代码

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-13 20:30:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己编的verilog JM12864F代码
之前找了好久,都是VHDL的,自己用verilog写一个,已测试好使,写的不好,见笑!

module lcd12864s(clk,en,rw,rs,data,reset,psb,key1,key2);
input clk;
input reset;
input key1;
input key2;
output [7:0]data;
output rw;
output rs;
output en;
output psb;

reg [7:0]data;
reg [7:0]data1;
reg [50:0]clk_reg;
reg fclk;
reg fclk_reg;
reg [30:0]sum;
reg [30:0]sum1;
reg flag;
reg [7:0]state;
reg [6:0]counter;
reg [6:0]counter1;
reg rw;
reg rs;
wire [6:0]counter2;

always @(posedge clk)
        if(!reset)
                clk_reg<=0;
                else
                        if(clk_reg<500000)
                                clk_reg<=clk_reg+1;
                                        else
                                                begin
                                                        clk_reg<=0;
                                                        fclk<=~fclk;
                                                end

always @(posedge fclk or negedge reset)
        begin
        if(!reset)
                begin
                state<=8'h00;
                flag<=0;
                counter<=0;
                counter1<=0;
                sum<=0;
                sum1<=0;
                end
        else
        begin
                case(state)
                8'h00:
                        begin
                                if(!flag)
                                        begin
                                        flag<=1;
                                        ///counter<=0;
                                        sum<=0;
                                        state<=8'h01;
                                        end
                                else
                                        state<=8'h00;
/*                                        if(sum<'d9999)
                                                begin
                                                sum<=sum+1;
                                                state<=8'h00;
                                                end
                                        else
                                                begin
                                                sum<=0;
                                                state<=8'h00;
                                                end           */
                        end
               
                8'h01:
                        begin
                                rs<=0;
                                rw<=0;
                                data<=8'h30;
                                state<=8'h02;
                        end
                        
                8'h02:
                        begin
                                rs<=0;
                                rw<=0;
                                data<=8'h30;
                                state<=8'h03;
                        end
                        
                8'h03:
                        begin
                                rs<=0;
                                rw<=0;
                                data<=8'h0c;
                                state<=8'h04;
                        end
                        
                8'h04:
                        begin
                                rs<=0;
                                rw<=0;
                                data<=8'h01;
                                state<=8'h05;
                        end
                        
                8'h05:
                        begin
                                rs<=0;
                                rw<=0;
                                data<=8'h06;
                                state<=8'h07;
                        end
                        
                8'h06:
                        begin
                        rs<=0;
                        rw<=0;
                        state<=8'h07;
                        if(counter==7)
                                begin
                                counter<=counter+1;
                                data<=8'h90;
                                end
                                else
                                        if(counter==15)
                                                begin
                                                counter<=counter+1;
                                                data<=8'h88;
                                                end
                                                else
                                                        if(counter==23)
                                                                begin
                                                                counter<=counter+1;
                                                                data<=8'h98;
                                                                end
                        end
                        
            8'h07:
                        begin
                                rs<=1;
                                rw<=0;
                        //        counter1<=counter1+1;
                                data<=data1;
                                counter1<=counter1+1;
                        //        data<=8'hC0;               
                            state<=8'h08;
                        end
                        
                8'h08:
                        begin
                                rs<=1;
                                rw<=0;
                                //data<="吕";
                                //data<=8'hC0+counter;
                        //        counter1<=counter1+1;
                                data<=data1;
                                counter1<=counter1+1;
                                if(counter<7)
                                        begin
                                        counter<=counter+1;
                                        state<=8'h07;
                                        end
                                                else
                                                        if(counter==7)
                                                                begin
                                                                state<=8'h06;
                                                                end
                                                                        else
                                                                                if(counter<15)
                                                                                        begin
                                                                                        state<=8'h07;
                                                                                        counter<=counter+1;
                                                                                        end
                                                                                                else
                                                                                                        if(counter==15)
                                                                                                                begin
                                                                                                                state<=8'h06;
                                                                                                                end
                                                                                                                        else
                                                                                                                                if(counter<23)
                                                                                                                                        begin
                                                                                                                                        state<=8'h07;
                                                                                                                                        counter<=counter+1;
                                                                                                                                        end
                                                                                                                                                else
                                                                                                                                                        if(counter==23)
                                                                                                                                                                begin
                                                                                                                                                                state<=8'h06;
                                                                                                                                                                end
                                                                                                                                                                        else
                                                                                                                                                                                if(counter<31)
                                                                                                                                                                                        begin
                                                                                                                                                                                        state<=8'h07;
                                                                                                                                                                                        counter<=counter+1;
                                                                                                                                                                                        end
                                                                                                                                                                                                else
                                                                                                                                                                                                        state<=8'h09;        
                                                        
                        end
        /*        8'h09:        begin
                                        rs<=0;
                                        rw<=1;
                                        if(sum1<'d9999)
                                                begin
                                                sum1<=sum1+1;
                                                state<=8'h09;
                                                end
                                        else
                                                begin
                                                sum1<=0;
                                                state<=8'h09;
                                                end
                                                end
                                        */
                8'h09:        begin
                                        rs<=0;
                                        rw<=1;
                                        if(key1==0)
                                                begin
                                                rs<=0;
                                            rw<=0;
                                                data<=8'h02;
                                                counter<=0;
                                                counter1<=0;
                                //                counter1<=(counter1-64)>=0?(counter-64):0;
                                                state<=8'h07;
                                                end
                                                else
                                                        if(key2==0)
                                                                begin
                                                                rs<=0;
                                                               rw<=0;
                                                                data<=8'h02;
                                                                counter<=0;
                                                                counter1<='d64;
                                                                state<=8'h07;
                                                                end
                                                                        else
                                                                                if(sum1<'d9999)
                                                                                        begin
                                                                                        sum1<=sum1+1;
                                                                                        state<=8'h09;
                                                                                        end
                                                                                                else
                                                                                                        begin
                                                                                                        sum1<=0;
                                                                                                        state<=8'h09;
                                                                                                        end
                                        end
                                                
                default: state<=8'h00;
               
                endcase
                end
end
assign en=fclk;
assign psb=1;
assign counter2=counter1;

abcd aaa(.da(data1),.ddr(counter2));

endmodule               



quartus ii 6.0版本ourdev_525867.rar(文件大小:543K) (原文件名:lcd12864s.rar)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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