《EDA实训出租车计费.docx》由会员分享,可在线阅读,更多相关《EDA实训出租车计费.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、姓 名 满眼皆是繁华指导教师: 2013 年 7 月 8 日实训题目:出租车计费器的设计1 系统设计1.1 设计要求1.1.1 设计任务 设计并制作一台出租车计费器。1.1.2 性能指标要求 用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。 出租车行驶超过2km后,按增加的每公里1.6元在7.0元的基础上增加。 出租车行驶超过10km后(或超过20元路费),每公里加收50的车费,即车费变为每公里2.4元。 出租车达到目的地后,(用一个按钮)计程和计费数据清零
2、,为下一次计费开始。1.2 设计思路及设计框图出租车计费器的整体结构包括:分频模块,计数模块,计费模块。另外我还加了扩展功能:选择模块,计时模块。不计价时,可以切换到显示时分秒。这个功能需要选择模块和计时模块共同来实现。通过分频模块产生一个脉冲信号模拟汽车的启动与停止,然后通过计数模块,计算出一共所行驶的路程,最后通过记价模块,将所行驶的路程计算出相对应的价钱。计费显示起步价7元,2km之内为起步价,以后每1km在起步价7元的基础上增加1.6元;超过10km以后,每1km增加2.4元。通过数学公式计算出费用,这就是费用计算模块。结合生活中的出租车计费器,分别有3km以内,10km以内以及超过1
3、0Km以后的计费标准。我设计用拨码开关来实现清零与车速的转换,并通过数码管来显示路程与车费。车轮每转一圈就是一个脉冲,因此,脉冲频率的快慢就是车速的快慢,这就是车速的计算;把车轮每转一圈 4米的话,每来一个脉冲路程就加4米,这就是路程的计算;当路程的百位向千位进位时就产生一个脉冲也就是路程又走了1公里。于是便实现了车行驶3km以内,只收起步价7元。行驶超过3km后,按每公里1.6元在7.0元的基础上增加。行驶超过10km后(或超过20元路费),每公里加收50的车费,即车费变为每公里2.4元。2 各个模块程序的设计这个模块是设计不同车速的,通过d1与d2的值来设置四个不同的车速,其中00是最慢,
4、01是中速,10是最快,11是停止。这样更贴切生活。分为输出路程和时间的模块,由分频,路程,车费,模块组成。车速的计算:车轮每转一圈就是一个脉冲,因此,脉冲频率的快慢就是车速的快慢。路程的计算:如果车轮每转一圈,每来一个脉冲路程就加4米。计费器模块如下图所示:这个模块就是实现题目要求的,在2km内收起步价7块,大于2km小于10km的时候每公里收1.6块,大于10公里以后每公里收2.4块,通过if循环嵌套来实现。这个模块是用来计算具体路程,并通过数码管体现出租车所行走的路程。不计价时,可以切换到显示时间,显示时分秒,也可人为校准。方便在车上看时间。用控制端高低电平控制选择。计时模块路下图所示:
5、计费器和显示时分秒的切换选择,由输入端c控制。3 调试过程写程序的过程中遇到了很多问题,编译的时候出现了很多错误,通过询问老师跟同学,再参考一些同学的程序后,解决了逐个问题,逐渐完善了自己的程序。管脚锁定:4 功能测试4.1 测试仪器与设备 EDA实训箱,Quartus II软件,数据连接线。4.2 性能指标测试 S14为1时开始计费,S0和S1可以调节路程跳动的速度,可切换3种不同的速度;K7按键校准车费;当S0 S1都为1时,停止计费,也表示车停止走动。S15用来切换计费器和显示时间的功能,拨为0时,是计费器功能;拨为1时,是显示时间功能。按键K7 K6 K5可以调节路程的设置,S14为0
6、时是清零功能。K2 K1 K0为时分秒的校准。5 实训心得体会这次EDA实训将EDA知识运用到实际中,我从中受益匪浅。我选择的实训题目是出租车计费器,刚开始看题目,有点摸不着头脑,查找资料,于是根据每一个要求,再根据老师上课讲的内容,有了个总体的思路。通过这样实训,提高了动手能力,如何运用数码管显示十进制数,在将EDA课堂知识运用到实训中时,对课堂知识也有了更好的理解,在过程中遇到不懂的地方,通过请教老师和同学也明白了自己的不足之处,并将在以后的学习中进一步完善自己。波形仿真时,一直有问题。后来发现是因为自己操作不对,在proessing那儿要设置,我记得上课老师又给我们讲过,可能是我记得不牢
7、。通过这次实训,我运行软件Quartus II熟练多了较以前来说。下次做实训的时候要考虑周到,不清楚的时候要及时翻书,并回忆老师上课讲的内容和重点。更在这一点上明白了,我们必须善于发现问题改正问题,同时要有一颗持之以恒的心。用理论知识运用到实际中,大大提高了我们的学习兴趣,同时要感谢老师们的悉心教导。6 参考文献1谢自美电子线路设计实验测试(第二版)武汉:华中科技大学出版社,20002江国强,EDA技术与应用(第2版),电子工业出版社,2008附录附录1:仿真波形图(部分模块)路程仿真计费器仿真时间仿真附录2:程序清单分频器module fpq(clk,d1,d2,nclk);input cl
8、k,d1,d2;output nclk;reg nclk;reg24:0 num;always(posedge clk) begin case(d1,d2) 0:begin num=num+1; if(num=19999999) begin nclk=1;num=0;end else nclk=0; end 1:begin num=num+1; if(num=1999999) begin nclk=1;num=0;end else nclk=0; end 2:begin num=num+1; if(num=199999) begin nclk=1;num=0;end else nclk=0;
9、end 3:begin num=num+1; if(num=0) begin nclk=1;num=0;end else nclk=0; end endcase end endmodule路程计算module lc(nclk,clrn,q,d);input nclk,clrn;output reg15:0 q;output reg d;reg11:0 i;reg3:0 k;always (negedge nclk or negedge clrn)beginif(clrn=0) begin q=0;i=0; endelse begin i=i+1;k=i*4;if(k9)begin q3:0=q
10、3:0+1;k=0;if(q3:09)begin q3:0=0;q7:4=q7:4+1;if(q7:49) beginq7:4=0;q11:8=q11:8+1;d=1;if(q11:89)begin q11:8=0;q15:12=q15:12+1;endendendendelse d=0;endendendmodule车费计算module cf(d,clrn,q,j);input d,j;input clrn;output reg15:0 q;reg c;always (posedge dj)begin if(clrn) begin c=0;q=0;endelse c=c+1;if(c=2)
11、q7:4=7;else if(c9)begin q3:0=q3:0-10;q7:4=q7:4+1;endif(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1; endendelse if(c10) begin q3:0=q3:0+4;q7:4=q7:4+2;if(q3:09)begin q3:0=q3:0-10;q7:4=q7:4+1;endif(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1;if(q11:89)begin q11:8=q11:8-10;q15:12=q15:12+1;end endendif(c14) c=11;e
12、ndendmodule60进制计数器module cnt60(clrn,clk,j,q,cout);input clrn,clk,j;output reg 7:0 q;output reg cout;always (posedge clkj or negedge clrn)begin if (clrn) q=0;else begin if (q=h59) q=0;else q=q+1;if(q3:0=ha) begin q3:0=0;q7:4=q7:4+1;endif (q=h59) cout=1;else cout=0;endendendmodule24进制计数器module cnt24(c
13、lrn,clk,j,q,cout);input clrn,clk,j;output reg 7:0 q,cout;always (posedge clkj or negedge clrn)begin if (clrn) q=0;else begin if (q=h23) q=0;else q=q+1;if(q3:0=ha) begin q3:0=0;q7:4=q7:4+1;endif (q=h23) cout=1;else cout=0;endendendmodule 分频1秒module fenpin1s(clk,cout);input clk;reg 24:0 q;output reg c
14、out;always (posedge clk)begin if(q=20000000-1) q=0;else q=q+1;if(q=20000000-1) cout=1;else cout=0;end endmodule 总时间 module zsj(qm,qf,qs,day,q);input7:0 qm,qf,qs,day;output reg 31:0 q;always beginq31:0=day,qs,qf,qm;endendmodule选择切换功能module xuanze(q1,q2,q3,q,c,clk);input c,clk;input15:0 q1,q2;input31:0 q3;output reg31:0 q;always (posedge clk)begincase(c)0:begin q31:16=q115:0;q15:0=q215:0;end1:begin q23:0=q323:0;q31:24=0;end endcaseendendmodule