出租车计费器设计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,依此类推

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
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;
代码文件(付费下载):
![]()
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 出租车计费器设计VHDL代码Quartus仿真
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm