文档库 最新最全的文档下载
当前位置:文档库 › 出租汽车里程计价表

出租汽车里程计价表

出租汽车里程计价表
出租汽车里程计价表

电子技术课程设计任务书

电子技术课程设计任务书

2.对课程设计成果的要求〔包括图表、实物等硬件要求〕:

设计电路,安装调试或仿真,分析实验结果,并写出设计说明书,语言流畅简洁,文字不得少于3500字。要求图纸布局合理,符合工程要求,使用Protel软件绘出原理图(SCH)和印制电路板(PCB),器件选择要有计算依据。

3.主要参考文献:

[1]谢自美。电子线路设计、实验、测试[M]华中理工大学,2001

[2] 彭介华. 电子技术课程设计指导[M]. 北京:高等教育出版社,1997

[3] 毕满清. 电子技术实验与课程设计[M]. 北京:机械工业出版社,1995

[4] 陈明义. 电工电子技术课程设计指导[M]. 长沙:中南大学出版社,2002

[5] 陈永甫. 新编555集成电路应用800例[M]. 北京:电子工业出版社2000

4.课程设计工作进度计划:

序号起止日期工作内容

1 2011-1-3 布置任务,教师讲解设计方法及要求

2 2011-1-4 学生查找阅读资料,并确定方案

3 2011-1-5 学生设计小组会议,讨论方案

4 2011-1-6~11 设计、仿真实验

5 2010-1-12~13 写说明书,小组讨论

6 2010-1-14 答辩

指导教师苏泽光日期: 2010 年 12 月日

目录

引言 (1)

1系统设计 (2)

1.1设计内容 (2)

1.2设计目的 (2)

1 3设计要求 (2)

1.4设计思路 (2)

1.5设计框图 (2)

1.6设计所需的元件 (3)

2.工作原理 (3)

2.1总体构想 (3)

2.2 AT89S51单片机及其引脚说明 (3)

2.3 AT24C02引脚图及其引脚功能、掉电存储单元设计 (5)

2.4里程计算、计价单元的设计 (6)

2.5 按键单元的设计 (8)

2.6语音功能的设计 (8)

3.系统主程序设计 (8)

3.2 定时中断服务程序设计 (9)

3.3 里程计数中断服务程序设计 (9)

3.4 中途等待中断服务程序设计 (9)

3.5 显示子程序服务程序设计 (9)

3.6 键盘服务程序设计 (9)

4.系统测试 (11)

4.1 测试使用的仪器或软件 (11)

4.2 出租汽车里程计价表VHDL程序 (11)

4.2.1模块设计 (11)

4.2.2 VHDL程序设计 (11)

4.3 出租汽车里程计价表模块原理图符号 (14)

4.4 程序仿真图 (15)

结论 (17)

参考文献 (18)

心得体会 (19)

附录1 主要元器件清单 (20)

附录2 电路原理图及印制板图 (21)

摘要

本设计阐述了以多数地区的出租车计价器为例,采用VHDL硬件描述语言编写主程序并利用EDA技术仿真设计的出租车计费器,使其具有计量功能、漏电保护功能、语音功能等。本设计是以单片机AT89C51为核心,以8279、7407, 75451等智能芯片为外设的出租车计价器的微机系统设计。给出了硬件电路图及主程序流程图,阐述了软硬件设计过程中关键技术的处理。

关键词:出租车计价器,单片机AT89S51,VHDL,EDA

This design expatiated in most areas of the taxi devices as an example, the authors VHDL VHDL write main-level programs and using EDA technology simulation design taxi piece, make its have metering, leakage protection function, the speech function etc. This design based on single-chip microcomputer AT89C51 as the core, with 75451 etc, 8279, 7407 intelligent chips for peripheral taxi meter of microcomputer system design. It also presents the hardware circuit diagram and main program flowchart, elaborated the hardware and software design process of key technologies of the processing.

Keywords: taxi meter, microcontroller, VHDL, EDA AT89S51

引言

凡是坐过出租车的人都知道,只要出租车一开动,随着行驶里程的增加,都会看到出租车前面的计价器里程数字显示的读数从零开始逐渐增大,而当行驶到某一数值(如3km)时计费数字显示开始从起步价(如8元)增加。到达目的地时,便可以按计价器显示的数字收费。

