My title page contents

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

名称:出租车计费器设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

出租车计费器的设计

设备及软件:装有Quartus‖软件完成设计数字系统的计算机

目的:1.了解系统相关功能电路图与印刷电路图的设计、绘制,并完成相关流程的设计以及硬件描述语言VHDL程序的编写、设计与综合和调试仿真工作

     2.学会 QuartusⅡ软件完成设计系统的设计与综合

     3.掌握该数字电路系统的仿真调试,分析系统功能实现的可行性等

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

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

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

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

此时每增加一公里,计费器增加相应的费用。为了便于显示,在编写过程中的数据用BCD码来显示,这样就不存在数据格式转换的问题。比如表示一个三位数,那么就分别用四位二进制码来表示,当个位数字累加大于9时,将其清零,同时十位数字加1,依此类推

要求.jpg

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档.doc

1、工程文件

2、程序文件



3、程序编译

4、RTL图

5、仿真图

整体仿真图


车轮脉冲模块


控制模块



显示模块


部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
   USE ieee.std_logic_arith.all;
--显示模块
ENTITY display IS
   PORT (
      clk              : IN STD_LOGIC;
      mileage      : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--里程
      money  : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--合计费用
      dig_en              : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--7个数码管
      segment              : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选
   );
END display;
ARCHITECTURE behave OF display IS
  
   SIGNAL mileage_int  : INTEGER := 0; --mileage转换为int类型
SIGNAL money_int  : INTEGER := 0; --money转换为int类型
SIGNAL mileage_hun  : INTEGER := 0; --百位
SIGNAL mileage_ten  : INTEGER := 0; --十位
SIGNAL mileage_one  : INTEGER := 0; --个位 
SIGNAL money_hun  : INTEGER := 0; --百位
SIGNAL money_ten  : INTEGER := 0; --十位
SIGNAL money_one  : INTEGER := 0; --个位 
   SIGNAL seg_num      : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000";
   SIGNAL display_data : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";
BEGIN
mileage_int<=Conv_Integer(mileage);--Conv_Integer函数将mileage_out转为int
money_int<=Conv_Integer(money);--Conv_Integer函数将totel_money_out转为int
mileage_hun<=mileage_int/100;--百位
mileage_ten<=mileage_int/10-mileage_hun*10;--十位
mileage_one<=mileage_int-mileage_hun*100-mileage_ten*10;--个位
money_hun<=money_int/100;--百位
money_ten<=money_int/10-money_hun*10;--十位
money_one<=money_int-money_hun*100-money_ten*10;--个位
   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
IF(seg_num="110")THEN--0~6数码管
seg_num<="000";
ELSE
seg_num <= seg_num + "001";--计数
END IF;
      END IF;
   END PROCESS;

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 出租车计费器设计VHDL代码Quartus仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员