名称:出租车计费系统设计VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
出租车计费系统设计
设计要求:
设计一个模拟出租车计费的电路系统,具有以下功能
(1)能实现计费功能,计费标准为:按行驶路程收费,起步价为11元,并在车行3公里(3km)后按2元/公里收费。当总费用达到或超过40元时,每公里收费4元。当遇到红绿灯或客户有事需要停车等待时,则按时间收费计费单价为每20s收费1元。
(2)实现预置功能:能预置起步费、每公里收费、车行加费里程、计时收费
(3)实现模拟功能:能模拟汽车行驶、停止和暂停等状态
(4)将路程和车费显示出来,以十进制BCD码方式输出信号
1. 工程文件
2. 程序文件
原理图
代码
3. 程序编译
4. RTL图
5. 仿真图
整体仿真图
里程脉冲模块
控制模块
显示模块
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;--启动信号,行程开始 stop_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,S3,S4,S5,S6); -- 定义状态 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 --状态机 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 (stop_key = '0') THEN--中途停车 state <= S4; ELSIF (all_mileage >= "0000000000000011") THEN--大于3.0公里 state <= S2; ELSE state <= S1; END IF; WHEN S2 =>--车行驶 3.0公里后按每公里2元计费 IF (all_money >= "0000000000101000") THEN--当总费用达到40元时,每公里按4元收费 state <= S3; ELSIF (stop_key = '0') THEN--中途停车 state <= S5; ELSE state <= S2; END IF; WHEN S3 =>--当总费用达到40元时,每公里按4元收费 IF (stop_key = '0') THEN--中途停车 state <= S6; ELSE state <= S3; END IF; WHEN S4 =>--停车等待 IF (start_key = '0') THEN--启动 state <= S1; ELSE state <= S4; END IF; WHEN S5 =>--停车等待 IF (start_key = '0') THEN--启动 state <= S2; ELSE state <= S5; END IF; WHEN S6 =>--停车等待 IF (start_key = '0') THEN--启动 state <= S3; ELSE state <= S6; END IF; WHEN OTHERS => state <= S0; END CASE; END IF; END PROCESS;
源代码
点击下方的公众号卡片获取