随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在着买卖纠纷困扰着行业的发展。而在出租车行业中解决这一矛盾的最好方法就是改良计价器。用更加精良的计价器来为乘客提供更加方便快捷的服务。

汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。

电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。为此我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程就可以轻易而举的实现。避免了机械开关带来的不稳定因素。

现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。

1 系统设计

1.1设计内容

(1)设计秒信号、0.1分信号脉冲产生器。

(2)选用十进制系数乘法器。

(3)设计四级BCD码计数、译码和显示器。

(4)选用产生行驶里程信号的干簧继电器作为脉冲产生电路。

1.2 设计目的

(1)掌握出租汽车里程计价表的设计、组装与调试方法。

(2)掌握同步十进制系数乘法计数芯片74167的工作原理。

(3)进一步加深对计数、寄存器、译码及显示电路的理解。

1.3设计要求

(1)根据任务,设计整机逻辑电路,画出详细框图和总原理图。

(2)选用中小规模集成器件,实现所选定的电路。提出器材清单。

(3)在逻辑箱上接插电路,并进行单元电路调试和整机调试。

(4)检查设计结果。

1.4 设计思路

本次设计以51单片机作为控制器,用霍尔传感器集成芯片44E检测并输出脉冲,送到单片机,由单片机完成计程数及车费的换算及显示。输出采用7 段数码显示管。通过人工按键的方式进行情况的切换。

1.5 设计框图

图1-1 程序设计框图

1.6 设计所需的元件

AT89S51单片机一个,喇叭一个,七段显示器4个,M24C02DW6芯片一个,RESPACK3原件四个,74HC164芯片四个,行程开关SW-PB若干个,con2,3,4插针各一个,电源若干,接地若干,电阻若干,无极性电容若干个。

2.工作原理

2. 1总体构想

它由以下几个部件组成:单片机AT89S51、总金额及单价显示部件、键盘控制部件,AT24C02 掉电存储控制、里程计算单元、串中显示驱动电路等。

利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。具体电路参见“总体电路图”。

图2-1单片机控制方案

2.2 AT89S51单片机及其引脚说明

AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有很高性价比。

AT89S51是一个有40个引脚的芯片,引脚配置如下图所示。

图2-2AT89S51引脚配置

AT89S51芯片的40个引脚功能为:

VCC 电源电压。

GND 接地。

RST 复位输入。当RST变为高电平并保持2个机器周期时,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISKRTO位缺省为RESET输出高电平打开状态。

XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2 来自反向振荡放大器的输出。

P0口一组8位漏极开路型双向I/O口。也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,P1接收低8位地址。P1口部分端口引脚及功能如表1所示。

表1 P1口特殊功能

P1口引脚特殊功能

P1.5 MOSI(用于ISP编程)

P1.6 MOSI(用于ISP编程)

P1.7 SCK(用于ISP编程)

P2口一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收低8位地址。

P3口一个带内部上拉电阻的8位双向I/O口。P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2所示。P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号。

表2 P3口特殊功能

P3口引脚特殊功能

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 (外部中断0)

P3.3 (外部中断1)

P3.4 T0(定时器0外部输入)

P3.5 T1(定时器1外部输入)

P3.6 (外部数据存储器写选通)

P3.7 (外部数据存储器读选通)

PSEN 程序储存允许输出是外部程序存储器的读先通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN/信号。

EA/VPP 外部访问允许。欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。Flash存储器编程时,该引脚加上+12V的编程电压VPP。

2.3 AT24C02引脚图及其引脚功能

AT24C02芯片引脚配置如下图所示:

图2-3 AT24C02引脚配置图

AT24C02芯片DIP封装,共有8个引脚,下表是其引脚功能表:

WP接VSS时,禁止写入高位地址,WP接VDD时,允许写入任何地址;

2.3.1 AT24C02 掉电存储单元的设计

掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02是ATMEL 公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40 年以上,而且采用8脚的DIP封装,使用方便。其电路如下图:

图2-4 掉电存储电路原理图

图中R8、R9是上拉电阻,其作用是减少M24C02的静态功耗,由于M24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。

每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。

2.4 里程计算、计价单元的设计

里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。其原理如下:

图2-5 传感器测距示意图

