北邮数字电路实验报告_简易出租车计价器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路实验报告简易出租车计价器

班级:

学号:

姓名:

一、设计课题的任务要求

设计一台出租车计价器,不同情况具有不同的收费标准

基本内容

1、行驶公里:用时钟2秒钟表示出租车匀速行驶1公里,在行车5公里以内,按起步价13元收费,超过5公里部分,以每公里2元收费。燃油附加费为每运次1元。

2、途中等待:用按键控制中途等待,等待少于(包括)5秒不收费,超过5秒后每等

待3秒钟加收1元。

3、用数码管分时显示计费金额、行驶里程和等候时间。字母A表示当前处于显示计费

金额状态,字母B表示当前处于显示行驶里程状态,字母C表示当前处于显示等候

时间状态。

4、用按键控制出租车空驶、载客状态并用点阵显示空驶、载客状态。

提高要求

1、用点阵滚动显示收费单据。

2、具有夜间模式,基本单价加收20%的费用。出租汽车收费结算以元为单位,元以下

四舍五入。

3、出租车行驶速度可调可控。

4、多人乘车,分段计价。

5、自拟其它功能。

二、系统设计

1.设计思路

首先考虑得到需要一个分频装置,分别输出频率到计数器与控制器,另有计算单元用来计算里程、时间与费用。

Clk为系统时针,rst、start、waiting分别为重置、开始、等待信号,由按键输入

系统流程图

三、仿真波形及波形分析

四、功能说明及资源利用情况

开始行车

1、功能说明

本次试验成果的主要功能为:

开始点阵显示“无人状态”。

按下按键“btn1”(start),计价器开始正常工作,六个数码管每两个分别显示“总费用”“行进里程”“等待时间”,同时点阵显示“载客状态”。行进里程开始累计,里程数在5公里内总价不变,在超过5公里后,每公里增加两元。

在行进中按下按键“btn2”(waiting),等待时间开始累计,等待时间未超过5s时,等待费用为零,所以总价并不累计。在等待时间超过5s后,每三秒钟总价加一元。

再次按下按键“btn2”(waiting),停止等待状态,继续行进,状态与上述一样。

再次按下按键“btn1”(start),表示客人到达目的地,数码管显示总价,里程以及总等待时间,即开始结算。

按下按键“btn0”(rst),所以状态清零。点阵回到无人状态,数码管显示全部清零。2、资源利用情况

五、故障及问题分析

本次试验,在实验过程中,发现了众多不同的问题。

其中最恶心的一次就是代码调试的时候,没有任何的语法错误,但是它表示编译不通过,说是逻辑单元有1307个,但是设备只能提供1270个,所以无法通过。对于这个问题,我实在不知道该怎么解决,最后只有重新写代码,换了一两个结构后发现问题神奇般的解决了。但我始终不知道原因。

其他的问题都只是代码的语法错误之类的,无需赘言。

六、总结和结论

有过上个学期的一些基础知识后,这次的实验并没有太过于手足无措,总的来说还是比较容易上手。所选的课题逻辑也并不复杂,所以不算太难。还是比较快的实现了所要求的功能。虽然最后发现与老师的要求有一些出入,但总体来说,自己还是比较满意的。因为本次试验所有代码都是自己一个字母一个字母敲出来的,通过与同学们的交流也学到了很多东西,可能也就是因为没有和别的班级同学交流,所以没有达到老师的期望吧!

七、源代码(含注释)

1、仿真版

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity taxi is

port(clk:in std_logic;

start:in std_logic;

waiting:in std_logic;

rst:in std_logic;

T0,T1,T2,T3,T4,T5:out std_logic_vector(3 downto 0)

);

end;

architecture bhv of taxi is

signal count:integer range 0 to 499999999;

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 range 0 to 9;

signal rst_clk,start_clk,waiting_clk:std_logic:='0';

signal waiting_time:integer range 0 to 99;

begin

U1: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 waiting'event and waiting='1' then

if waiting_clk='1'then

waiting_clk<='0';

else waiting_clk<='1';

end if;

end if;

end process;

u2:process(rst,clk)

begin

if clk'event 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';

else

count<=count+1;km_clk<='0';sec_clk<='0';

end if;

end if;

end 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_clk'event and km_clk='1' then

if mile=99 then

mile<=0;

else

mile<=mile+1;

end if;

end if;

end process;

U4:process(rst,start_clk,waiting_clk,sec_clk) --等待时间计数

相关文档
最新文档