出租车计价器设计方案(5篇范例)

时间:2019-05-14 03:33:18下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《出租车计价器设计方案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《出租车计价器设计方案》。

第一篇:出租车计价器设计方案

系统硬件组成

总体结构如图一所示。硬件上主要由HT46RU24单片机,霍尔传感器,空载开关,键盘电路,数据存储电路,时钟电路,显示电路,蜂鸣器,IC卡电路以及串口电路组成。

1.1 HT46RU24单片机。

HT46RU24单片机是HOLTEK公司研制的一种低功耗,高性能的8位单片机。它的ROM为8k*

16、RAM为384 bytes,最多有40个双向IO口。除此之外它还具有8通道12位分辨率的A/D转换,A/D转换可用来监测外部模拟信号,如侦测电池电压、电流、温度、湿度、压力、明暗度等。提供两种模式的PWM输出可应用于控温、调速、定电压、定电流等。可控的PFD输出用于发声,或是红外线传输的载波信号。

HT46RU24的UART属于全双工异步通信,可由软件设定波特率,并具有自动检错功能,利用UART与其它系统做数据传输时,可减少软件的负担,提高整个系统的使用效率。

HT46RU24单片机具有高的抗噪声特性、WDT及LVR的功能用以加强MCU的稳定性。

HALT和唤醒功能可降低功耗。HT46RU24单片机还可当I2C从机使用。管脚图如图二所示。

1.2 霍尔传感器

将安装在车辆变速箱输出端齿轮的霍尔传感器接到单片机外部中断接口上,车轮每转动一圈,霍尔传感器将产生一个下降沿脉冲,触发外部中断。

1.3 键盘电路 为了节省IO口,设计一个2*4的矩阵键盘,在程序设计中每一个按键所代表的功能如表一所示。

图二 HT46RU24管脚图

表一 按键功能

1.4 空载开关电路(如图三)

设计一个空载开关,开关闭合时读到低电平“0”,打开时读到高电平“1”,通过两次读取开关的数值,判断出租车所处的不同状态,如表二所示,两次读到“0”说明出租车处于空车状态,两次都读到“1”说明出租车处于载客状态,第一次读到“0”第二次读到“1”出租车从空车变到载客,第一次读到“1”第二次读到“0”出租车从载客变到空车。

图三 开关电路

表二 开关状态判断

1.5 数据存储器和时钟电路

扩展I2C总线的AT24C256存储统计信息, PCF8563做时钟输出,这两种芯片可共用IO口以节省IO口的使用。AT24C256存储芯片有256K的存储容量,分页存储,每页有64个字节的容量。PCF8563芯片有一个可编程的时钟输出,一个中断输出和掉电检测器电路。

1.6 显示电路和蜂鸣器电路

使用可显示汉字及图形的液晶SMG12864来显示里程价,误时价,附加费,统计信息等等。这款液晶内置国标GB2312码简体中文字库(16x16点阵)、128个字符(8x16点阵)及64x256点阵显示RAM(GDRAM)。与单片机的连接有8-位并行及串行两种连接方式。在本设计中采用并行通讯方式,电路图如图四所示,在软件编程时要置位PA0。

蜂鸣器单元设计目的是在于进行一些特殊操作时,能够发出不同的提示音。

图四 液晶显示电路

1.7 IC卡电路(如图五)

计价器具有IC卡付费功能,所采用的IC卡是SLE4442卡,它是德国西门子公司设计的一种逻辑加密卡。SLE4442卡具有3KB的存储容量和完全独立的可编程加密代码存储器(PSC),是国内目前应用较广的一种IC卡。

图五 IC卡电路

1.8 串口电路(如图六)。

设计串口电路来完成计价器与PC机通信。计价器传送统计信息到PC机,接收并储存从PC机传送过来的基本信息,包括车轮直径,校正时钟,起步价、里程价、回空价、等待价等计费参数。在PC机上可以采用VB、VC等设计串口通信界面,通过串口电路管理者能够采集详实、准确的营运数据,这些数据经过PC机处理后能够详细的做出日报表、月报表、运作分析表等,比较直观的反映出租车的营运情况,便于管理部门全面掌握第一手资料,及时针对所出现的情况做出准确的判断和决策,从而实现微机化、科学化管理。

图六 串口电路

2.软件结构

在主程序中,最主要是根据开关状态做不同的处理。状态0:保持空车;状态1:保持载客;状态2:空车变载客;状态3:载客变空车。主程序流程如图七所示。

图七主程序流程

2.1 保持空车

空车部分主要是做显示、PC机通信以及IC卡消费。通过设置程序实现按不同的按键完成不同的功能。例如按下“0”键,液晶屏会显示当日的统计信息,再按下“2”键会显示前一日的统计信息,按下“4”键显示后一日的统计信息,具体要完成的功能如表一所示。

2.2 空车变载客

这部分要完成禁止串口中断和启动计价。启动计价是为载客部分要完成的计价、计时程序做一些初始化的工作。例如要读出计价参数,给计程、计时、总误时单元清0,判断是否是夜班,启动定时器等。

2.3 保持载客

载客部分,主要是处理误时价和里程价,要用到50MS定时器中断和外部中断,需要定义计时单元来存储两个外部中断之间的时间,定义累计误时单元存储累计等待时间。50MS中断到来时置位F_50MS,在载客部分会调用50MS中断处理程序,流程如图八所示,该程序主要对计时单元进行处理,如果计时单元大于10S,调用误时价子程序ADD_PT。

通过霍尔传感器,车轮每转动一圈,会触发外部中断,在中断子程序里首先要关定时器,存T0计数值,给定时器重新置50MS计数初值后置位F_int0并开定时器。在载客部分也会调用外部中断处理子程序,流程如图九所示,当检测到车速低于特定值时,需要计算误时价,将计时单元加入累计误时单元中,其中ADD_PS是里程价子程序。

2.3.1 误时价。

误时价程序主要是判断累计等待时间是否超过规定的等待时间(Twait),超过以后,每过10S增加一次10S误时价,流程图如图九所示,其中F_wait表示起价等待时间到标志。

2.3.2 里程价

里程价子程序关键是判断计程单元S的大小,判断是起步价,还是3KM-8KM的短途价或是8KM以上的长途价。

2.4 载客变空车

这部分要完成停止计价、存统计信息、允许串口中断的操作,关键是存储统计信息。每月最多有31天,每天需要4个字节的容量,这样一个月的信息至少需要124个字节。因为采用的存储芯片AT24C256是分页存储,每页有64个字节的容量,如果给每个月的信息分配128个字节,这样通过计算公式:(月-1)×32×4+(日-1)×4+ADDRESS_AT3(ADDRESS_AT3表示在AT24C256里分配给统计信息的起始地址)很容易存储和查看每日统计信息,所以我们给每个月的信息分配2页128个字节的容量。

3.结论

本文详细的阐述了用HT46RU24单片机实现出租车计价器的软硬件原理。程序设计清晰、有条理,维护性强,整个电路完整、紧凑,成本低,且具有操作简单,管理方便,安全可靠、功能强的优点。计价器的核心HT46RU24单片机,软件编程灵活、自由度大、功能强,功耗低,性价比高,技术成熟。

第二篇:出租车计价器

基于单片机的出租车计价器设计

摘要

出租车计价器的数字系统的设计正是基于一些专用的芯片,才发挥其有效特性,从而实现出租车的计价功能。此数字系统主要分为三个单元,即里程计数及显示单元、价格计数及显示单元、脉冲产生。本设计是一个基于单片机AT89C51的出租车自动计费设计,附有复位电路,时钟电路等。关键词:出租车计费器;单片机;控制

Abstract Taximeter design digital system is based on some special chip, to play their effective characteristics, thus realizing the taxi valuation function.This system is mainly divided into there modules, namely the mileage counting and display unit, and display unit price counting, pulsing.The design is based on a single chip AT89C51taxis design, a reset circuit, clock circuit.Keywords:taximeter,a single-chip microcomputer,control

1引言

1.1 设计目的

近几年来,出租汽车行业在各地得以蓬勃发展,但采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强。

1.2 功能要求

(1)用前4位数码管实时显示里程数,单位为千米,最后一位为小数位;用后4位数码管时时显示金额数,单位为元,最后一位为小数位。

(2)规定出租车里程小于2千米收费5元,超过2千米收费为8*(way-20)/5。

1.3 设计方法

本设计采用AT89C51单片机为主控器,并用频率信号发生器模拟车速,利用AT89C51的定时器工作在方式1下定时实现对出租车的计价设计,输出采用共阴极的集成8位7段数码显示管。设计方案及原理

2.1 设计方案

采用AT89C51单片机为主控器,并用频率信号发生器模拟车速,利用AT89C51的定时器/定时器T1工作在方式1下定时实现对出租车的计价设计,输出采用共阴极的集成8位7段数码显示管。本电路设计的计价器不但能实现基本的计价,而且

单片机原理及系统课程设计报告

还能根据里程来调节单价。

2.2 设计原理

出租车计价是根据车所行驶的路程以及乘客乘车的里程综合决定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。通过计数接收到的脉冲个数,计算出当前所行驶的路程。同时,通过数码管显示当前的行驶里程和需支付的车费。出租车计价器用于记录里程、起步公里数与价格的关系。模拟出租车计价器能根据总里程数、起步公里数的情况作出相应报价等。这个系统以AT89C51单片机为主控器,单片机的计数器/定时器T1工作在方式1下来对外部脉冲计数,最后通过集成的8位7段LED数码管显示里程数和价钱。总体模块框图如图1所示。

总金额显示单价显示AT89C51脉冲产生动态扫描数码管显示

图1 总体框图 硬件设计

对于AT89C51的计数器/定时器T1,通过对寄存器TCON的设置,即使它的M1M0=01,计数器/定时器T1工作在方式1下,构成16位计数器/定时器。此时TH0、TL0都是8位加法计数器。此设计中,T1为计数工作方式,计数范围为1~2^16=1~65536(个外部脉冲)。当计数溢出时则置位并申请中断,进入中断服务 执行中断程序。

通过74HC138接P20、P21、P22输出来对8位7段的智能扫描LED进行段选,并且通过P1口对LED进行位选,最后将结果显示在LED上。硬件设计图如图2所示。

74HC138是三八译码器,在工作之前,使74HC138的使能端有效,再使74HC138的A、B、C接P20、P21、P22的输出达到对LED位选线的控制,使相应的位显示相应的结果。硬件总设计图如图2所示。

第三篇:出租车计价器设计范文

平顶山工业职业技术学院

目录

