当前位置:文档之家› eda课程设计-出租车自动计费器

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

电子信息科学与技术专业课程设计任务书一、设计任务及要求设计一个出租车计价器:计费包括起步价、行车里程计费、等待时间计费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 isport ( 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 isbeginprocess(clk)variable cout16:integer range 0 to 14;variable cout15:integer range 0 to 15;variable cout1:integer range 0 to 239;beginif (clk'event and clk='1') thenif cout16=14 --240hz分频为16hzthen cout16:=0;q16<='1';else cout16:=cout16+1;q16<='0';end if;if cout15=15 --240hz分频为15hzthen cout15:=0;q15<='1';else cout15:=cout15+1;q15<='0';end if;if cout1=239 --240hz分频为1hzthen 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 isport( 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 issignal w:integer range 0 to 59;beginprocess(clk1)beginif (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' thenif k0="1001" then k0<="0000";if k1="1001" then k1<="0000";else k1<=k1+1;end if;else k0<=k0+1;if k1&k0>"00000010" then en0<='1'; --当路程大于3km时使能信号en0开始发挥作用else en0<='0';end if;else en1<='0';en0<='0';end if;end if;end process;end rt2;仿真波形:3)、控制模块:该模块主要进行时间和里程的切换。

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity kongzhi isport(ent0,ent1:in std_logic; --输入的使能选择信号clk_in1:in std_logic; --输入脉冲clk_in2:in std_logic; --输入脉冲clk_out:out std_logic); --输出脉冲end kongzhi;architecture rt4 of kongzhi isbeginprocess(ent0,ent1)beginclk_out<=clk_in1;elsif ent1='1' thenclk_out<=clk_in2;end if;end process;end rt4;仿真波形:4)、计费模块:该程序主要进行起步价设置,和计费功能。

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity jifei isport(clk2:in std_logic; --计费驱动信号start: in std_logic; --计费开始信号c0,c1,c2,c3: buffer std_logic_vector(3 downto 0));--费用显示信号end jifei;architecture rt3 of jifei isbeginprocess(clk2,start)beginif start='0' then c3<="0000";c2<="0001";c1<="0000";c0<="0000"; elsif (clk2'event and clk2='1') thenif c0="1001" then c0<="0000";if c1="1001" then c1<="0000";if c2="1001" then c2<="0000";if c3="1001" then c3<="0000";--计费功能else c3<=c3+1;end if;else c2<=c2+1;end if;end if;else c0<=c0+1;end if;end if;end process;end rt3;仿真波形:5)、译码显示模块:译码显示模块是应用实验工具箱上的自带的硬件电路显示译码。

相关主题