出租车计价器简洁版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA嵌入式系统设计专题实践
结课论文
题目:出租车自动计费器
专业:电子信息工程
班级:电子Z1201
姓名:刘之奎
学号:1210910301
一、设计题目:出租车自动计费器
二、设计目标:
设计的出租车自动计费器由起价、行车里程计费和等待时间计费三部分构成,用两位数码管显示行车里程数,两位数码管显示等待时间,用四位数码管显示计费总金额,最大值为99.99元。行车里程单价可预设,默认为1元/公里,等候时间单价为0.5元/10分钟,起价3元(3公里起价)。当等待时间未满十分钟时不计费,等待时间对于10分钟的余数部分不计入总金额。
在起价的3公里内如果存在等待时间,等待时间产生的费用计入总金额。
三、设计原理:
行车里程的计费电路是将汽车行驶的里程数转换成与之成正比的脉冲数,然后由计数译码电路和计费单元转换成收费金额并显示,实验中一个脉冲模拟汽车前进十米,则每100个脉冲表示1公里。同样地,等候时间计费是将等候时间转换成脉冲个数,这里用100个脉冲表示10分钟。
根据设计要求及以上分析,将系统分为脉冲发生单元、计数和控制单元、计费计算单元和动态扫描显示模块。系统的模块框图如下:
图(1)模块框图
(1)分频模块
分频模块将48MHz的频率根据需要分为3个不同频率的脉冲,分别作为行车里程脉冲、等待时间脉冲和译码显示模块的扫描脉冲。每100个行车里
程脉冲代表1公里;每100个等待时间脉冲代表10分钟。
(2)计数和控制模块
计数部分对输入的里程脉冲和等待时间脉冲进行计数,计数有开始(停止)、模式切换、清零等控制信号。开始(停止)信号控制着计数的开始和结束,模式切换用于选择当前工作于哪种计数状态(里程计数还是等待时间计数),清零用于复位所有脉冲计数和计费金额。
(3)计费模块
计费模块对输入的相应脉冲进行处理,得到行车里程数和等待时间并利用事先设置的计价标准进行换算,得到计费金额。
(4)显示模块
对输入的行车里程、等待时间和计费总金额通过动态扫描方式显示在8个数码管上。显示金额的最大值为99.99元;等待时间最大值为99分钟;行车里程最大值为99公里(收到最大显示金额的约束)。
整个系统的原理图如下所示:
图(2)系统原理图
四、设计内容:
(1)分频模块的电路图及VHDL程序
图(3)脉冲产生部分封装图VHDL程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity pulse is
port(clk: in std_logic;
distance_pulse,wait_pulse:out std_logic);
end;
architecture one of pulse is
signal full_1,full_2:std_logic;
begin
p_reg:process(clk)
variable cnt1,cnt2:integer range 479999999 downto 0;
begin
if clk'event and clk='1' then
if cnt1=479999 then
cnt1:=0;
full_1<='1';
else cnt1:=cnt1+1;
full_1<='0';
end if;
if cnt2=2399999 then
cnt2:=0;
full_2<='1';
else cnt2:=cnt2+1;
full_2<='0';
end if;
end if;
end process p_reg;
p_div:process (full_1,full_2)
variable cnt_1,cnt_2:std_logic;
begin
if full_1'event and full_1='1' then
cnt_1:=not cnt_1;
if cnt_1='1' then
distance_pulse<='1';
else distance_pulse<='0';
end if;
end if;
if full_2'event and full_2='1' then
cnt_2:=not cnt_2;
if cnt_2='1' then
wait_pulse<='1';
else wait_pulse<='0';
end if;
end if;
end process p_div;
end;
图(4)显示电路的扫描脉冲封装图VHDL程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity pulse1 is
generic(n:integer:=2399);
port(clk: in std_logic;
Fout:out std_logic);
end;
architecture one of pulse1 is
signal full:std_logic;
begin
p_reg:process(clk)