目录......................................................................................................................................................1 前言......................................................................................................................................................2 第一章 系统工作原理........................................................................................................................2 1.1 功能说明..............................................................................................................................2 1.2 基本原理..............................................................................................................................2 第二章 硬件设计...............................................................................................................................3 2.1 单片机最小系统单元..........................................................................................................3 2.2 A44E霍尔传感器检测单元................................................................................................4 2.3 AT24C01存储单元..............................................................................................................6 2.4 键盘调整单元......................................................................................................................7 2.5 显示单元..............................................................................................................................8 第三章 软件设计...............................................................................................................................8 3.1 系统主程序..........................................................................................................................8 3.2 中断程序..............................................................................................................................9 3.2.1 里程计数中断程序...................................................................................................9 3.2.2 中途等待中断程序.................................................................................................10 3.3 计算程序............................................................................................................................10 3.4 显示程序............................................................................................................................10 3.5 键盘程序............................................................................................................................10 第四章 总结.....................................................................................................................................11 参考文献............................................................................................................................................12

平顶山工业职业技术学院

算出行驶公里数,再根据从EEPROM中读取的价格等相关数据进行金额的计算,计算好的金额、里程和单价都实时地显示在数码管上。独立键盘可以调节价格等相关数据,按下相应的按钮,产生信号交由单片机处理并实时显示出来,调节好的数据存储到EEPROM中,掉电后可以使调好的数据不丢失,下次得电后直接从EEPROM读到单片机,系统结构图如图1。

图1 系统结构图

第二章 硬件设计

2.1 单片机最小系统单元

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

平顶山工业职业技术学院 的最简外围电路。单片机最小系统电路图如图2所示。

图2 单片机最小系统图

AT89S52 的复位端是一个史密特触发输入,高电平有效。RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M 晶振和两个30pF 电容组成系统的内部时钟电路。

2.2 A44E霍尔传感器检测单元

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

A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。

