EDA课设论文出租车计费系统verilog语言 下载本文

华东交通大学课程设计

parameter dat8=6'hF; parameter dat9=6'h10;

parameter dat10=6'h12; parameter dat11=6'h13; parameter dat12=6'h14; parameter dat13=6'h15; parameter dat14=6'h16; parameter dat15=6'h17; parameter dat16=6'h18; parameter dat17=6'h19; parameter dat18=6'h1A; parameter dat19=6'h1B; parameter dat20=6'h1C; parameter dat21=6'h1D; parameter dat22=6'h1E; parameter dat23=6'h1F; parameter dat24=6'h20; parameter dat25=6'h21; parameter dat26=6'h22; parameter dat27=6'h24; parameter dat28=6'h25; parameter dat29=6'h26; parameter dat30=6'h27; parameter dat31=6'h28; parameter dat32=6'h29; parameter dat33=6'h2A;

parameter nul=6'hF1; parameter set41=6'h34;

//--------------1602显示的频率转换------------- always @(posedge clk) //da de shi zhong pinlv begin

counter=counter+1; if(counter==16'h000f)

17

华东交通大学课程设计

clkr=~clkr; end

always @(posedge clkr) begin

current=next; case(current)

//LCD1602的资料上面介绍的地址第一行的起始地址是00H //第二行的其实地址是40H,他这个是没有加上最高位那个1 //所以我们实际的编程是地址第一行的起始地址是00H+80H= 0x80 //实际的编程是地址第二行的起始地址是40H+80H= 0xC0 //这里要注意

// case 0:addr=0x80; break; //所以我们实际的编程是地址第一行的起始地址是00H+80H= 0x80

// case 1:addr=0xC0; break;//实际的编程是地址第二行的起始地址是40H+80H= 0xC0

set0: begin rs<=0; dat<=8'h38; next<=set1; end //*设置8位格式,2行,5*7*

set1: begin rs<=0; dat<=8'h0C; next<=set2; end //*整体显示,关光标,不闪烁*/

set2: begin rs<=0; dat<=8'h06; next<=set3; end //*设定输入方式,增量不移位*/

set5: begin rs<=0; dat<=8'h80; next<=dat0; end //显示第一行

dat0: begin rs<=1; dat<=\ dat1: begin rs<=1; dat<=\ dat2: begin rs<=1; dat<=shi2+8'h30; next<=dat3; end dat3: begin rs<=1; dat<=shi1+8'h30;next<=dat4; end dat4: begin rs<=1; dat<=\ dat5: begin rs<=1; dat<=fen2+8'h30; next<=dat6; end dat6: begin rs<=1; dat<=fen1+8'h30; next<=dat7; end dat7: begin rs<=1; dat<=\

dat8: begin rs<=1; dat<=miao2+8'h30; next<=dat9; end dat9: begin rs<=1; dat<=miao1+8'h30;next<= dat10 ; end dat10: begin rs<=1; dat<=\

set3: begin rs<=0; dat<=8'h01; next<=dat0; end //*清除显示*/

18

华东交通大学课程设计

dat11: begin rs<=1; dat<=flag+8'h30; next<=dat30; end dat30: begin rs<=1; dat<=\ dat31: begin rs<=1; dat<=\ dat32: begin rs<=1; dat<=\ dat33: begin rs<=1; dat<=speed+8'h30; next<=set4; end

set4: begin rs<=0; dat<=8'hC0; next<=dat12; end //显示第二行

dat12: begin rs<=1; dat<=\ dat13: begin rs<=1; dat<=\ dat14: begin rs<=1; dat<=wb+8'h30; next<=dat15; end dat15: begin rs<=1; dat<=ws+8'h30; next<=dat16; end dat16: begin rs<=1; dat<=wg+8'h30; next<=dat17; end dat17: begin rs<=1; dat<=\ dat18: begin rs<=1; dat<=wf+8'h30; next<=dat19; end dat19: begin rs<=1; dat<=\ dat20: begin rs<=1; dat<=\ dat21: begin rs<=1; dat<=\ dat22: begin rs<=1; dat<=\ dat23: begin rs<=1; dat<=mb+8'h30;; next<=dat24; end dat24: begin rs<=1; dat<=ms+8'h30; next<=dat25; end dat25: begin rs<=1; dat<=mg+8'h30; next<=dat26; end dat26: begin rs<=1; dat<=\

dat27: begin rs<=1; dat<=mj+8'h30; next<=set5; end //next<=nul时,不会刷新数据,只能为当前数据

nul: begin rs<=0; dat<=8'h00; // 把液晶的E 脚 拉高 if(cnt!=2'h2) begin

e<=0;next<=nul;cnt<=cnt+1; end else

begin next<=dat0; e<=1; end

19

华东交通大学课程设计

end default: next=set0; endcase end

assign en=clkr|e; assign rw=0;

//---------------定义变量---------------- reg flag;

reg[3:0] miao1,fen1; reg[3:0] miao2,fen2; reg [3:0] shi1, shi2; reg [4:0]shi; reg [5:0]fen,miao; reg [27:0]count; reg clk_1hz; initial clk_1hz=1; initial shi=13; initial fen=45; initial miao=39;

//---------------分频时间为1秒------------ always @(posedge clk) begin

if(count==24999999)begin

clk_1hz<=~clk_1hz;count<=0;end else

count<=count+1;

end

//---------------时间显示*----------------

always @(posedge clk_1hz) begin

if(miao==59)begin

miao<=0;

20