eda课程设计-出租车自动计费器

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

电子信息科学与技术专业课程设计任务书

一、设计任务及要求

设计一个出租车计价器:计费包括起步价、行车里程计费、等待时间计费3部分。用3位数码管显示金额,最大值为999.9元,最小计价单元为0.1元;行程3公里内,且等待时间累计3分钟内,起步价10元,超过3公里,以每公里1.6元计费,等待时间单价为每分钟1.5元;用两位数码管显示总里程,最大值为99公里用两位数码管显示等待时间,最大值为59min。

二、设计原理及总体框图

出租车自动计费器分为分频模块、控制模块、计量模块、计费模块、译码和显示模块。

A)、设计原理:

(1)分频模块

分频模块对频率为240HZ的输入脉冲进行分频,得到的频率为16HZ、15HZ、和1HZ的3种频率。该模块产生频率信号用于计费,每个脉冲为0.1元计费控制,其中15Hz信号为1.5元的计费控制,16Hz信号为1.6元计费控制。

(2)计量控制模块

计量控制模块式出租车自动计费器系统的主体部分,该模块主要完成等待计时功能、计价功能、计程功能,同时产生3分钟的等待计时使能控制信号en1、行程3公里外的使能控制信号en0。其中计价功能主要完成的任务是:行程3公里内且等待累计时间在3分钟内起步价为10元3公里以外每公里1.6元计费,等待时间3分钟以外每分钟1.5元计费。计时功能主要完成的任务是:计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零。计程主要完成的任务是:计算乘客所行驶的公里数,计价器的量程为99公里,满量程自动归零。

(3)译码显示模块

该模块利用实验板上的译码器和数码管分别将输出的计费数据(4位BCD

码)、计时数据(2位BCD码)和计程数据(2位BCD码)显示输出。其中计费数据最后以百元、十元、元、叫、角为单位对应的数码管上显示,最大显示为999.9元;计时数据最后送至以分为单位对应的数码管上显示,最大显示为59s;计程数据最后送至以公里为单位的数码管上显示,最大公里为99公里。

B)、总体框图:

根据层次化设计理论将该问题自顶向下可分为分频模块、计量模块、控制模块、译码和显示模块各模块功能如下:

时钟信号等待信号公里信号计费复位分频器

计费

计时

计程

三、程序设计及编译仿真

1)、分频模块:

对频率为240HZ的输入脉冲进行分频,得到的频率为16HZ、15HZ、和1HZ 的3种频率。

程序如下:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

entity fp is

port ( clk :in std_logic;

q16: out std_logic; --频率为16的时钟

q15: out std_logic; --频率为15的时钟

q1: out std_logic); --频率为1的时钟

end fp;

architecture qq of fp is

begin

process(clk)

variable cout16:integer range 0 to 14;

variable cout15:integer range 0 to 15;

variable cout1:integer range 0 to 239;

begin

if (clk'event and clk='1') then

if cout16=14 --240hz分频为16hz

then cout16:=0;q16<='1';

else cout16:=cout16+1;

q16<='0';

end if;

if cout15=15 --240hz分频为15hz

then cout15:=0;q15<='1';

else cout15:=cout15+1;q15<='0';

end if;

if cout1=239 --240hz分频为1hz

then cout1:=0;q1<='1';

else cout1:=cout1+1;q1<='0';

end if;

end if;

end process;

end qq;

仿真波形:

2)计量模块:

该模块主要完成等待计时功能、计价功能、计程功能,同时产生3分钟的等

待计时使能控制信号en1、行程3公里外的使能控制信号en0。以及进行满量程清零。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity jiliang is

port( s: in std_logic; --计量开始信号

fin: in std_logic; --计量路程的信号

stop: in std_logic; --等待信号

clk1: in std_logic; --计量驱动信号

en1,en0: buffer std_logic; --计量控制信号

k1,k0: buffer std_logic_vector(3 downto 0); --路程的计量

m1,m0: buffer std_logic_vector(3 downto 0)); --时间的计量

end jiliang;

architecture rt2 of jiliang is

signal w:integer range 0 to 59;

begin

process(clk1)

begin

if (clk1'event and clk1='1') then --驱动信号发挥作用

if s='0' then w<=0;en1<='0';en0<='0';m1<="0000";m0<="0000";

k1<="0000";k0<="0000"; --初始化值

elsif stop='1' then --等待信号为高时间控制信号开始计时if w=59 then w<=0;

if m0="1001" then m0<="0000";

if m1="0101" then m1<="0000";

else m1<=m1+1;

end if;

else m0<=m0+1;

end if; --计时

if m1&m0>"00000010"then en1<='1'; --当时间大于3min时使能信号en1开始使能

else en1<='0';

end if;

else w<=w+1;en1<='0';

end if;

elsif fin='1' then

if k0="1001" then k0<="0000";

if k1="1001" then k1<="0000";

else k1<=k1+1;

end if;

else k0<=k0+1;

相关文档
最新文档