在输入端输入电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点(即Bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作。A44E霍尔传感器原理如图3所示。

平顶山工业职业技术学院

图3 A44E霍尔传感器原理

里程计算是通过安装在车轮上的霍尔传感器检测到的脉冲信号,送到单片机产生中断,单片机再根据程序设定,计算出里程。其原理如图4所示。

图4 传感器测距示意图

本系统选择了将A44E的脉冲输出口接到P3.3口外部中断1作为信号的输入端(这样可以减少程序设计的麻烦),车轮每转一圈(设车轮的周长是1米),霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数,当计数达到1000次时,即1公里,单片机就控制将金额自动增加,如图5。

图5 A44E霍尔元件接线图

平顶山工业职业技术学院

2.3 AT24C01存储单元

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

存储单元电路连接如图7所示。

图 7 存储单元电路原理图

图中R4、R5 是上拉电阻,其作用是减少AT24C01 的静态功耗。由于AT24C01的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(时钟脉冲)和SDA(数据/地址)与单片机P2.2和P2.3口连接,进行传送数据。

平顶山工业职业技术学院

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

2.4 键盘调整单元

当单价等信息需要进行修改时,就要用到键盘进行修改。由于调节信息不多,故采用4个独立键盘即可,分别实现清零、切换、增大、减小和功能等作用。电路原理如图8所示。

图8 键盘调整单元接线图

S1:接P1.0口,对上一次的计费进行清零,为下次载客准备

S2:接P1.1口,实现白天和夜晚单价的切换;当功能键S4按下时,S2可对数据进行增大。

S3:接P1.2口,当功能键S4按下时,S3可对数据进行减小。

S4:接P1.3口,按1次,进入调整白天单价;按2次,进入调整夜晚单价;按3次,进入调整等待单价;按4次,进入调整起步价;按5次,返回。

平顶山工业职业技术学院

2.5 显示单元

显示单元由7个8段共阳数码管组成,采用动态扫描进行显示。前三个数码管分别接P3.0、P3.1和P3.2,用于显示总金额;中间两个分别接P3.4和P3.5,用于显示里程;后边两个分别接P3.6和P3.7,用于显示单价。电路如图9所示。

图9 数码管显示图

第三章 软件设计

3.1 系统主程序

在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化以及中断、计算、循环等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价送数码管显示出来。程序流程如图10所示。

平顶山工业职业技术学院

图10 主程序流程图

图11 计算程序流程图

3.2 中断程序

3.2.1 里程计数中断程序

每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000次时,进入里程计数中断服务程序中,里程变量加一。主函数中总金额也相应地变化。

101112-

第四篇:出租车计价器 硬件课程设计

硬件课程设计报告

题目:出租车计价器

目录

1. 引言....................................................................................................................................错误!未定义书签。

1.1设计目的................................................................................................................错误!未定义书签。1.2设计任务................................................................................................................错误!未定义书签。1.3设计思路................................................................................................................错误!未定义书签。

2.需求分析.............................................................................................................................错误!未定义书签。

2.1芯片原理................................................................................................................错误!未定义书签。2.1.1可编程计数器/定时器8253/8254原理.............................................................错误!未定义书签。2.1.2可编程外围接口芯片8255原理.......................................................................错误!未定义书签。2.1.3 12864液晶显示器ST7920原理........................................................................错误!未定义书签。2.2硬件设计................................................................................................................错误!未定义书签。2.3软件设计................................................................................................................错误!未定义书签。2.3.1功能模块图.........................................................................................................错误!未定义书签。2.3.2程序流程图.........................................................................................................错误!未定义书签。2.3.3模块流程图.........................................................................................................错误!未定义书签。

3.详细设计.............................................................................................................................错误!未定义书签。

3.1程序模块分析........................................................................................................错误!未定义书签。3.1.1初始化模块程序分析.........................................................................................错误!未定义书签。3.1.2判断开关程序模块分析.....................................................................................错误!未定义书签。3.1.3圈数统计模块程序分析.....................................................................................错误!未定义书签。3.1.4计算里程模块程序分析.....................................................................................错误!未定义书签。3.1.5显示模块程序分析.............................................................................................错误!未定义书签。3.1.6结束模块程序分析.............................................................................................错误!未定义书签。3.2程序代码................................................................................................................错误!未定义书签。

4.5.6.程序结果.............................................................................................................................错误!未定义书签。分析与测试.........................................................................................................................错误!未定义书签。体会.....................................................................................................................................错误!未定义书签。

附录A:参考文献.....................................................................................................................错误!未定义书签。

一、引言

1.1设计目的

现在各大城市出租车已经成为了一种重要的交通工具,当然出租车的收费问题也成了人们关注的焦点,那么怎么样才能实现一种合理的收费方式让大家都认可呢?在这种要求下,出租车自动计价器就走进了人们的生活,当然这就要求有一种合理公正的计价器收费方式。这不仅关系到出租车计价器的市场,也影响这出租车的市场,这就要求我们设计出更好的计价器来满足人们的需求。

本设计是关于出租车计价器的设计。在本次设计中,我以计价器的基本功能作为设计的重点。为了完成上述设计,我们采用了8254、8255等芯片,用计算机汇编语言进行软件功能的实现。

1.2设计任务

1.实现一个出租车计价器,可以显示起步价。2.一个键来控制是否到达终点,是否计价要清零。3.基于路程的出租车计价方式。

1.3设计思路

利用直流电机来模仿出租车轮子的转动来计算出租车行进的路程。将直流电机的直流端与滑动变阻器相连,通过人工控制滑动变阻器来模拟出租车的行进;并将计数端与8253CLK0端相连,GATE0接高电平,工作方式为方式二。直流电机每转1000圈,8253输出一个高电平,假设出租车已经走了1公里。同时将8253OUT0接入8255方便CPU读取。再将8255与ST7920显示器相连,CPU通过控制8255来控制显示,一旦8255从8253读入一个高电平,则公里数加一,同时价格相应增加。另有一个开关连入8255,用以判断出租车计价器是否启动。

二、需求分析

2.1芯片原理

本节主要在介绍本次设计所用到的芯片的原理,共有可编程计数器/定时器8253/8254、可编程外围接口芯片8255和12864液晶显示器ST7920原理三种芯片。

2.1.1可编程计数器/定时器8253/8254原理

图2-1 8254内部结构图

从图2-1可见,8254内部包含数据总线缓冲器、读/写控制逻辑、控制字寄存器和3个结构完全相同的计数器,这3个计数器分别称为计数器0、计数器1和计数器2。

图2-2 8254管脚图

A1、A0:地址输入线,用来控制8253内部的4个端口,即3个计数器和1个控制字寄存器与CPU系统地址线相连。

CLK0-2:时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。CLK可以是系统的时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。

GATE0-2:门控输入端,用于外部控制计数器的启动计数和停止计数的操

作。两个或两个以上计数器连用时,可用此信号同步,也可用于与外部某信号的同步。

OUT0-2:计数输出,当计数器从初值开始完成计数操作进,OUT引脚输出相应的信号。

8253的方式控制字

图2-3 8254控制字图

本设计中8254的功能

只是用通道1,采用方式三。采用二进制计数,输入0FFFH。先输入低字节,再输入高字节。当8254从0FFFFH递减到159FH时(即转了60000圈时),8254向总线发信号使程序向下进行。

2.1.2可编程外围接口芯片8255原理

内部结构如图所示,由以下4个部分组成:

图2-4 8255内部结构图

(1)输入/输出端口A、B、C。这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。A口和B口是一个独立的8位I/O口。C口:可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。

(2)A组和B组控制电路。这是两组根据CPU命令控制8255A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255A的工作方式,也可以根据编程命令来对C口的指定位进行置/复位的操作。A组控制电路用来控制A口及C口的高4位;B组控制电路用来控制B口及C口的低4位

(3)读/写控制逻辑。(同上:它负责管理8255A的数据传输过程。它接收CS*及RD*、WR*、RESET,还有来自系统地址总线的口地址选择信号A0和A1。将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发给这两个部件,以完成对数据、状态信息和控制信息的传输。)

(4)数据总缓冲器。(同上:它是8位的双向的三态缓冲器。作为8255A与系统总线连接的界面,输入/输出的数据,CPU的编程命令以及外设通过8255A传送的工作状态等信息,都是通过它来传输的。)

如图所示8255A的芯片引脚信号。除了电源和地以外,其他信号可以分为两组:

图2-5 8255管脚图

1.和外设一边相连的: PA7-PA0:A组数据信号

PB7-PB0:B组数据信号 PC7-PC0:C组数据信号 2.和CPU一边相连的:

RESET:复位信号,低电平有效。当RESET信号来到时,所有内部寄存器就被清除,同时,3个数据端口被自动设为输入端口。

D7-D0:它们是8255A的数据线,和系统数据总线相连。

CS*:芯片选择信号,低电平有效。在一个系统中,一般根据全部接口芯片来分配若干较低位地址(比如A5、A4、A3)来组成各种芯片选择码,当这几位地址组成某一个代码时,译码器便往8255A的CS*端输出一个低电平,于是8255A被选中。只有当 CS*有效时,读信号RD*和写信号WR*才对8255A有效。

RD*:芯片读出信号低电平有效。WR*:芯片写入信号低电平有效。8255的方式控制字格式

图2-6 8255控制字图

本设计中8255的功能

8255PA0-PA7和PC0-PC2与ST7920相连,控制输出。PB0与8253的OUT1相连,读入8253OUT1 的数据。PB1与开关K0相连,读入K0的数值用于确定是否开启计价器。

2.1.3可编程外围接口芯片8255原理

ST7920控制器系列中文图形液晶模块的软件特性主要由ST7920控制驱动器决定。ST7920同时作为控制器和驱动器,它可提供33路com输出和64路seg输出。在驱动器ST7921的配合下,最多可以驱动256×32点阵液晶。

ST7920是台湾矽创电子公司生产的中文图形控制芯片,它是一种内置12864汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。该芯片共内置8192

个中文汉字(16×16点阵)、128个字符的ASCII字符库(8×16点阵)及64×2256点阵显示RAM(GDRAM)。

为了能够简单、有效地显示汉字和图形,该模块内部设计有2MB的中文字型CGROM和64×256点阵的GDRAM绘图区域;同时,该模块还提供有4组可编程控制的16×16点阵造字空间;除此之外,为了适应多种微处理器和单片机接口的需要,该模块还提供了4位并行、8位并行、2线串行以及3线串行等多种接口方式。利用上述功能可方便地实现汉字、ASCII码、点阵图形、自造字体的同屏显示,所有这些功能(包括显示RAM、字符产生器以及液晶驱动电路和控制器)都包含在集成电路芯片里,因此,只要一个最基本的微处理系统就可以通过ST7920芯片来控制其它的芯片

图2-7 ST7920外观尺寸图

本设计中ST7920的功能

用于显示出租车行驶路程与应收费用。

2.2硬件设计

其中,8253GATE1连+5V高电平,直流电机连0~+5V,8253连280h~287h,8255连288h~28fh。8255PA0-PA7连ST7920显示器D0-D7,PC0连DI,PC1连RW,PC2连E。开关K0连8255PB0。8253CLK1连直流电机计数端。

0~+5V直流电机D0-D7计数ST7920显示屏DIRWE+5VGATE1CLK1PA0-PA7+5VPC0PC1PC2开关K0PB0+5V8253CS8255CS280H-288H289H-28FH总线图2-8硬件连接图

实际连接图如下图所示

图2-9硬件实际连接图

2.3软件设计 2.3.1功能模块图

本节先给出一个程序的功能模块图。

出租车计价器系统计价器开关功能模块读入直流电机转圈数模块ST7920显示功能模块根据里程计算价格模块

图2-10软件功能模块图

2.3.2程序流程图

本节先给出一个程序的整体流程图。

开始结束8253初始化液晶显示屏初始化8255初始化是计价器是否开始工作通过8255读入b0否是否有键盘输入否液晶显示屏初始化是液晶显示屏调用显示价格功能从直流电机读入输入圈数将更改过的路程在显示器中显示出来读到一定圈数走的路程加一比较路程是否大于3公里是价格为(路程-3)*2+7 元将储存的显示字符串内路程价格改为目前路程价格否价格为7元

图2-11软件程序流程图

2.3.3模块流程图

如果对整个程序进行细分则可以分为初始化模块,判断开关模块,圈数统计模块,计算里程模块、结束模块和显示模块。其中初始化模块是8253芯片、8255芯片和显示屏的初始化。判断开关模块是对8255的b0端是否有高电平进行判断。

圈数统计模块是对直流电机传入8253中高电平的数量进行圈数统计。计算里程模块是对里程及价格进行计算的模块。结束模块是程序结束的操作与方法。显示模块是控制显示屏显示计算模块的结果。

初始化模块显示模块调用关判断开关模块开结束模块圈数统计模块计算里程模块调用显示模块图2-12软件模块流程图

三、详细设计

3.1程序模块分析

我们将按模块分析程序的功能并给出模块内的功能流程图。

3.1.1初始化模块分析

在初始化模块中,我们定义了需要使用的8255和8254的接口,需要使用的变量如JSS,要输出的字符串等,初始化了DS,完成了8255的初始化以及显示屏的初始化。其流程图为

开始图3-1初始化模块流程图

3.1.2判断开关模块分析

以上为判断开关模块,在判断开关模块中,系统读入8255PB0的电平,如果是高电平则程序继续进行,如果是低电平则程序调用chushi函数,用屏幕显示“空车欢迎乘坐”,并继续度8255PB0直到有高电平为止。其流程图如下所示:

8255PB0是否为高电平是圈数统计模块否Chushi函数计数变量和对应的字符串置零显示 空车 欢迎乘坐 调用显示模块

图3-2判断开关模块流程图

3.1.3圈数统计模块分析

在圈数统计模块中,我们将直流电机计数端连入8254CLK1中(8253采用方式三),在CLK1中读所记的数,从0FFFFH向下计,一直计到159FH,即转了6000圈后,进入程序的下一段。其流程图如下所示:

读8254计数值否是否到159FH以下是重新将8254计数初值设为0FFFFH计算里程模块

图3-3圈数统计模块流程图

3.1.4计算里程模块分析

我们用地址JSS里表示已经走过的公里,即8254传过来的高电平,同时我们采用价格公式来计算价格,将其里程和价格对应的中文字码表存入要显示的字符串中。我们用地址JSS里表示已经走过的公里,即8254传过来的高电平,同时我们采用价格公式来计算价格,将其里程和价格对应的中文字码表存入要显示的字符串中。

计算公式为: 价格=(里程-3)* 2……(里程>3)

价格= 7…………………..(里程<=3)并调用显示模块来显示这些字码其流程图如下所示:

圈数统计模块计数值JSS加一并十进制化里程数加一里程数是否是大于3是价格为(里程-3)*2调用显示模块否价格为7

图3-4计算里程模块流程图

3.1.5显示模块分析

在显示模块中,我们使用ST7920显示我们要显示的两行字符串。我们采取先显示第一行,再显示第二行的方法,只是用ST7920的中间两行。

调整显示屏指针指向第二行调整显示屏指针指向第三行调整字符串指针指向第一个字调整字符串指针指向第九个字输出输出延时延时

图3-5显示模块流程图

3.1.6结束模块分析

结束模块在程序的尾部在结束模块中,我们规定只要在键盘上按任意一个键就会结束整个程序。如果无键按下,则程序自动跳转到程序头部。其程序流程图如下图所示:

调用DOS中断是否有键按下是结束否判断开关模块

图3-6结束模块流程图

3.2程序代码

IO8253A

EQU 280H IO8253B

EQU 281H IO8253C

EQU 283H

DATA

SEGMENT HZ DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH

DW BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放原始输出 HZ_TAB DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH

DW 0BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放要输出的值 HZ_BG DW 0BFD5H,0B3B5H,0A2A0H,0A2A0H,0BBB6H,0D3ADH,0B3CBH,0D7F8H

DW 0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H;存放“空车欢迎乘坐”

HZ_ADR DB ?

;存放显示行起始端口地址 JSS

DW 0000H DII

DW 0000H GAO

DW 0000H ZHE

DW 0000H NUMBER

DW 0A3B0H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H,0A3B8H,0A3B9H DATA

ENDS IO_ADDRESS

EQU 288H

CODE SEGMENT ASSUME CS:CODE,DS:DATA START:

MOV AX,DATA MOV DS,AX

MOV DX,IO_ADDRESS ADD DX,3 MOV AL,82H OUT DX,AL

;8255初始化 MOV AL,0FFH MOV DX,300H OUT DX, AL CALL CLEAR

;LCD 清除

LLL:

MOV DX,IO_ADDRESS ADD DX,1 IN AL,DX

;判断开关是否打开 AND AL,01H CMP AL,01H JZ F0 CALL CHUSHI JMP LLL F0: MOV AL,01110110B MOV DX,IO8253C OUT DX,AL

;8254初始化 MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH

;设置计数初值0FFFFH OUT DX,AL F1: MOV AL,01000000B

MOV DX,IO8253C OUT DX,AL MOV DX,IO8253B

IN AL,DX MOV AH,AL IN AL,DX XCHG AH,AL CMP AX,159FH

;查看是否下降到159FH JA F1

;不满足条件继续读值

MOV AL,01110110B

;重置8253 MOV DX,IO8253C OUT DX,AL MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH OUT DX,AL

CALL DISP

;调显示子程序

CALL DDSP

CALL DELAY PUSH DX

MOV AH,06H MOV DL,0FFH INT 21H POP DX

JZ LLL

MOV AH,4CH

;退出

INT 21H L1:

JMP

START;L1

CHUSHI PROC NEAR

LEA SI, HZ_TAB LEA DI,HZ MOV CX,0FH F3: ADD SI,2 ADD DI,2 MOV AX,[DI] MOV [SI],AX LOOP F3

;重置HZ_TAB

MOV AX,0000H LEA BX,JSS MOV [BX],AX LEA BX, HZ_BG MOV CH,2

CALL LCD_DISP LEA BX, HZ_BG MOV CH,3

;显示“空车欢迎乘坐” CALL LCD_DISP RET CHUSHI ENDP

DDSP

PROC NEAR

LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX]

MOV BP,AX AND BP,00FFH ADD BP,BP

MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+6],DX

;将JSS中低八位传入HZ_TAB MOV BP,AX AND BP,0FF00H ROR BP,8 ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+4],DX

LEA BX, HZ_TAB

MOV CH,2

CALL LCD_DISP LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AX,0003H

JBE L3 CALL BJ LEA BX,JSS JMP L4

L3:MOV BP,0007H

ADD BP,BP MOV DX,WORD PTR[BP+SI ] MOV WORD PTR[DI+24],DX JMP L4 L4:

LEA BX, HZ_TAB

MOV CH,3

CALL LCD_DISP RET DDSP

ENDP

BJ

PROC NEAR

LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AL,03H

;将JSS中高八位传入HZ_TAB

;显示第2行信;比较路程与3的大小;路程比3小的情况

;显示第3行信息

JAE BJ1 SUB AH,01H ADD AL,0AH SUB AL,03H AAS

