《北邮数字电路实验报告-简易出租车计价器(共28页).docx》由会员分享,可在线阅读,更多相关《北邮数字电路实验报告-简易出租车计价器(共28页).docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上数字电路实验报告简易出租车计价器 班级: 学号: 姓名: 一、设计课题的任务要求设计一台出租车计价器,不同情况具有不同的收费标准基本内容1、 行驶公里: 用时钟2秒钟表示出租车匀速行驶1公里,在行车5公里以内,按起步价13元收费,超过5公里部分,以每公里2元收费。燃油附加费为每运次1元。2、 途中等待:用按键控制中途等待,等待少于(包括)5秒不收费,超过5秒后每等待3秒钟加收1元。3、 用数码管分时显示计费金额、行驶里程和等候时间。字母A表示当前处于显示计费金额状态,字母B表示当前处于显示行驶里程状态,字母C表示当前处于显示等候时间状态。4、 用按键控制出租车空驶、载
2、客状态并用点阵显示空驶、载客状态。提高要求1、 用点阵滚动显示收费单据。2、 具有夜间模式,基本单价加收20%的费用。出租汽车收费结算以元为单位,元以下四舍五入。3、 出租车行驶速度可调可控。4、 多人乘车,分段计价。5、 自拟其它功能。二、系统设计1.设计思路首先考虑得到需要一个分频装置,分别输出频率到计数器与控制器,另有计算单元用来计算里程、时间与费用。clk1系统逻辑框图 clk输入Rst,start,waiting 控制器 分频器 Clk2输出里程,时间,车费 计算单元 计数器 Clk为系统时针,rst、start、waiting分别为重置、开始、等待信号,由按键输入 开始系统流程图
3、Rst=0?yesStart=1?noyesnoWaiting=1yes累计计算行车路程,行车费用累计等待时间,等待费用计算总费用,并显示总费用,行车里程和等待时间 结束Rst=1状态转移图rst、start、waiting分别为重置、开始、等待信号 stayStart=1,rst=0Waiting=0Waiting=1 begin Cost2 Cost1三、仿真波形及波形分析开始行车开始行车后五公里内14元五公里后每公里2元开始等待等待时间超过5s后每三秒钟收费一元等待时间前5s内不收费四、功能说明及资源利用情况1、 功能说明本次试验成果的主要功能为:开始点阵显示“无人状态”。按下按键“bt
4、n1”(start),计价器开始正常工作,六个数码管每两个分别显示“总费用”“行进里程”“等待时间”,同时点阵显示“载客状态”。行进里程开始累计,里程数在5公里内总价不变,在超过5公里后,每公里增加两元。在行进中按下按键“btn2”(waiting),等待时间开始累计,等待时间未超过5s时,等待费用为零,所以总价并不累计。在等待时间超过5s后,每三秒钟总价加一元。再次按下按键“btn2”(waiting),停止等待状态,继续行进,状态与上述一样。再次按下按键“btn1”(start),表示客人到达目的地,数码管显示总价,里程以及总等待时间,即开始结算。按下按键“btn0”(rst),所以状态清
5、零。点阵回到无人状态,数码管显示全部清零。2、 资源利用情况五、故障及问题分析本次试验,在实验过程中,发现了众多不同的问题。其中最恶心的一次就是代码调试的时候,没有任何的语法错误,但是它表示编译不通过,说是逻辑单元有1307个,但是设备只能提供1270个,所以无法通过。对于这个问题,我实在不知道该怎么解决,最后只有重新写代码,换了一两个结构后发现问题神奇般的解决了。但我始终不知道原因。其他的问题都只是代码的语法错误之类的,无需赘言。六、总结和结论有过上个学期的一些基础知识后,这次的实验并没有太过于手足无措,总的来说还是比较容易上手。所选的课题逻辑也并不复杂,所以不算太难。还是比较快的实现了所要
6、求的功能。虽然最后发现与老师的要求有一些出入,但总体来说,自己还是比较满意的。因为本次试验所有代码都是自己一个字母一个字母敲出来的,通过与同学们的交流也学到了很多东西,可能也就是因为没有和别的班级同学交流,所以没有达到老师的期望吧!七、源代码(含注释)1、 仿真版library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity taxi isport(clk:in std_logic; start:in std_logic; waiting:in std_logic; rst:in std_logic
7、; T0,T1,T2,T3,T4,T5:out std_logic_vector(3 downto 0) );end;architecture bhv of taxi issignal count:integer range 0 to ;signal km_clk,sec_clk,en:std_logic;signal c1,c2,tt:integer range 0 to 99;signal await,mile,cost:integer range 0 to 99;signal await_s,await_g,mile_s,mile_g,cost_s,cost_g:integer rang
8、e 0 to 9;signal rst_clk,start_clk,waiting_clk:std_logic:=0;signal waiting_time:integer range 0 to 99;beginU1:process(rst,start,waiting)-实现按键 begin if start event and start=1 then if start_clk=1 then start_clk=0; else start_clk=1; end if; end if; if waitingevent and waiting=1 then if waiting_clk=1the
9、n waiting_clk=0; else waiting_clk=1; end if; end if; end process;u2:process(rst,clk) begin if clkevent and clk=1 then if rst=0 then if count=9 then -两秒钟一公里 count=0;km_clk=1;sec_clk=1; elsif count=4 then -一秒钟 count=count+1;km_clk=0;sec_clk=1; elsecount=count+1;km_clk=0;sec_clk=0; end if; end if; end
10、if; end process;U3:process(rst,start_clk,waiting_clk,km_clk) -里程计数 begin if rst=1 then mile=0; -按下“rst”后数字清零 elsif start_clk=0 then mile=mile; -按下“start/stop”后显示总里程 elsif waiting_clk=1 then mile=mile; elsif km_clkevent and km_clk=1 then if mile=99 then mile=0; else mile=mile+1; end if; end if; end p
11、rocess;U4:process(rst,start_clk,waiting_clk,sec_clk) -等待时间计数 begin if rst=1 then await=0;waiting_time=0; -按下“rst”后数字清零 elsif start_clk=0 then await=await; elsif waiting_clk=0 then await=0;en=1; elsif sec_clk event and sec_clk=1 then if await=99 then await=0; else await=await+1;waiting_time=waiting_t
12、ime+1; end if; en=0; -等待状态 end if; end process;U5:process(rst,start_clk,waiting_clk,en) -费用计算 begin if rst=1 then cost=0;c1=0;c2=0;tt=0; -按下“rst”后数字清零 elsif start_clk=0 then cost=cost;c1=c1;c2=c2;tt=5 then -等待时间超过5s每三秒加收一元 c1=(await-5)/3; else c1=0; end if; else if enevent and en=1 then -运行状态 tt=tt+
13、c1;c1=5 then c2=13+2*(mile-5); -超过 5 公里部分,以每公里 2 元收费 else c2=13; end if;end if;cost=c1+c2+1+tt; -再加收一元燃油费 end if; end process;u6:process(clk) begin await_s = await/10; await_g = await MOD 10; mile_s = mile/10; mile_g = mile MOD 10; cost_s = cost/10; cost_g T0T0T0T0T0T0T0T0T0T0T1T1T1T1T1T1T1T1T1T1T2T
14、2T2T2T2T2T2T2T2T2T3T3T3T3T3T3T3T3T3T3T4T4T4T4T4T4T4T4T4T4T5T5T5T5T5T5T5T5T5T5=1001;end case; end process;end; 2、 正式版library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity taxi isport(clk:in std_logic; start:in std_logic; waiting:in std_logic; rst:in std_logic; T:out std_logi
15、c_vector(5 downto 0); Y:out std_logic_vector(6 downto 0); col,row:out std_logic_vector(7 downto 0); led0,led1,led2:out std_logic:=0 );end;architecture bhv of taxi issignal count:integer range 0 to ;signal km_clk,sec_clk,en:std_logic;signal c1,c2,tt:integer range 0 to 99;signal await,mile,cost:intege
16、r range 0 to 99;signal await_s,await_g,mile_s,mile_g,cost_s,cost_g:integer range 0 to 9;signal q:integer range 0 to 9;signal c:std_logic_vector(2 downto 0);signal clk25000:std_logic;signal temp:integer range 0 to 24999;signal rst_clk,start_clk,waiting_clk:std_logic:=0;signal rst1,start1,waiting1:std
17、_logic:=0;signal fd_delay:integer range 0 to ;signal waiting_time:integer range 0 to 99;beginu0:process(clk,rst,start,waiting)-防抖动 begin if(clkevent and clk=1) thenif rst=1 then fd_delay=fd_delay+1;if fd_delay= then rst1=1;led0=1;fd_delay=fd_delay;else rst1=0;led0=0;end if;elsif start=1 thenfd_delay
18、=fd_delay+1;if fd_delay= then start1=1;fd_delay=fd_delay;else start1=0;end if;elsif waiting=1 thenfd_delay=fd_delay+1;if fd_delay= then waiting1=1;fd_delay=fd_delay;else waiting1=0;end if;else fd_delay=0;end if;end if;end process;U1:process(rst1,start1,waiting1)-实现按键 begin if start1 event and start1
19、=1 then if start_clk=1 then start_clk=0;led1=0; else start_clk=1;led1=1; end if; end if; if waiting1event and waiting1=1 then if waiting_clk=1then waiting_clk=0;led2=0; else waiting_clk=1;led2=1; end if; end if; end process;u2:process(rst1,clk) begin if clkevent and clk=1 then if rst1=0 then if coun
20、t= then -两秒钟一公里 count=0;km_clk=1;sec_clk=1; elsif count= then -一秒钟 count=count+1;km_clk=0;sec_clk=1; elsecount=count+1;km_clk=0;sec_clk=0; end if; end if; end if; end process;U3:process(rst1,start_clk,waiting_clk,km_clk) -里程计数 begin if rst1=1 then mile=0; -按下“rst”后数字清零 elsif start_clk=0 then mile=mi
21、le; -按下“start/stop”后显示总里程 elsif waiting_clk=1 then mile=mile; elsif km_clkevent and km_clk=1 then if mile=99 then mile=0; else mile=mile+1; end if; end if; end process;U4:process(rst1,start_clk,waiting_clk,sec_clk) -等待时间计数 begin if rst1=1 then await=0;waiting_time=0; -按下“rst”后数字清零 elsif start_clk=0
22、then await=await; elsif waiting_clk=0 then await=0;en=1; elsif sec_clk event and sec_clk=1 then if await=99 then await=0; else await=await+1;waiting_time=waiting_time+1; end if; en=0; -等待状态 end if; end process;U5:process(rst1,start_clk,waiting_clk,en) -费用计算 begin if rst1=1 then cost=0;c1=0;c2=0;tt=0
23、; -按下“rst”后数字清零 elsif start_clk=0 then cost=cost;c1=c1;c2=c2;tt=5 then -等待时间超过5s每三秒加收一元 c1=(await-5)/3; else c1=0; end if; else if enevent and en=1 then -运行状态 tt=tt+c1;c1=5 then c2=13+2*(mile-5); -超过 5 公里部分,以每公里 2 元收费 else c2=13; end if;end if;cost=c1+c2+1+tt; -再加收一元燃油费 end if; end process;u6:proces
24、s(clk) begin await_s = await/10; await_g = await MOD 10; mile_s = mile/10; mile_g = mile MOD 10; cost_s = cost/10; cost_g = cost MOD 10; if(clkevent and clk=1)then if(temp=24999)then temp=0;clk25000=1; else temp=temp+1;clk25000=0; end if; end if; if(clk25000 event and clk25000 =1)then if(c=101)thenc
25、=000;elsecqqqqqqnull;end case;case c iswhen 000=TTTTTTTYYYYYYYYYYYcol= ;rowcol= ;rowcol= ;rowcol= ;rowcol= ;rowcol= ;rowcol= ;rowqqqqqqnull;end case;case c iswhen 000=TTTTTTTYYYYYYYYYYYcol= ;rowcol= ;rowcol= ;rowcol= ;rowcol= ;rowcol= ;rowcol= ;row=; end case; end if;end if;end process;end; 专心-专注-专业