由于A44E 属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V),其输出的信号符合TTL 电平标准,可以直接接到单片机的IO 端口上,而且其最高检测频率可达到1MHZ。

(a)(b)

图2-6 集成开关型霍耳传感器原理图

A44E集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E 五个基本部分组成,如上图所示。(1)、(2)、(3)代表集成霍耳开关的三个引出端点。

在输入端输入电压VCC,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的

方向上将会产生霍耳电势差V

H 输出,该V

H

信号经放大器放大后送至施密特触发器整形,

使其成为方波输送到OC 门输出。当施加的磁场达到『工作点』(即B

OP

)时,触发器输出

高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状

态为『开』。当施加的磁场达到『释放点』(即B

rP

)时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为『关』。这样两次电压变换,使霍耳开关完成了一次开关动作。

其集成霍耳开关外形及接线如下图:

(a)(b)

图2-7 集成霍耳开关外形及接线

我们选择了P3.2 口作为信号的输入端,内部采用外部中断0(这样可以减少程序设计的麻烦),车轮每转一圈(我们设车轮的周长是1米),霍尔开关就检测并输出信号,引起单片机的中断,对脉计数,当计数达到1000次时,也就是1公里,单片机就控制将

金额自动的加增加,其计算公式:当前单价×公里数=金额。

2.5 按键单元的设计

电路共采用了四个按键,S1、S2、S3、S4,其功能分别是:S1分屏显示切换按键,S2功能设定按键,S3『+』/白天晚上切换按键,S4『-』/中途等待开关。

2.6 语音功能的设计

语音功能主要用于语音提示:为降低计价器成本,节省单片机I/O资源,语音功能的实现没有采用专用语音芯片,而是由4个权电阻构成。如下图所示:

图2-8 语音功能电路

语音信号经A/D采集处理后压缩成4位,存储在程序存储器中,由软件使用。程序存储器中可存储70K的语音数据,共60个汉语词汇。

3.系统的软件设计

本系统的软件设计主要可分为主程序模块、定时计数中断程序、里程计数中断服务程序、中途等待中断服务程序、显示子程序服务程序、键盘服务程序六大模块。下面对各部分模块作介绍。

3.1 系统主程序设计

在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。其程序流程如主程序流程图所示。当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就

停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。

3.2 定时中断服务程序设计

在定时中断服务程序中,每100ms 产生一次中断,当产生10次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。其程序流程如定时中断服务程序图所示。

3.3 里程计数中断服务程序设计

每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000次时,就有程序将当前总额,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。其程序流程如定时中断服务程序图所示。

3.4 中途等待中断服务程序设计

当在计数状态下霍尔开关没有输出信号,片内的T1 定时器便被启动,每当计时到达10分钟,就对当前金额加上中途等待的单价,以后每十分钟都自动加上中途等待的单价。当中途等待结束的时候,也就自动切换到正常的计价。

3.5 显示子程序服务程序设计

由于是分屏显示数据,所以就要用到2 个显示子程序,分别是:时分秒显示子程序(HMS_DIS)、金额单价显示子程序(CP_DIS)。

3.6 键盘服务程序设计

键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。其程序流程如图所示.

是否

开始

保护现场

重置计数初值

数据送显示缓冲单元调用显示子程序

中断10次?

恢复现场

并中断返回

图3-1程序设计流程图

4.系统测试

4.1 测试使用的仪器或软件

由于目前制作上的困难,该系统只作计算机仿真。仿真时我们采用VHDL对系统进行仿真。

4.2 出租汽车里程计价表VHDL程序

4.2.1模块设计

(1)秒分频模块

秒分频模块对频率为240Hz的输入脉冲进行分频,得到16Hz、15Hz、1Hz三种频率。

(2)控制模块

控制模块是系统的核心部分,对计价器的状态进行控制。

(3)计量模块

计量模块完成计价、计时、计程功能。

计价部分:当出租车的起价为5元,当里程小于3km时,按起价计算;当里程大于3km时,按1.3元/km计算。等待时间累计超过2min时,按1.5元/min计算。计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示。

计时部分:计算乘客的等待累计时间。计时器的量程为59min,满量程自动归零。计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管显示。

计程部分:计算乘客所行驶的公里数。计程器的量程为99km,满量程自动归零。计程数据送入显示译码模块进行译码,最后送至以公里为单位对应的数码管显示。