;路程减三并十进制化 JMP BJ2 BJ1:

SUB AX,0003H BJ2: MOV CX,AX AND AX,00FFH ADD AL,AL AAA ADD AX,07H AAA

LEA BX,DII MOV [BX],AX;DII MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+24],DX

MOV AX,CX SHR AX,8 AND AX,00FFH ADD AL,AL

AAA LEA BX,GAO MOV [BX],AX;GAO LEA BX,DII MOV DX,[BX];DII AND AX,00FFH AND DX,0FF00H SHR DX,8 AND DX,00FFH ADD AL,DL

AAA LEA BX,ZHE MOV [BX],AX;ZHE MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI]

;路程加七并十进制化;先计算个位

;十位相加

;再加进位

MOV WORD PTR[DI+22],DX

;再计算十位 LEA BX,ZHE MOV DX,[BX] LEA BX,GAO MOV AX,[BX] AND DX,0FF00H AND AX,0FF00H SHR AX,8 SHR DX,8 ADD DL,AL

;百位加进位 AAA MOV BP,DX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+20],DX

;最后计算百位 RET BJ ENDP

DISP

PROC NEAR

;显示子程序

PUSH DX

LEA BX, JSS

MOV AX,WORD PTR[BX]

ADD AL,01H

CMP AL,09H

;判断是否<=9

JLE NUM

;若是则为'0'-'9',ASCII码加30H

MOV AL,00H

ADD AH,01H

CMP AH,0AH

JZ L2 NUM:

MOV WORD PTR[BX],AX

ADD AL,30H

ADD AH,30H

MOV DL,AH

MOV DH,AL

MOV AH,02H

;屏幕显示

INT 21H

MOV DL,DH

MOV AH,02H

;屏幕显示

INT 21H

MOV DL,0DH

;加回车符

INT 21H

MOV DL,0AH

;加换行符

INT 21H

POP DX

RET

;子程序返回 DISP ENDP L2: MOV AH,4CH

;退出

INT 21H

CLEAR

PROC

MOV AL,0CH

CLEAR

FUNCUP

;

;

;

FUNCUP

LCD_DISP

;

DISP_SEC:

NEXT:

CONTINUE:

MOV DX, IO_ADDRESS OUT DX,AL

;设置CLEAR命令 CALL CMD_SETUP

;启动LCD执行命令 RET

ENDP

PROC MOV AL, 0FH

;LCD功能设置命令 OUT DX, AL CALL CMD_SETUP MOV AL, 34H

;LCD显示状态命令 OUT DX, AL CALL CMD_SETUP RET

ENDP PROC LEA BX, HZ_TAB CMP CH, 2 JZ DISP_SEC MOV BYTE PTR HZ_ADR, 88H

;第三行起始端口地ADD BX,16

;指向第二行信息 JMP NEXT MOV BYTE PTR HZ_ADR,90H MOV CL,8

PUSH CX MOV AL,HZ_ADR MOV DX, IO_ADDRESS OUT DX, AL CALL CMD_SETUP

;设定DDRAM地址命令 MOV AX,[BX] PUSH AX MOV AL,AH

;先送汉字编码高位 MOV DX,IO_ADDRESS OUT DX,AL CALL DATA_SETUP

;输出汉字编码高字节

CALL DELAY

;延迟

POP AX

MOV DX,IO_ADDRESS

OUT DX, AL

CALL DATA_SETUP

;输出汉字编码低字节

CALL DELAY

INC BX

INC BX

;修改显示内码缓冲区指针

INC BYTE PTR HZ_ADR

;修改LCD显示端口地址

POP CX

DEC CL

JNZ CONTINUE

RET LCD_DISP

ENDP CMD_SETUP

PROC

MOV DX,IO_ADDRESS

制端口

ADD DX,2

NOP

MOV AL,00000000B

(LCD I端=0,W端=0)

OUT DX, AL

CALL DELAY

NOP

MOV AL,00000100B

=1)

OUT DX, AL

NOP

CALL DELAY

MOV AL, 00000000B

0)

OUT DX, AL

CALL DELAY

RET CMD_SETUP

ENDP DATA_SETUP

PROC

MOV DX,IO_ADDRESS

ADD DX,2

MOV AL,00000001B

(LCD I端=1)

OUT DX, AL

NOP

CALL DELAY

;指向8255端口控

;PC1置0,PC0置0

