出租车计费器课程设计报告(VHDL语言)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子技术课程设计
—出租车计费器的设计
学院:电子信息工程学院
班级:
姓名:
学号:
指导教师:
日期:年月日
出租车计费器设计
一、设计任务与要求
设计并制作一台出租车计费系统,要求如下:
﹙1﹚实现计费功能,计费标准为:按行程里程收费,起步价为7.00元,在车行3公里后再按2.2元/公里计费,当计费器达到或超过20元时,
每公里加收50﹪的车费。
﹙2﹚实现模拟功能:能模拟汽车启动、停止、暂停、加速的状态
﹙3﹚设计动态扫描电路,将车费和里程显示出来,各有两位小数。
二、总体框图
(1)系统总体结构
出租车计费器的组成如上图所示,各部分主要功能包括输入信号模块对车轮传感器传送的脉冲信号进行计数,并以高低脉冲模拟出租汽车启动,停止,暂停,加速按钮,具有输入信号作用;数据转换器模块将计费模块输出的车费和路程转换成4位的十进制数据;译码/动态扫描模块将路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将公里数和计费金额均用4位LED数码管显示。
(2)其流程图如下图所示:
(3)各模块设计功能及设计思路
★信号输入模块
该模块主要实现计费功能和现场模拟功能。计费标准为:按行驶里程计费,起步价为7.00元,并在车行3 km后按2.20元/km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。
★数据转换模块
数据转换模块是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。
★显示模块
显示模块是由七段LED数码管译码和动态扫描显示两部分组成。采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。这段程序所示的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。数码管控制及译码显示模块将十进制的输入信号用七段数码管显示,由七段发光二极管组成数码显示器,利用字段的不同组合。可分别显示0~9十个数字。
★片选信号产生模块
片选信号产生模块是对数码管进行片选并让其能够按照要求显示数据的模块
三、选择器件
设计开发软件:Quartus II6.0
EDA实验箱:EL教学实验箱
四、功能模块
(1)j ifei模块
此模块为计费模块(即总体结构中的信号输入模块),实现计费功能,计费标准为:按行驶里程计费,起步价为7.00元,并在车行3公里后按2.20元/km 计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.30元/km计费。CLK、START、STOP、PAUSE、JS为输入信号,分别代表汽车的起动、停止、暂停和加速,CLK为扫描时钟,硬件实现时加入时钟信号,另有两个输出,即CHEFEI 和LUC,分别代表车费和路程,当车处于行驶状态时,此模块会自动记录下路程与车费状况并作为转换模块的输入。
jifei模块源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jfmk is
port(clk,start,stop,pause,js:in std_logic;
chefei,luc:out integer range 0 to 8000);
end jfmk;
architecture one of jfmk is
begin
process(clk,start,stop,pause,js)
variable a,b:std_logic;
variable aa:integer range 0 to 100;
variable chf,lc:integer range 0 to 8000;
variable num:integer range 0 to 9;
begin
if(clk'event and clk='1')then
if(stop='0') then
chf:=0;
num:=0;
b:='1';
aa:=0;
lc:=0;
elsif(start='0') then
b:='0';
chf:=700;
lc:=0;
elsif(start='1' and js='1' and pause='1') then
if(b='0')then
num:=num+1;
end if;
if(num=9)then
lc:=lc+5;
num:=0;
aa:=aa+5;
end if;
elsif(start='1' and js='0' and pause='1')then
lc:=lc+1;
aa:=aa+1;
end if;
if(aa>=100)then
a:='1';
aa:=0;
else
a:='0';
end if;
if(lc<300)then
null;
elsif(chf<2000 and a='1') then
chf:=chf+220;
elsif(chf>=2000 and a='1')then
chf:=chf+330;
end if;
end if;
chefei<=chf;
luc<=lc;
end process;
end one;
模块分析:首先打开ieee库,用use语句声明使用std_logic_1164和std_logic_unsigned程序包。clk、start、stop、pause、js为敏感信号,定义a,b为中间变量,变量aa、num、chf为位矢量。当时钟上升沿到来时,如果STOP='0'则chf:=0,num:= 0,b:=1,aa:=0,lc:=0, 如果stop='1'且start='0'则chf:=700,lc:=0,stop='1’;如果stop='1'and start='1'and js='1'and pause='1'且 b='0'则num:=num+1;如果stop='1'and start='1'and js='1'and pause='1'且num=9则lc:=lc+1;num:=0,aa:=aa+1。如果stop='1'and start='1'and js='0'and pause='1'则lc:=lc+1;aa:=aa+1;以上各状态分别代表汽车的停止、启动、加速、暂停。如果aa>=100则a:='1',aa:=0,否则a:='0',如果chf<2000且a='1'则chf:=chf+220;如果chf>2000 and a='1'则