出租车计价器VHDL代码Quartus仿真

名称:出租车计价器VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

要求

1.该出租车计价器,计费包括起步价、等待时间计费、里程计费、燃油附加费四部分

2.白天计价模式:起步价为90元,3km之内按起步价计费,超过3km,每km增加2元,等待时间单价为每分钟0.1元,燃油附加费2.0元。

3.夜晚计价模式:起步价为10.0元,3km之内按起步价计费,超过3km,每km增加2元,等待时间单价为每分钟0.1元,燃油附加费20元;

4.用两位数码管显示总里程,最大值为99km,用两位数码管显示等待时间,最大值为59min,用四个数码管显示总费用,最大值为9999元。

1. 工程文件

2. 程序文件

顶层电路

3. 程序编译

4. RTL图

5. 仿真图

顶层

Keyin模块

Speed模块

Times模块

Kmmoney模块

部分代码展示:

library ieee; --加载库文件
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity keyin is
port(             --定义输入输出端口
clk50MHZ  :in std_logic;--输入时钟50MHZ
reset:in std_logic;--复位信号,低电平复位
key_on:in std_logic;--开始计费按键
key_off:in std_logic;--停止计费按键
key_kong:in std_logic;--空档按键
key_up:in std_logic;--空档按键
moshi:in std_logic;--
key_start:out  std_logic;--开始计费信号
key_stop :out  std_logic;--停止计费信号
sp   :out std_logic_vector(2 downto 0); --档位,key_speed0,空,加减档
        clk_1khz_out:out  std_logic;
        clk_1hz_out:out  std_logic;
        mode :out  std_logic
);
end  ;
architecture rtl of keyin is
signal spp  : std_logic_vector(2 downto 0):="000";
signal CLK100HZ,CLK1kHZ,CLK1HZ:std_logic;
signal key :std_logic_vector(4 downto 0);
signal bai:std_logic;
begin
key<=key_on & key_off & key_kong & key_up & moshi ;
----------------分频程序----------------------------
PROCESS(clk50MHZ,reset)
 VARIABLE  Q1  :integer range 0 to 500000; --定义标准逻辑位矢量数据类型
 VARIABLE  Q2  :integer range 0 to 500000; --定义标准逻辑位矢量数据类型
 VARIABLE  Q3  :integer range 0 to 50000000; --定义标准逻辑位矢量数据类型
  BEGIN    
  if reset='0'then
CLK100HZ<='0';
CLK1kHZ<='0';
CLK1HZ<='0';
Q1 :=0;
Q2 :=0;
Q3 :=0;
  ELSIF  RISING_EDGE(clk50MHZ) THEN  
   IF Q1>=9 --50 000 000 /((249+1)*2)=100  HZ50m/100=x,x/2-1=  249999
then Q1 :=0;
CLK100HZ<=NOT CLK100HZ;--10ms
ELSE
Q1 := Q1 + 1 ;
   END IF;
   IF Q2>=2  --50 000 000 /100x,x/2-1  HZ  24999
then Q2 :=0;
CLK1kHZ<=NOT CLK1kHZ;--1ms
ELSE
Q2 := Q2 + 1 ;
   END IF;
      IF Q3>=24  --50 000 000 /((24999+1)*2)=1  HZ  24999999
then Q3 :=0;
CLK1HZ<=NOT CLK1HZ;--1s
ELSE
Q3 := Q3 + 1 ;
   END IF;
    END IF;
     clk_1hz_out<=CLK1HZ;
 clk_1khz_out<=CLK1kHZ;
 END PROCESS; 
---------------------------------------------------
process(CLK100HZ,reset)    --敏感信号发生变化时,启动进程
variable keyflag:std_logic:='0';
begin
if reset='0'then--复位清零
spp<="000";--速度清0
keyflag:='0';
key_start<='0';
key_stop<='0';
bai<='1';
elsif CLK100HZ'event and CLK100HZ='1'then--时钟上升沿到达时,状态转换
if(key="11111")thenkeyflag:='0'; end if;
 if(keyflag='0')then 
if(key_on='0')then --开始计费
keyflag:='1';--保持按键按下标志
key_start<='1';--开始计费
key_stop<='0';spp<="001";
elsif(key_off='0')then --停止计费
keyflag:='1';--保持按键按下标志
key_start<='0';-- 
key_stop<='1';--停止计费
elsIF(key_kong='0')then --空档按下
keyflag:='1';--保持按键按下标志
spp<="000";--速度清0
elsIF(key_up='0')then --
keyflag:='1';--保持按键按下标志
spp<="001";--
elsif(moshi='0')then--白天夜间模式切换
keyflag:='1';--保持按键按下标志
bai<=NOT bai;
end if;
end if;
end if;
sp <=spp;
mode <=bai;
end process;
end rtl;
源代码

 扫描文章末尾的公众号二维码

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值