;PC2置1(LCD E端

;PC2置0,(LCD E端置

;指向8255控制端

;PC1置0,PC0=1

MOV AL,00000101B

;PC2置1(LCD E端=1)

OUT DX, AL

NOP

CALL DELAY

MOV AL, 00000001B

;PC2置0,(LCD E端=0)

OUT DX, AL

NOP

CALL DELAY

RET DATA_SETUP

ENDP DELAY

PROC

PUSH CX

PUSH DX

MOV CX, 0FFFH X1:

LOOP

X1

POP DX

POP CX

RET DELAY

ENDP

CODE ENDS

END START

四、程序结果

我们利用8254、8255、ST7920显示屏、直流电机等制作出了一个出租车计价器有专用键可以表示是否空车,同时利用直流电机模拟车轮运动,通过路程计算价格,成果如下图所示:

图4-1程序结果图

五、分析与测试

程序中,我遇到的最大的难题就是如何完成正确的十进制计算,因为所有的计算指令都是十六进制的,虽然有的计算里有类似AAA这样的调整指令,但是很多时候就不一定记得起来加上。同时由于需要根据数字来查表对应相应的字符码,而且我是建立一个从零到九的数组,而由于计算错误导致经常出现乱码,而且比较难找到相应的错误。而且有些计算没有十进制转换指令,需要自己编写。

同时我认为我利用提前存储变量来表示走过的路程比利用堆栈要好,因为堆栈容易记混,而变量有独特的名字,利于记忆与调用。而且易于清零、增减。

六、心得体会

这次课程设计中,令我印象最为深刻的就是我们应该有一种坚持的精神,有时候几个小时都没有成果,找不到BUG。显示的就是有问题,这时候我们应该有一种坚持下去的毅力,积极询问老师同学,问题的解决就很快了。

同时我发现编程习惯非常重要,应该有一个提前的规划,不能想到哪写到哪,这样的话,后期的DEBUG会非常麻烦,因为自己也看不懂自己的代码,我们都应该有规范化的代码意识,这样的编程能力才能上升。

参考文献

[1]周荷琴,吴秀清,《微型计算机原理与接口技术》,合肥:中国科学技术大学出版社 2008。[2] 曹国清,《数字电路与逻辑设计》,徐州:中国矿业大学出版社 2003。[3] 8255芯片原理:http://baike.baidu.com/link?url=KHojvZzBGmo26_6iYGTdrdqH6PxQbM1Hnnc8hWQNPIp60L7TWG5LZu_ppSkXo5maU5M4APs4qCGSudiqZ0bdl_ [4]ST7920芯片原理:http://wenku.baidu.com/view/0dafd9232f60ddccda38a0fa.html访问时间2013/10/15 [5]ST7920中文字码表:http://wenku.baidu.com/view/d4abe628647d27284b735127.html访问时间:2013/10/15

第五篇:出租车计价器毕业论文附录

北京信息科技大学

毕业设计(论文)附录

题 目:

学 院: 专 业:

学生姓名: 班级/学号 指导老师/督导老师:

起止时间:2012 年 月 日 至 2012 年 月 日

目录

附件1 原理图············································共 1 页

附件2 PCB图 ··········································· 共 1页

附件3 程序代码 ········································· 共 19 页

附件4 外文资料翻译 ····································· 共 11 页

原理图

PCB图

程序代码

#include #define uchar unsigned char #define uint unsigned int

uchar table2[]=“0123456789abcdef”;

sbit lcdwr=P2^6;sbit lcdrs=P2^5;sbit lcden=P2^7;sbit beep=P2^4;sbit sclk=P3^7;sbit io=P3^6;sbit rst=P3^5;sbit scl=P3^0;sbit sda=P3^1;

uchar model;//模式标志位

uchar yue,ri,xq,shi,fen,miao;//月,日,星期,时,分,秒 uchar qibu=50,danjia=5;uint zongjia,lucheng,zzongjia,zlucheng;uchar xiugai;//修改时间和起步价单价标志 uint zj;uint zlc;uchar zu;//组数 uint count;//定时器中的数

uint waitmiao,waitfen;//等待时间 uint count1,count2;//外部中断中的数 uchar xsfen,xsmiao;//行驶时间 uchar wait;//等待标志 uint speed;//速度标志

uchar cycount;//速度采样值

void delayms(uint x){ uint i,j;for(i=x;i>0;i--)

for(j=110;j>0;j--);} void delay(){;;} /****************************** 1602液晶部分

******************************/ void yjwrite_com(uchar com){ lcdrs=0;P0=com;delayms(5);lcden=1;delayms(5);lcden=0;} void yjwrite_date(uchar date){ lcdrs=1;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;} void yjinit(){ lcdwr=0;lcden=0;yjwrite_com(0x38);

yjwrite_com(0x0c);yjwrite_com(0x06);yjwrite_com(0x01);//显示清0,指针清0 } /*************************************************************************************** DS1302时间部分

***************************************************************************************/ void write_byte(uchar com,uchar date)//向DS1302模地址写数据 { uchar i;rst=0;sclk=0;rst=1;for(i=0;i<8;i++){

if(com&0x01)io=1;

else io=0;

com>>=1;

sclk=0;

delayms(1);

sclk=1;} sclk=0;for(i=0;i<8;i++){

if(date&0x01)io=1;

else io=0;

date>>=1;

sclk=0;

delayms(1);

sclk=1;} sclk=0;rst=0;} uchar read_byte(uchar com){ uchar i,date;rst=0;sclk=0;rst=1;for(i=0;i<8;i++){

if(com&0x01)io=1;else io=0;

com>>=1;

sclk=0;

delayms(1);

sclk=1;} for(i=0;i<8;i++){

if(io)date|=0x80;

date>>=1;

sclk=1;

delayms(1);

sclk=0;} sclk=0;rst=0;return date;} void ds1302init(){ sclk=0;rst=0;write_byte(0x8e,0);//写保护寄存器,最高位WP=1,写保护,WP=0,不写保护 // write_byte(0x90,0);//充电控制寄存器(此处为不充电)

write_byte(0x90,0xa5);//充电控制寄存器,设置为充电状态 } /*void reset_1302(){ write_byte(0x8e,0);write_byte(0x80,0);//秒

write_byte(0x82,0x43);//分

write_byte(0x84,0x13);//时

write_byte(0x86,0x14);//日

write_byte(0x88,0x10);//月

write_byte(0x8a,0x05);//星期

write_byte(0x8c,0x11);//年

write_byte(0x8e,0x80);//写保护

} */

/****************************************************************************** AT24C02存储与读取部分

******************************************************************************/ void start1(){ sda=1;delay();scl=1;delay();sda=0;delay();} void stop1(){ sda=0;delay();scl=1;delay();sda=1;delay();} void respons(){ uchar i;scl=1;delay();while((sda==1)&(i<250))i++;scl=0;delay();} void init(){ sda=1;delay();scl=1;delay();} void write_byte1(uchar date){ uchar i,temp;temp=date;for(i=0;i<8;i++){

temp=temp<<1;

scl=0;

delay();

sda=CY;

delay();

scl=1;

delay();} scl=0;delay();sda=1;delay();} uint read_byte1(){ uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){

scl=1;

delay();

k=(k<<1)|sda;

scl=0;

delay();} return k;} void write_add(uchar address,uint date){ start1();write_byte1(0xa0);respons();write_byte1(address);respons();write_byte1(date);respons();stop1();} uint read_add(uchar address){ uchar date;start1();write_byte1(0xa0);respons();write_byte1(address);respons();start1();write_byte1(0xa1);respons();date=read_byte1();stop1();return date;} /***************************************************************************************** 键盘检测

*****************************************************************************************/ uchar key_scan(){ uchar k=0,temp;static uchar key_up=1;P1=0xff;temp=P1;if(temp!=0xff&&key_up){

delayms(10);

key_up=0;

temp=P1;

if(temp!=0xff)

{

temp=P1;

switch(temp)

{

case 0xfe:k=1;break;

case 0xfd:k=2;break;

case 0xfb:k=3;break;

case 0xf7:k=4;break;

case 0xef:k=5;break;

case 0xdf:k=6;break;

case 0xbf:k=7;break;

case 0x7f:k=8;break;

}

} } temp=P1;if(temp==0xff){

key_up=1;} return k;} void display_time();/**************************************************************************************** 时间起步价和单价调整部分

****************************************************************************************/ void tiaoshi(){ uchar i;uchar t=0,n=1;write_byte(0x8e,0);//写保护寄存器,最高位WP=1,写保护,WP=0,不写保护

yue=read_byte(0x89);ri=read_byte(0x87);xq=read_byte(0x8b);shi=read_byte(0x85);fen=read_byte(0x83);miao=read_byte(0x81);yue=(yue/16)*10+yue%16;ri=(ri/16)*10+ri%16;xq=(xq/16)*10+xq%16;shi=(shi/16)*10+shi%16;fen=(fen/16)*10+fen%16;miao=(miao/16)*10+miao%16;t=key_scan();if(t==6){ n++;if(n==10){

n=0;

xiugai=0;} } if(t==8){n=0;xiugai=0;} while(n){ t=key_scan();if(t==8){n=0;xiugai=0;} if(t==6){

n++;

if(n==10)

{

n=0;

xiugai=0;

goto a;

}

} switch(n){

case 1:

yjwrite_com(0x80);yjwrite_com(0x0f);delayms(5);

switch(t)

{

case 2:

yue++;

if(yue==13)yue=1;

write_byte(0x88,((yue/10)*16+yue%10));//

break;

case 3:

;

;

yue--;

if(yue==-1)yue=12;

write_byte(0x88,((yue/10)*16+yue%10));

break;

}

yjwrite_com(0x80);yjwrite_date(table2[yue/10]);yjwrite_date(table2[yue%10])

break;

case 2:

yjwrite_com(0x80+3);yjwrite_com(0x0f);delayms(5);

switch(t)

{

case 2:

ri++;

if(ri==32)ri=0;

write_byte(0x86,((ri/10)*16+ri%10));//日

break;

case 3:

ri--;

if(ri==-1)ri=31;

write_byte(0x86,((ri/10)*16+ri%10));

break;

}

yjwrite_com(0x80+3);yjwrite_date(table2[ri/10]);yjwrite_date(table2[ri%10])

break;case 3: yjwrite_com(0x80+6);yjwrite_com(0x0f);delayms(5);switch(t){

case 2:

xq++;

if(xq==8)xq=1;

write_byte(0x8a,((xq/10)*16+xq%10));//星期

break;

case 3:

xq--;

if(xq==-1)xq=7;

write_byte(0x84,((xq/10)*16+xq%10));

break;} yjwrite_com(0x80+5);yjwrite_date('-');yjwrite_date(table2[xq%10]);

break;

case 4:

yjwrite_com(0x80+0x40);yjwrite_com(0x0f);delayms(5);

switch(t)

{

case 2:

shi++;

if(shi==24)shi=0;

write_byte(0x84,((shi/10)*16+shi%10));

break;

case 3:

shi--;

if(shi==-1)shi=23;

write_byte(0x84,((shi/10)*16+shi%10));

break;

}

yjwrite_com(0x80+0x40);yjwrite_date(table2[shi/10]);yjwrite_date(table2[shi%10]);

break;

case 5:

yjwrite_com(0x80+0x43);yjwrite_com(0x0f);delayms(5);

switch(t)

{

case 2:

fen++;

if(fen==60)fen=0;

write_byte(0x82,((fen/10)*16+fen%10));//分

break;

case 3:

fen--;

if(fen==-1)fen=59;

write_byte(0x82,((fen/10)*16+fen%10));//分

break;

}

yjwrite_com(0x80+0x40+3);yjwrite_date(table2[fen/10]);yjwrite_date(table2[fen%10]);

break;

case 6:

yjwrite_com(0x80+0x46);yjwrite_com(0x0f);delayms(5);

switch(t)

{

case 2:

miao=0;

write_byte(0x80,((miao/10)*16+miao%10));//秒

break;

case 3:

miao=0;

write_byte(0x80,((miao/10)*16+miao%10));//秒

break;

}

yjwrite_com(0x80+0x40+6);yjwrite_date(table2[miao/10]);yjwrite_date(table2[miao%10]);

break;

case 7: //起步价调整

yjwrite_com(0x80+11);yjwrite_com(0x0f);

qibu=read_add(2);

switch(t)

{

case 2:qibu++;write_add(2,qibu);break;

case 3:qibu--;write_add(2,qibu);if(qibu==-1)qibu=0;break;

}

yjwrite_com(0x80+11);

//显示起步价

yjwrite_date(table2[qibu/100]);

yjwrite_date(table2[qibu%100/10]);

yjwrite_date('.');

yjwrite_date(table2[qibu%10]);

break;

case 8: //单价调整

yjwrite_com(0x80+0x40+11);yjwrite_com(0x0f);

danjia=read_add(0);

t=key_scan();

switch(t)

{

case 2:danjia++;write_add(0,danjia);break;

case 3:danjia--;write_add(0,danjia);if(danjia==-1)danjia=0;break;

}

yjwrite_com(0x80+0x40+11);

//显示单价

yjwrite_date(table2[danjia/100]);

yjwrite_date(table2[danjia%100/10]);

yjwrite_date('.');

yjwrite_date(table2[danjia%10]);

break;

case 9:zu=0;yjwrite_com(0x01);write_add(250,zu);

yjwrite_com(0x80);

yjwrite_date('C');yjwrite_date('l');yjwrite_date('e');yjwrite_date('a');

yjwrite_date('r');yjwrite_date('.');yjwrite_date('.');

for(i=3;i<247;i++)

{

write_add(i,0);

delayms(5);

}

yjwrite_com(0x80+0x40);yjwrite_date('O');yjwrite_date('K');

break;

} // display_time();} a: xiugai=0;write_byte(0x8e,0x80);//ds1302写保护

yjwrite_com(0x0c);//1602液晶取消光标闪烁 } /*********************************************** 按键处理函数

***********************************************/ void key_do(){ uchar num1,num2;uchar key=0;key=key_scan();switch(key){

case 1:model++;if(model==3)model=0;break;

case 4:

//启动按键

TR0=1;

EX0=1;

count=0;count1=0;lucheng=0;zongjia=0,count2=0;

waitmiao=0;

waitfen=0;

xsfen=0;

xsmiao=0;

break;

case 5:

//停止按键

TR0=0;

EX0=0;

num1=lucheng/256;

write_add((7+zu*2),num1);

num2=lucheng%256;

delayms(5);

write_add((8+zu*2),num2);

num1=zongjia/256;

delayms(5);

write_add((127+zu*2),num1);

num2=zongjia%256;

delayms(5);

write_add((128+zu*2),num2);

delayms(5);

zu++;

if(zu==60)zu=0;

write_add(250,zu);

zzongjia=zzongjia+zongjia;

num1=zzongjia/256;

write_add(5,num1);

delayms(5);

num2=zzongjia%256;

write_add(6,num2);

delayms(5);

zlucheng=zlucheng+lucheng;//计算出累计的总路程

num1=zlucheng/256;//当总路程超过255时,一个字节就存储不下了,需要分成两个字节存储

write_add(3,num1);

num2=zlucheng%256;//分离出总路程的低位字节

delayms(7);

write_add(4,num2);//存储总路程的低位字节

break;

case 6:xiugai=!xiugai;break;

case 7:

wait=!wait;

if(wait==1)EX0=0;

else EX0=1;

break;

case 8:model=0;xiugai=0;break;} } void chaxun(){ static uchar n=0;uchar key=0,num,num1,a=0;num=read_add(3);//读取总路程的高位

num1=read_add(4);//读取总路程的高位

zlucheng=num*256+num1;num=read_add(5);//读取总总价的高位 num1=read_add(6);//读取总总价的高位 zzongjia=num*256+num1;yjwrite_com(0x80);yjwrite_date(table2[qibu/100]);//显示起步价 yjwrite_date(table2[qibu%100/10]);yjwrite_date('.');yjwrite_date(table2[qibu%10]);yjwrite_com(0x80+8);

//显示单价 yjwrite_date(table2[danjia/100]);yjwrite_date(table2[danjia%100/10]);yjwrite_date('.');yjwrite_date(table2[danjia%10]);yjwrite_com(0x80+0x40);yjwrite_date(table2[zlucheng/1000]);//显示总路程 yjwrite_date(table2[zlucheng%1000/100]);yjwrite_date(table2[zlucheng%1000%100/10]);yjwrite_date('.');yjwrite_date(table2[zlucheng%10]);yjwrite_date('k');yjwrite_date('m');yjwrite_com(0x80+0x40+8);

//显示总总价 yjwrite_date(0x5c);//显示人民币的符号 yjwrite_date(table2[zzongjia/1000]);yjwrite_date(table2[zzongjia%1000/100]);yjwrite_date(table2[zzongjia%1000%100/10]);yjwrite_date('.');yjwrite_date(table2[zzongjia%10]);

key=key_scan();switch(key){ case 1:a=0;model=0;break;case 2:a=1;n++;if(n==60)n=0;break;case 3:a=1;n--;if(n==-1)n=59;break;case 8:a=0;model=0;break;} while(a){ key=key_scan();switch(key){

case 1:a=0;model++;break;

case 2:n++;if(n==60)n=0;break;

case 3:n--;if(n==-1)n=59;break;

case 8:a=0;break;

}

if(key==2||key==3)

{

yjwrite_com(0x01);

num=read_add(7+2*n);//读取总路程的高位

num1=read_add(8+2*n);//读取总路程的高位

zlc=num*256+num1;

num=read_add(127+2*n);//读取总总价的高位

num1=read_add(128+2*n);//读取总总价的高位

zj=num*256+num1;

yjwrite_com(0x80);

//显示组数

yjwrite_date(table2[(n+1)/10]);

yjwrite_date(table2[(n+1)%10]);

yjwrite_com(0x80+0x40);

//显示路程

yjwrite_date(table2[zlc/100]);

yjwrite_date(table2[zlc%100/10]);

yjwrite_date('.');

yjwrite_date(table2[zlc%10]);

yjwrite_date('k');

yjwrite_date('m');

yjwrite_com(0x80+0x40+8);

//显示总价

yjwrite_date(0x5c);

yjwrite_date(table2[zj/100]);

yjwrite_date(table2[zj%100/10]);

yjwrite_date('.');

yjwrite_date(table2[zj%10]);

} } } void display_time(){ uchar i;uchar time[11];yue=read_byte(0x89);ri=read_byte(0x87);xq=read_byte(0x8b);shi=read_byte(0x85);fen=read_byte(0x83);miao=read_byte(0x81);time[0]=yue/16;//提取月的第一位数据,读出来的时间是16进制的,所以对16取模

time[1]=yue%16;//提取月的第二位数据 time[2]=ri/16;time[3]=ri%16;time[4]=xq%16;time[5]=shi/16;time[6]=shi%16;time[7]=fen/16;time[8]=fen%16;time[9]=miao/16;time[10]=miao%16;yjwrite_com(0x80);for(i=0;i<2;i++){ yjwrite_date(table2[time[i]]);} yjwrite_date('-');for(i=2;i<4;i++){ yjwrite_date(table2[time[i]]);} yjwrite_date('-');yjwrite_date(table2[time[4]]);yjwrite_com(0x80+11);

//显示起步价 yjwrite_date(table2[qibu/100]);yjwrite_date(table2[qibu%100/10]);yjwrite_date('.');yjwrite_date(table2[qibu%10]);yjwrite_com(0x80+0x40+11);

//显示单价 yjwrite_date(table2[danjia/100]);yjwrite_date(table2[danjia%100/10]);yjwrite_date('.');yjwrite_date(table2[danjia%10]);yjwrite_com(0x80+0x40);for(i=5;i<7;i++){ yjwrite_date(table2[time[i]]);} yjwrite_date(':');for(i=7;i<9;i++){ yjwrite_date(table2[time[i]]);} yjwrite_date(':');for(i=9;i<11;i++){

yjwrite_date(table2[time[i]]);}

} void main(){ uchar fristtime=0,fristtime1=0,fristtime2=0;ds1302init();//ds1302初始化

init();//24c02初始化

yjinit();//1602液晶初始化 // reset_1302();danjia=read_add(0);qibu=read_add(2);TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;IT0=1;zu=read_add(250);PT0=1;while(1){

key_do();

switch(model)

{

case 0:

fristtime1=0;

fristtime2=0;

if(fristtime==0)

{

yjwrite_com(0x01);

fristtime=1;

}

if(lucheng>30)

zongjia=(qibu*10+(danjia*(lucheng-30)))/10;

else

zongjia=qibu;

yjwrite_com(0x80);

//显示行驶时间

yjwrite_date(table2[xsfen/10]);

yjwrite_date(table2[xsfen%10]);

yjwrite_date('-');

yjwrite_date(table2[xsmiao/10]);

//

yjwrite_date(table2[xsmiao%10]);yjwrite_date(' ');yjwrite_date(table2[waitfen/10]);//显示等待时间

yjwrite_date(table2[waitfen%10]);yjwrite_date('-');yjwrite_date(table2[waitmiao/10]);yjwrite_date(table2[waitmiao%10]);yjwrite_date(' ');yjwrite_date(table2[speed/100]);//显示速度

yjwrite_date(table2[speed%100/10]);yjwrite_date('.');yjwrite_date(table2[speed%10]);if(speed>650)beep=0;else beep=1;yjwrite_com(0x80+0x40);

//显示路程的yjwrite_date(table2[lucheng/100]);yjwrite_date(table2[lucheng%100/10]);yjwrite_date('.');yjwrite_date(table2[lucheng%10]);yjwrite_date('k');yjwrite_date('m');yjwrite_date(' ');yjwrite_date(table2[(zu+1)/10]);//显示当前组数

yjwrite_date(table2[(zu+1)%10]);yjwrite_date(' ');yjwrite_com(0x80+0x40+10);

//显示总价

yjwrite_date(0x5c);yjwrite_date(table2[zongjia/1000]);yjwrite_date(table2[zongjia%1000/100]);yjwrite_date(table2[zongjia%1000%100/10]);yjwrite_date('.');yjwrite_date(table2[zongjia%10]);break;case 1: fristtime=0;fristtime2=0;if(fristtime1==0){

yjwrite_com(0x01);

fristtime1=1;} display_time();if(xiugai==1){

tiaoshi();

}

break;

case 2:

fristtime=0;

fristtime1=0;

if(fristtime2==0){yjwrite_com(0x01);fristtime2=1;}

chaxun();

break;

}

}

} void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;count1++;if(count1==20){

speed=cycount*9;

cycount=0;

count1=0;

xsmiao++;

if(wait==1)

{

waitmiao++;

if(waitmiao==60){waitmiao=0;waitfen++;}

}

if(xsmiao==60)

{

xsmiao=0;

xsfen++;

}

} } void ex0()interrupt 0 { count++;cycount++;if(count==12){

} count=0;count2++;} lucheng=count2*1;

