chengdaguan 发表于 2010-1-14 10:10:03

verilog JM12864F代码

自己编的verilog JM12864F代码
之前找了好久,都是VHDL的,自己用verilog写一个,已测试好使,写的不好,见笑!

module lcd12864s(clk,en,rw,rs,data,reset,psb,key1,key2);
input clk;
input reset;
input key1;
input key2;
output data;
output rw;
output rs;
output en;
output psb;

reg data;
reg data1;
reg clk_reg;
reg fclk;
reg fclk_reg;
reg sum;
reg sum1;
reg flag;
reg state;
reg counter;
reg counter1;
reg rw;
reg rs;
wire 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)

yincong09 发表于 2010-1-14 10:11:42

非常好

sammie_01 发表于 2010-1-14 10:15:11

很好,急用,多谢,辛苦啦!

xingye777 发表于 2010-1-14 10:16:48

太感谢了!

xingye777 发表于 2010-1-14 10:19:15

实现了啥功能?

yincong09 发表于 2010-1-14 10:21:27

终于有好用的了,很好

sailor0908 发表于 2010-1-14 10:24:05

mark

xml2028 发表于 2010-1-14 14:12:12

可以试下

lmldai 发表于 2010-3-10 23:06:22

在用谢谢啦~

tear086 发表于 2010-3-11 11:39:57

mark

heibaogame 发表于 2011-8-14 16:26:54

能不能跟单片机一样,有个数组把要写的字符都放进去呢

wmessi 发表于 2012-9-24 23:51:51

找了好久了

紫风幻月 发表于 2013-6-4 16:05:25

有显示图片的例程吗?verilog编写的
页: [1]
查看完整版本: verilog JM12864F代码