出租车自动计费系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计

东北石油大学课程设计任务书

课程EDA技术课程设计

题目出租车自动计费系统

专业电子信息工程姓名邵文瀚学号080901140717

主要内容、基本要求、主要参考资料等

主要内容:

设计一个最大量程为99.99元的出租车自动计费,计费器具有行车里程计费、等候时间计费及起价三部分功能,并用数码管显示车费的数目。

基本要求:

1、设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四位数码管显示总金额,最大值为99.99元;

2、行车里程单价1元/公里,等候时间单价0.5元/10分钟,起价3元(3公里起价)均能通过人工输入。

3、行车里程的计费电路将汽车行驶的里程数转换成与之成正比的脉冲数,然后由计数译码电路转换成收费金额,实验中以一个脉冲模拟汽车前进十米,则每100个脉冲表示1公里,然后用BCD码比例乘法器将里程脉冲乘以每公里单价的比例系数,比例系数可由开关预置。例如单价是1.0元/公里,则脉冲当量为0.01元/脉冲。

4、用LED显示行驶公里数,两个数码管显示收费金额。

主要参考资料:

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.

[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.

[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

完成期限2011.3.11

指导教师

专业负责人

2011年3月7日

一、总体设计思想

1.基本原理

随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。本设计采用AT89S52单片机为主控器,以A44E霍尔传感器测距,实现对出租车的多功能的计价设计,输出采用8段数码显示管。

大体设计思路为把传感器安装在车轮上,主要检测汽车行进的公里数,并产生一系列相应的脉冲输出,脉冲送到单片机进行处理,单片机根据程序设定通过计算脉冲数换算出行驶公里数,再根据从EEPROM中读取的价格等相关数据进行金额的计算,计算好的金额、里程和单价都实时地显示在数码管上。独立键盘可以调节价格等相关数据,按下相应的按钮,产生信号交由单片机处理并实时显示出来,调节好的数据存储到EEPROM中,掉电后可以使调好的数据不丢失,系统结构图如图。

2.设计框图

根据计费器设计要求,可将该系统分成四大模块,一块为计费模块,一块为时间计时模块,一块为路程控制模块,另一块为输出显示模块。

二、设计步骤和调试过程

1、总体设计电路

主控机系统采用了Atmel 公司生产的 AT89S52单片机,它含有256 字节数据存储器,内置8K 的电可擦除FLASH ROM ,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。复位电路和晶振电路是AT89S52 工作所需的最简外围电路。单片机最小系统电路图如下图所示。

速度控制模块 路程控制模块

计费模块

描显示模块

2、模块设计和相应模块程序

2.1速度控制程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity sudukongzhi is

port(clk,reset,start:in std_logic;

k:in std_logic_vector(2 downto 0);

clkout:out std_logic);

end sudukongzhi;

ARCHITECTURE FUN OF sudukongzhi IS

signal count1:std_logic_vector(1 downto 0);

signal tmpclk,clks:std_logic;

begin

kinside<="000"-k;

clks_label:

process(reset,clk)

variable count2:std_logic_vector(2 downto 0);

begin

if reset='0' then

count2:="000";

elsif (clk'event and clk='1') then

if start='1' then

if count2=kinside then count2:="000";

end if;

if not(k="000") then count2:=count2+1; end if;

if count2="001" then tmpclk<=not tmpclk; end if;end if;end if;end process;

clkout<=tmpclk;end FUN;

2.2路程控制程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY luchengkongzhi IS

PORT(clk,reset:in std_logic;

lucheng1:out std_logic_vector(3 downto 0);

lucheng2:out std_logic_vector(3 downto 0);

end luchengkongzhi;

ARCHITECTURE FUN OF luchengkongzhi IS

begin

process(clk,reset)

variable mm:std_logic_vector(11 downto 0);

相关文档
最新文档