外文资料翻译

ABSTRACT In this paper, a multi-channel taximeter that is able to deal with more than one passenger simultaneously is proposed.In order to demonstrate the theory of operation of the proposed system, a complete design for an experimental three-channel taximeter(whose prototype has been built under grant from the Egyptian Academy for Scientific and Technological Research)is presented.System location, outline, block diagrams as well as detailed circuit diagrams for the experimental taximeter are also included.1.INTRODUCTION Transporting people in the morning from their homes to their works and back in the afternoon has become a big problem in big cities especially in undeveloped countries.As a partial solution of this problem, the authorities in some countries had, unofficially, left the taxicab drivers to carry different passengers to different places at the Same time.For example, a taxicab with four seats may carry four different passengers without any relation between them except that their way of travelling is the same.Accordingly, it has become very difficult to rely on the present conventional single-channel taximeter to determine the fare required from each passenger separately.Accordingly, an unfair financial relation was created between the taxicab driver, owner, passengers and the state taxation department.Under these circumstances, taxicab drivers force the passengers to pay more than what they should pay.In some cases passengers had to pay double fare they should pay.With the present conventional single-channel taximeter, taxicab owners are not able to determine the daily income of their taxicab.In some cases(a taxicab with four seats)they may only get one quarter of the income of the taxicab(collected by the taxicab driver).From which they should pay the salary of the taxicab driver as well as the cost of fuel, minor and major repairs in addition to the car depreciation.As a matter of fact the position of the taxicab owners is not so bad as it seems.A general agreement has been reached between the taxicab drivers and owners such that the drivers should guarantee a fixed daily income to the owners as well as the paying for the cost of fuel as well as the minor repaires.Even though the taxicab drivers still share the large portion ofthe income of the taxicab.Also with the presence of the single-channel taximeter, it has become very difficult for the state taxation department to know the yearly income of the taxicab and accordingly it has become very difficult to estimate the taxes to be paid by the taxicab owners.In order to face this problem, the state taxation department had to impose a fixed estimated taxes for each seat of the taxicab whatever the income of the taxicab.In this paper, we introduced a multichannel taximeter that can deal with more than one passenger simultaneously.I t should be pointed out that by the term passenger we mean a one person or a group of related persons.I t should also be pointed out that our proposed multi-channel taximeter is not, simply, a multi display readouts.As a matter of fact it contains logic circuits that automatically changes the fare per killometer of travelling distance or per minutes of 'waiting time according to the number of passengers hiring the taxicab.In the following part and as an example, we will present a complete design for a three-channel taximeter.Block diagrams as well as detailed circuit diagrams of the experimental three-channel taximeter are also included.A prototype has been built under grant from the Egyptian Academy for Scientific and Technological Research.2.AN EXPERIMENTAL THREECHANNEL TAXIMETER Theory of operation of our experimental device to work as an electronic digital taximeter is based on t h e fact thathe speedometer cable rotates one revolution for each meter of travelling distance.Accordingly, if the speedometer cable is coupled with a speed sensor that generates a single pulse for each meter of travelling distance, then our taximeter could be three up counter modules associated with a speed sensor unit.However, our experimental taximeter is not simply a three display readouts.As a matter offact it contains logic circuits that automatically changes the fare per kilometer of travelling distance or per minutes of waiting time according to the number of passengers hiring the taxicab.The device may be splitted into two main parts: The first is the speed sensor unit which may be located anywhere in the taxicab such that an easy coupling to the speedometer cable can be achieved.The second unit contains the main electronic circuit, the displayand control panel.The unit should be located somewhere in front of both the driver and the passengers.A possible components locations is shown in Figure 1.A.Speed Sensor Unit The main function of this unit is to supply train of pulses whose frequency is proportional to the angular rotation of the wheels.A possible form of a speed sensor is shown in Figure 2.If may consist of a tj.pica1 permanent magnet sine wave generator with its output connected to a pulse shapping circuit(two general purpose silicon diodes, 1K ohms resistor and a schmit trigger inverter).In order to find some way to detect the movement of the taxicab, the output of the sine wave generator is rectified through a general purpose silicon diode Dl then smoothed by a 1000 F capacitor.The output voltage at terminal Q is then limited to the value of 4.7 volts by using a Ik ohms resistor as well as a zener diode ZD.The level of the voltage at terminal Q would be high whenever the taxicab is moving and will be zero otherwise.This voltage can be used for the automatic switching from distance fare to time fare.B.Main Electronic and Display Unit A suggested shape for the main electronic and display unit is shown in Figure 3.The control and display panel contains all ' controls necessary for operating the taximeter as well as four readout displays.The first channel will give the sum of money required from the first passenger, while the second and third readouts are for the second and third passengers, respectively.The fourth readout will give the total income of the taxicab.The contents of the last readout should be nonvolatile and be able to be retained even during parking the taxicab.The channel rotary selector switchs 1 , 2 and 3 have fully clockwise/anticlockwise positions.In the fully anticlockwise position, the counter of the corresponding readout is blancked and disabled.In the fully clockwise position, the counter is unblanked, cleared to zero and enabled to be ready for counting the sum of money required from the first, second and third passengers, respectively.Pushing the total sum pushbutton 4 unblanks the fourth readout enabling any person to retain the readout corresponding to the total income.After the release of the pushbutton, the fourth readout will be blanked again.This unit also contains the main electronic circuit which will be fully described in the following section.3.DESCRIBTION OF THE MAIN ELECTRONIC CIRCUIT The general block diagram of the main electronic circuit is shown in Figure 4.It consists of five subcircuits designated by the symboles CTI up to CT4supporting circuits, these are: The number of passenger deticition circuit CTI, travelling distance scaling circuit CT2, waiting time scaling circuit CT3, circuit CT4 which generates clock pulses for the display circuit.A.Number of Passengers Detection Circuit CT1 As shown from the general block diagram, the circuit CTI has three inputs I, 2 and 3 as well as three outputs J, K and L.The function of the circuit is to supply a high level voltage at terminals J, K or L if and only if one, two or three passengers are hiring the taxicab, respectively.The term passenger, here, means one person or a group of related persons.When a passenger is getting into the cab, we simply turn on a free readout display by turning the corresponding rotary selector switch to a fully clockwise direction.This will automatically disconnect the corresponding terminal I, 2 or 3 from ground.The logical relation between various input terminals I, 2 and 3 and the output terminals J, K and L is shown in Table 1.As a combinational circuit we start the design by deriving a set of boolean functions.A possible simplified boolean functions that gives minimum number of inputs to gates may be obtained from Table I.A possible logical diagram that is based on the above derived expressions is shown in Figure 5.It consists of two inverters, four 2-input AND, to3-input AND two 3-input OR gates B.Tavelling Distance Scaling Circuit CT2 As shown from the block diagram of Figure 4, the circuit CT2 has four input J, K, L and E and one output M.The function of the circuit is to supply a single pulse at the output M for a certain number of pulses generated at the output of the speed sensor(certain number of meters travelled by the taxicab), according to the number of passengers hiring the car.A suggested fare per kilometer of travelling distance is shown in colomn two of Table 2.the circuit, in this case, should supply a single pulse at the output M for every 100, 125 or 143 pulses generated at the input terminal E according to the level of voltage at input terminale 3, K or L, respectively.Our circuit could be, as shown in Figure 5, three decade counters, connected as a three digit frequency divider whose dividing ratios 100, 125 and 143 are automatically selected by the voltage level at terminals J, K and L, respectively.A possible circuit diagram that may verify the above function is shown in Figure 6.It consists of three decade counters type 7490, one BCD-to decimal decoder type 7445, three 4-input AND, one 3-input ANDone 2-input AND two 3-input OR gates.C.Time Scaling Circuit CT3 As shown in the block diagram, the time scalingcircuit will have four inputs J, K, L and F and one output N.The function of this circuit and accordingto colomn three of Table 2(fare per 2 minuts of waiting time)is to supply a single pulse at the output N for every 120, 240 or 360 pulses supplied at the input terminal F from the I Hz clock according to level of voltage at inputs J, K and L, respectively.Time scaling circuit would be similar to the distance scaling circuit but with different diving ratios.A Possible circuit diagram is shown in figure 7.It consists, in this case, of three decade counter type 7490, two 3-input AND, one 5-input AND, one 2-input AND one 3-input OR gates.D.Circuit CT4 Which Generates Clock Pulses for Display Circuit The function of this circuit is to supply one, two or three pulses at the output terminal R for each pulse generated at any of the terminals N or M, according to the voltage level at the input terminals J, K or L, respectively.The output P will receive a pulse for each pulse generated at any of the input terminals N or M.This function can be performed by the circuit shown in Figure 8, it consists of one ripple counter type 7493, one half of a dual JK masterslave flip-flops circuit type 7476, three inverters, three 2-input AND, one 3-input AND, one 2-input OR and one 3-input OR gates.When a pulse is generated at either input terminals N or M, a high level voltage will be generated at the output Q of the flip-flop.This will g a t e t h e I Khz signal to be connected to the input A of the ripple counter as well as to the output terminal R.When one, two or three pulses are counted by the ripple counter, according to the level of voltage at the input terminals J, K and L, respectively, a high is generated to reset the counter and change the state of the flip-flopsuch that Q becomes low.Hence, the 1 KHz signal is disabled to reach the outputerminal R or the input A of the ripple counter.In order to ensure the proper function of the circuit, the flip-flop should be cleared whenever a new channel is operated.This has been achieved by the input 5 and will be explained later when describing the function of the channels rotary selector switchs.E.Display Circuit As shown in Figure 2, the display panel would contain three 4-digit displays that give the sum of money required from each passenger separately as well as a one six-digit display that gives the total income of the taxicab.A possible wiring diagram for the display circuit is shown in Figure 9.Rotating any of the rotary selector switches to fully clockwise direction will supply the corresponding display by5 volts through terminals 1, 2 and 3, respectively.The corresponding display will be unblanked by supplying a low level of voltage through terminals A, C and G, respectively.Keeping terminals 8, D and H, respectively, at low level will keep them reset to zero.The corresponding display is then enabled by removing the low voltage from terminals B, D, and H, respectively, to be ready for counting the sum of money required from the corresponding passenger starting from zero.The counting pulses for these three displays are supplied through terminal P.The total sum display will be enabled whenever any of the three displays is enabled(this is done by a 3-input OR gate as shown in Figure 8).Retaining the contents of the last display will be done by unblanking it by supplying a low level of voltage to terminal I as shown in Figure 10 b.F.Changing Over Between Time and Distance Fares In the following part, two different methods for changing over between time andistance fares are suggested: The first is to switch to time fare whenever the distance fare is less than the time fare.Hence, a simple look to fares table(Table 2)can show that time fare should be used whenever the taxicab moves with speed less than 50 m/min.A possible circuit that can perform this switching action is shown in Figure IO c.It contains one rpm limit switch and a one inverter as well as two 2-input AND gates.The contacts of the limit switch are normally closed and will be opened whenever the angular speed of the speedometer cablexceeds 50 rmp.The second alternation is to connect the input of the inverter in Figure 10 c.to the output terminal Q of the speedometer circuit, Figure 2.In this case, the switching into time fare will be done whenever the taxicab is at stand still.G.Function of the Rotary Selector Switches The voltage levels that should be supplied by the terminals of the rotary selector switches in order to ensure proper operation by the electronic circuit are given in Table 3.Connection of three rotary selector switches each witb four decks of five poles each, that satisfy the logic function of Table 3, is shown in Figure 10 a.Rotating any of the three switches into fully clockwise direction will pass through five positions.The function of the rotary selector switches can be described starting from the first position passing through variousteps until reaching the final position as follows: Initial position: In this position a low voltage level is applied to terminals I, 2 and 3, this will disconnect the 5 volts supply from the three first displays, set the three inputs of the number of passenger detection circuit CTI to low level.A low voltage level is applied to terminals 8, D and H, this is to ensure that the total income display is disabled.Voltage levels at terminals A, C, G and S are at no care condition.Step I: Rotating any of the rotary selector switches one step toward clockwise direction will supply 5 volts to the corresponding display, provides a high level voltage at terminals 1, 2 or 3 indicating that one passenger have entered the taxicab.A high level voltage should be applied to terminals A, C or G in order to ensure that the corresponding display is still blanked.Other terminals B, D, H and S are kept unchanged.Step 2: Rotating the rotary selector switch one step further, will change the state of voltages at terminal A, C or G to be at low level and unblanks the corresponding display.States of voltages at terminals I, 2, 3 and S are remained unchanged.Terminals B, D and H should be remained at low level to ensure that the corresponding readout is cleared to zero while unblanking the display.二、中文翻译

