出租车计费器带设计报告VHDL代码Quartus仿真

名称:出租车计费器带设计报告VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

出租车计费器带设计报告

3.1.出租车计费器一般都是按公里计费,要求是起步价3 元,准行1 公里,以后1 元/公里。显示部分的七段数码管扫描时钟选择时钟模块的1kHz。一个出租车计费器,有两个计数单位,一个用来计公里,另外一个用来计费用。在出租车的轮子上都有传感器,用来记录车轮转动的圈数,而车轮子的周长是固定的,所以知道了圈数自然也就知道了里程。在这个设计中,用实验箱直流电机模拟出租车轮子,通过传感器,可以得到电机每转一周输出一个脉冲波形,转动一圈认为是行走1米,所以每旋转1000 圈,认为车子前进1 公里。

2.用按键模块的S1来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。

3.用七段数码管显示要求为前4个显示里程,后3个显示费用。

提示:首先在复位信号的作用下将所有用到的寄存器进行清零,然后开始设定到起步价记录状态,在此状态时,在起步价规定的里程里都一直显示起步价,直到路程超过起步价规定的里程时,系统转移到每公里计费状态,此时每增加一公里,计费器增加相应的费用。

1.quartusII9.0和13.0均有

2.VHDL

1. 工程文件

2. 程序文件

原理图

代码

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图(顶层模块)

分频模块

状态机模块

数码管控制模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--控制模块
ENTITY ctrl IS
   PORT (
      clk               : IN STD_LOGIC;--时钟
      rst              : IN STD_LOGIC;--复位信号
      start_key         : IN STD_LOGIC;--启动信号,行程开始
      pulse_in      : IN STD_LOGIC;--1公里脉冲
      mileage    : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--里程
      money      : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--合计费用
   );
END ctrl;
ARCHITECTURE behave OF ctrl IS
--定义状态
   TYPE state_type IS (S0,S1,S2);  -- 定义状态
   SIGNAL state: state_type;    -- 创建信号
   SIGNAL all_money   : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";--总价钱
   SIGNAL all_mileage       : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";--里程
   SIGNAL sec_10   : STD_LOGIC := '0';
   SIGNAL cnt : integer := 0;
BEGIN
--起步价3 元,准行1 公里,以后1 元/公里
--状态机
   PROCESS (clk, rst)
   BEGIN
      IF (rst = '0') THEN
         state <= S0;--复位
      ELSIF (clk'EVENT AND clk = '1') THEN
         CASE state IS
            WHEN S0 =>--空闲状态
               IF (start_key = '0') THEN--按下起动键start,汽车起动
                  state <= S1;
               ELSE
                  state <= S0;--空闲状态
               END IF;
            WHEN S1 =>--起步价状态
               IF (all_mileage >= "0000000000000001") THEN--大于1.0公里
                  state <= S2;
               ELSE
                  state <= S1;
               END IF;
            WHEN S2 =>--车行驶 1.0公里后按每公里1元计费
                  state <= S2;
            WHEN OTHERS =>
               state <= S0;
         END CASE;
      END IF;
   END PROCESS;
   
   PROCESS (clk, rst)
   BEGIN
      IF (rst = '0') THEN
         all_money <= "0000000000000000";--清零
         money <= "0000000000000000";--清零
      ELSIF (clk'EVENT AND clk = '1') THEN
         money <= all_money;--输出合计费用
         CASE state IS
            WHEN S0 =>--空闲状态
               IF (start_key = '0') THEN--按下起动键start,汽车起动
all_money <= "0000000000000011";--显示起步价3元,1公里
               ELSE
                  all_money <= "0000000000000000";
               END IF;
            WHEN S1 =>--起步价状态
               all_money<=all_money;
            WHEN S2 =>--车行驶 1.0公里后按每公里1元计费
               IF (pulse_in = '1') THEN
                  all_money <= all_money + "0000000000000001";--每公里1元计费
               END IF;
         END CASE;
      END IF;
   END PROCESS;
源代码

点击下方的公众号卡片获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值