
出租车自动计价器设计.ppt
21页8.22 8.22 出租车自动计价器设计出租车自动计价器设计设计要求n设计一个出租车计价器n该计价器的计费系统:行程 3公里内,且等待累计时间2分钟内,起步费为10元;3公里外以每公里元计费,等待累计时间2分钟外以每分钟以元计费n并能显示行驶公里数、等待累计时间、总费用主要技术指标n ①计价范围:0~元 计价分辨率: 元n ②计程范围:0~99公里 计程分辨率: 1公里n ③计时范围:0~59分 计时分辨率: 分系统组成 它由外部输入模块、FPGA模块、显示模块三部分组成FPGA时钟信号计 费 /复位公里脉冲控制器分频器等待信号计费计时计程译码显示模块设计n1. 分频模块n2. 控制模块n3. 计量模块n4. 译码模块n5. 显示模块1.分频模块n分频模块对频率为240Hz的输入脉冲进行分频,n得到的频率为16Hz,15Hz和1Hz的三种频率2. 控制模块n控制模块是系统的核心部分,对计价器的状态进行控制3.计量模块完成下面3个功能:n 计价功能n 计时功能n 计程功能n计价部分:行程 3公里内,且等待累计时间2分钟内,起步费为10元;3公里外以每公里元计费,等待累计时间2分钟外以每分钟元计费。
n计时部分:计算乘客的等待累计时间计时器的量程为59分,满量程自动归零n计程部分:计算乘客所行驶的公里数计程器的量程为99公里,满量程自动归零4.译码模块n计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示n计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示n计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示5.显示模块n计价数据在以百元、十元、元、角为单位对应的数码管上显示n计时数据在以分为单位对应的数码管上显示n计程数据在以公里为单位的数码管上显示显示出租车计价器程序设计与仿真出租车计价器电路符号 电梯程序端口定义nentity taxi isnport (clk_240 :in std_logic; --频率为240Hz的时钟 n start :in std_logic; --计价使能信号n stop:in std_logic; --等待信号n fin:in std_logic; --公里脉冲信号n cha3,cha2,cha1,cha0:out std_logic_vector(3 downto 0); --费用数据n km1,km0:out std_logic_vector(3 downto 0); --公里数据 n min1,min0: out std_logic_vector(3 downto 0)); --等待时间 nend taxi;电梯程序中间信号定义nsignal f_15,f_16,f_1:std_logic; --频率为15Hz,16Hz,1Hz的信号nsignal q_15:integer range 0 to 15; --分频器nsignal q_16:integer range 0 to 14; --分频器nsignal q_1:integer range 0 to 239; --分频器nsignal w:integer range 0 to 59; --秒计数器 nsignal c3,c2,c1,c0:std_logic_vector(3 downto 0);--制费用计数器nsignal k1,k0:std_logic_vector(3 downto 0); --公里计数器nsignal m1:std_logic_vector(2 downto 0); --分的十位计数器 nsignal m0:std_logic_vector(3 downto 0); --分的个位计数器nsignal en1,en0,f:std_logic; --使能信号 注:仿真图中秒跟分的关系为3进制,即w为2时就归0;出租车总行驶里程为5公里,等待累计时间为4分钟,总费用为16.2 元。
出租计价器程序仿真图-开头部分注:行驶公里数为4时,f得到16个计价脉冲数,计价器加16既等效于加元注:等待累计时间为3分钟时,f得到15个计价脉冲计价器的数值增加15即等效于加元feipin:process(clk_240,start)nif clk_240'event and clk_240='1' thenn if start='0' then q_15<=0;q_16<=0;f_15<='0';f_16<='0';f_1<='0';f<='0';n elsen if q_15=15 then q_15<=0;f_15<='1'; --得到频率为15Hz的信号n else q_15<=q_15+1;f_15<='0';n end if;n -- ……得到16Hz和1Hz的信号方法与上面相同n if en1='1' then f<=f_15; --此IF语句得到计费脉冲fn elsif en0='1' then f<=f_16;n else f<='0';n end if;n end if;n end if;process(f_1)n elsif stop='1' then n if w=59 then w<=0; --此IF语句完成等待计时n if m0="1001" then m0<="0000"; --此IF语句完成分计数 n if m1<="101" then m1<="000";n else m1<=m1+1;n end if;n else m0<=m0+1;n end if;n if m1&m0>"0000001"then en1<='1'; --此IF语句得到en1使能信号n else en1<='0';n end if;n else w<=w+1;en1<='0';n end if;。