摘要

本文提出了一种出租车多通道计价的方案,能同时处理一个以上乘客的情形。为了从理论上说明本方案,提出了一个实验上的三通道型的士的完整设计(其原型是根据埃及科学和技术研究学院的研究而建成得)。.导言

在不发达的国家,早上把人们从他们家送到工作的地方,然后下午送回来已成为一个大问题,尤其是在大城市。

作为解决这个问题的一个部分,在某些国家出租车用来解决这个问题,送人们从一个地方到另外一个地方。例如,出租车的四个席位可携带四个不同的没有任何关系的乘客,除了他们的路线是相同的。

因此,依靠目前的传统的单车道计价以确定所需的票价,把每个乘客的计费分开,这已成为一个非常困难的问题。因此,在出租车司机,车主,乘客和国家税务部门之间存在着不公平的财政关系。

在这种情况下,出租车司机强迫乘客支付多于他们所应付的。在某些情况下乘客支付了他们应付车费的双倍。

本常规单频道计程车,出租车司机不能够确定出租车日常收入。在某些情况下(出租车的4个席位),他们可能只有出租车四分之一的收入(大部分的出租车司机)。从这些支付工资的出租车司机以及作为燃料费用外,还要维修以及汽车折旧等费用。事实上,出租车业主并非似乎如此糟糕。一项在出租车司机和车主之间的协议已经达成,司机应保证每天固定收入,以及向业主支付燃料以及维修的费用。即使如此,还是有的出租车司机的很大一部分份额之收入的出租车。现在还存在的单声道计价,已经变得非常,国家税务部门也知道这种困难 每年估计出租车业主的收入支出,以及应支付的税务也很困难。