(4)译码显示模块

完成计价、计时、计程数据显示。

4.2.2 VHDL程序设计

--文件名:taxi.hd。

--功能:出租汽车里程计价表。

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity taxi is

port ( clk_240 :in std_logic; --频率为

240Hz的时钟 start :in std_logic; --计价使能

信号 stop:in std_logic; --等待信号

fin:in std_logic; --公里脉冲

信号

cha3,cha2,cha1,cha0:out std_logic_vector(3 downto 0);

--费用数据 km1,km0:out std_logic_vector(3 downto 0); --公里数据 min1,min0: out std_logic_vector(3 downto 0)); --等待时间end taxi;

architecture behav of taxi is

signal f_15,f_16,f_1:std_logic; --频率为15Hz,

16Hz,1Hz的信号signal q_15:integer range 0 to 15; --分频器signal q_16:integer range 0 to 14; --分频器signal q_1:integer range 0 to 239; --分频器signal w:integer range 0 to 59; --秒计数器signal c3,c2,c1,c0:std_logic_vector(3 downto 0); --制费用计数器signal k1,k0:std_logic_vector(3 downto 0); --公里计数器signal m1:std_logic_vector(2 downto 0); --分的十位计数器signal m0:std_logic_vector(3 downto 0); --分的个位计数器signal en1,en0,f:std_logic; --使能信号begin

feipin:process(clk_240,start)

begin

if clk_240'event and clk_240='1' then

if start='0' then q_15<=0;q_16<=0;f_15<='0';f_16<='0';f_1<='0';f<='0';

else

if q_15=15 then q_15<=0;f_15<='1'; --此IF语句得到频

率为15Hz的信号 else q_15<=q_15+1;f_15<='0';

end if;

if q_16=14 then q_16<=0;f_16<='1'; --此IF语句得到频

率为16Hz的信号 else q_16<=q_16+1;f_16<='0';

end if;

if q_1=239 then q_1<=0;f_1<='1'; --此IF语句得到频

率为1Hz的信号 else q_1<=q_1+1;f_1<='0';

end if;

if en1='1' then f<=f_15; --此IF语句得到计

费脉冲f

elsif en0='1' then f<=f_16;

else f<='0';

end if;

end if;

end if;

end process;

process(f_1)

begin

if f_1'event and f_1='1' then

if start='0' then

w<=0;en1<='0';en0<='0';m1<="000";m0<="0000";k1<="0000";k0<="0000";

elsif stop='1' then

if w=59 then w<=0; --此IF语句完

成等待计时 if m0="1001" then m0<="0000"; --此IF语句完

成分计数

if m1<="101" then m1<="000";

else m1<=m1+1;

end if;

else m0<=m0+1;

end if;

if m1&m0>"0000001"then en1<='1'; --此IF语句得到

en1使能信号 else en1<='0';

end if;

else w<=w+1;en1<='0';

end if;

elsif fin='1' then

if k0="1001" then k0<="0000"; --此IF语句完成公里

脉冲计数

if k1="1001" then k1<="0000";

else k1<=k1+1;

end if;

else k0<=k0+1;

end if;

if k1&k0>"00000010" then en0<='1'; --此IF语句得到en0

使能信号

else en0<='0';

end if;

else en1<='0';en0<='0';

end if;

cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0; --费用数据输出km1<=k1;km0<=k0;min1<='0'&m1;min0<=m0; --公里数据、分钟

数据输出

end if;

end process;

process(f,start)

begin

if start='0' then c3<="0000";c2<="0001";c1<="0000";c0<="0000";

elsif f'event and f='1' then

if c0="1001" then c0<="0000"; --此IF语句完成对费

用的计数 if c1="1001" then c1<="0000";

if c2="1001" then c2<="0000";

if c3<="1001" then c3<="0000";

else c3<=c3+1;

end if;

else c2<=c2+1;

end if;

else c1<=c1+1;

end if;

else c0<=c0+1;

end if;

end if;

end process;

end behav;

4.3 出租汽车里程计价表模块原理图符号

图4-1 出租汽车里程计价表模块原理图符号图

4.4 程序仿真图

图4-2 为出租计价器程序仿真全图

相关文档