为了应对这一问题,国家税务部已实行固定估计税,每个座位的出租车不论收入。在本文中,我们介绍了多通道的士计程表,可处理超过一名乘客同时进行的情况。我应该指出,我所说的长期旅客指一个人或一组相关的人。我同时也应指出,我们提出的多渠道的计价,不是简单地说,一个多显示读数。作为一个先进的事项,事实上它包含逻辑电路,可以自动计算变化的车费以及每公里行走距离或每分钟的候车时间按照乘客人数雇用出租车。在下面的部分,我举出一个例子,我们将介绍一个完整的三通道计价。框图以及详细的电路图,实验三通道计价功能也包括在内。原型下已建成 埃及赠款科学学院 和技术研究。.实验THREECHANNEL 出租车计价器理论的运作我们的实验装置从事电子数字计价依据。事实上速度电缆旋转1 圈的每米距离行驶。因此,如果车速电缆耦合与速度传感器,产生一个单脉冲每平方米的旅行距离,那么,我们的的士可以三倍于反模块相与速度传感器的单位。然而,我们的实验是计价而不仅仅是只显示三个读数。事实上,它包含逻辑电路,可以根据每公里的行驶距离或每分钟等候时间按照乘客人数雇用出租车来自动改变车费。该装置可能会分成两个主要部分组成:第一是速度传感器,这个传感器可位于任何地方,在出租车内进行这样一个简单的耦合车速电缆是可以实现的。

单位包含了主要的电子电路,显示器以及控制面板。该单位应位于前排的司机和乘客之间。

A. 速度传感器

其主要职能是本单位提供脉冲的培训,这个脉冲的频率会于旋转角度相适合。一种可能的形式一个速度传感器。如果可以包含正弦波发生器的输出连接到脉冲整形电路的永磁器件(2通用芯片二极管,1000欧姆的电阻和施密特触发逆变器)。

为了找到某种方式来检测出租车的运动,正弦波发生器的输出是纠正通过一个通用的硅二极管延胡索乙然后平滑的1000年F电容。那个输出电压在终端Q是当时限于价值4.7伏特用益欧姆的电阻以及一个齐纳二极管ZD。出租车的终端电压在终端Q将高电压降为零。这电压可作为改变出租车从距离计费到时间计费方式的开关电压。

主要的电子和显示单元

一个建议是主要形式的电子和显示单元。控制和显示器面板包含所有'控制所必需的经营的士以及四个可读显示器。第一频道将给出从第一乘客,第二乘客,第三乘客分别应付的费用,第四个会给出总收入给予出租车。最后读出的数据会包括停车的费用等等费用。频道选择器开关1,第2和第3个,按顺时针/逆时针的立场。在充分逆时针的立场,反相应的读出是未标明和残疾人。以顺时针方向则是未定义的,清除为零,对于第一第二第三的乘客分别计费。第四号推进总钮第四次读出,使任何人保留读出相应的总收入。经过释放按钮,第四次读出将再次保留。这个单位还包含主要电子电路将在下一节充分描述。描述的主要电子电路

它由五个部分指定的电脑符号与电话系统整合成为4个支撑电路,它们是:判断乘客数量电路CT1,旅行距离电路CT2,等待时间电路CT3,时钟脉冲显示电路CT4。

乘客人数检测电路CT1如图所示的一般框图,该电路电脑与电话系统整合有三个输出:1,2和3相对应于三个输出J,K和L。

这个循环电路函数包含高电压的终端 J,K或L,如果有1个或者2,3个乘客分别租用出租车。这个组里的任意乘客都是一组相关的人。当一个乘客进入出租车后,我们只是表示这样一种情况,自由读出显示在谈到相应的旋转选择开关,以一个完全顺时针方向。这将自动断开相应的终端1,2或3个从地面。逻辑关系各种输入端子之间第1,第2和第3个输出端J,K和L是列于表1。作为一个组合电路,我们开始设计产生了一系列布尔函数。

一种可能的逻辑图的基础上,它包括两个变频器,4个2输入和3输入以及2个3输入或门。B.行驶距离标量环路CT2,电路CT2有4个输入J,K,L及E和1个输出M,输出功能的电路是供应单脉冲的输出M的某一些脉冲产生的输出的速度传感器(出租车行驶了一定得距离),根据乘客的人数租用的汽车。我们建议票价按每公里行驶距离显示在两个表格2里面。

表2 这个环路,在这种情况下,应提供单脉冲的输出M的每100,125或143脉冲所产生的输入端根据级别的电压输入终端3,K或L。

我们的电路按图5显示,三个十年的计数器,作为一个三位数分频器的分比率100,125和143个自动选定的电压一级终端J,K和L分别。一种可能的线路图可被验证,它包括三个十年的计数器7490,一个声BCD-以杜威解码器输入7445,3个4输入和1个3输入以及1个2输入和2个3输入或门。

时间缩放电路CT3.时间缩放电路含有4个输入端 J,K,L及F和一个输出端N,这个电路的函数根据表格2的意思(车费每2分钟的等待时间)是在J,K和L分别供应单脉冲到输出端N时,提供单脉冲的输出N。时间缩放电路将类似于距离标量环路,但是有不同的行驶比率。它包括3个十进制计数器7490,2个3输入与门和一个5输入与门,1个2输入与门和一个3输入或门。

电路产生时钟脉冲的显示电路CT4 这条电路的作用根据电压电平在输入终端J、K或者L,分别供应1,2或者脉冲在每脉冲的输出终端R引起在任何终端N或M。无论输入端N或者M中的谁发送脉冲,都只有一个脉冲能被输出端P接收。它由一个反向计数器7493构成,其中一半是双JK主从触发器电路,型号为7476,包括三个变频器,三个2输入与门,一个3输入与门,1 2输入或门以及一个3输入或门。当脉冲引起在输入的终端N或M,触发器的输入Q上将产生高级电压。这个门信号将被连接到计数器的输入A并且连接到输出终端R。当第一,第二或第三个脉冲由涟波计数器开始计数,J,K,L端会分别根据电压的大小来使产生重置或者翻转来改变状态,然后Q端变为输出低电压。因此,1 KHz信号没有能力到达输出端R或是计数器的输入端A。为了确保电路的函数准确无误,当切换到新频道时,触发器要清零。对于功能选择开关旋转渠道的描述,稍后会以一个成功的5输入门函数来解释。显示电路

该显示面板将包含三个4位数显示器,这样可以给出每个乘客应付车费的总和,一个六位数显示器可以给出出租车的总收入。以顺时针方向旋转所选择的开关将提供相应的显示,这可以通过5伏电压来分别控制1,第2和3终端。对应的显示通过供应低级电压通过终端A、C和G,分别。保持终端D和H在低级状态下重置为零对应的显示分别通过终端B,D,H而改变低压状态,并准备好从对应的乘客那里计算出相应的计数款额,计数脉冲这三个显示器通过终端提供总额。计数器还将通过终端P为3个显示器提供脉冲只要这三个显示器中任意一个是正常的,那么总额将被显示出来。

时间和距离变化时车费的改变

在下面的部分,两种不同的方法使得时间和距离改变从而导致车费发生变化,有如下建议:首先是当以路程计价的费用低于以时间计费的费用时,采用时间计费。从此,一个简单的票价表显示当出租车移动速度小于50米/分时应该采用时间计费方式。一种可能的电路可以执行此开关行动如图10c,它包含一个转速限位开关和一个反转器以及两个2输入与门。接触的限位开关通常是封闭,只有当角速度超过50RMP的时候才会打开。第二个改变将中断连接到图10C的输入端,输出端Q连接速度的电路。在这种情况下,只要出租车的状态保持静止,那么计费开关就会处于关闭状态。

功能选择旋转开关

功能选择开关旋转的电压应提供的该终端的旋转选择开关,以确保正常运行的电子电路列于表3。每5个杆就有4个板连接着3个旋转选择开关,每个符合逻辑功能表3,旋转任何三个切换到完全顺时针方向将通过5个职位。功能的旋转选择开关可以说是从第一的位置通过直到达到最后的立场如下:

初始位置:在这个位置上的低电压电平适用于第一第二和第三终端,浙江断开来自三个中一个显示器的5伏特电压供应,设置三个显示器,乘客检测电路并与电路系统整合到较低的水平。终端D,H采用低电压,这是为了确保显示的总收入选项已被禁用。

步骤1:以顺时针方向旋转任何旋转选择开关一格将提供5伏特电压到相应的显示,提供一个高等级的电压终端1,2或3,这表明一名乘客已经进入了出租车。终端C,G应为高电平,以确保相应的显示仍然是笼罩。其他端口,如D,H端口保持不变。

步骤2:旋转旋转选择开关1,然后将在终端A,C或G上改变电压使其处于低电压状态,并会产生相应的显示。终端1,2,3以及S上的电压状态保持不变。终端B,D和H应保持在较低水平,以确保当显示为无数据时相应的读出清除为零。

下载出租车计价器设计方案(5篇范例)word格式文档
下载出租车计价器设计方案(5篇范例).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    出租车计价器调试报告

    出租车计价器调试报告 本设计可分为单片机主控模块、键盘、显示器、温度检测、状态指示、时钟日历、语音收录播报、分频器电路、脉冲信号发生器等9部分。仔细分析系统的工作......

    出租车计价器信息(精选5篇)

    霍市质监局集中对全市出租车计价器进行安装检定 切实规范运营行为近期,霍市质监局下属检测中心对全市范围内具有交通主管部门颁发经营许可证的500余辆出租车计价器进行统一......

    出租车计价器课程设计2

    出租车计价器课程设计 目录 前言 1、 系统工作原理 1.1 功能说明 1.2 基本原理 2、 硬件设计 2.1 单片机最小系统单元 2.2 A44E霍尔传感器检测单元 2.3 AT24C01存储单元 2.......

    单片机出租车计价器源程序

    出租车计价器设计与制作 设计并制作一台出租车计价器。调试时采用10Hz方波信号模拟,每个方波代表10m。基本要求: (1)不同情况具有不同的收费标准 白天 1元/公里 晚上 2元/ 公......

    出租车计价器毕业设计外文资料

    ABSTRACT In this paper, a multi-channel taximeter that is able to deal with more than one passenger simultaneously is proposed. In order to demonstrate the theo......

    51单片机 出租车计价器课程设计

    第一章 出租车计价系统的设计要求与设计方案 1.1 出租车计价器设计要求 设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用七段数码管显示总金......

    出租车计价器毕业设计中英文翻译

    ABSTRACT 1. INTRODUCTION Transporting people in the morning from their homes to their works and back in the afternoon has become a big problem in big cities esp......

    单片机课程设计出租车计价器1.

    常州机电职业技术学院 毕业设计(论文 作者:丛佳伟学号:40931111系部:电气工程系 专业:应用电子技术 题目:出租车计价器系统 指导者:徐登黄勇 评阅者: 2012年05月 摘要 现在......