出租车计价器控制系统电路设计

上传人:z**** 文档编号:114651559 上传时间:2022-06-29 格式:DOC 页数:21 大小:691.50KB
返回 下载 相关 举报
出租车计价器控制系统电路设计_第1页
第1页 / 共21页
出租车计价器控制系统电路设计_第2页
第2页 / 共21页
出租车计价器控制系统电路设计_第3页
第3页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
嵌入式系统设计题目:出租车计价器控制系统电路设计学号:姓名: 深蓝新型出租车计价器控制电路的设计第 1 章 绪 论1.1 背景及意义进入 21 世纪的今天,科技高速发展。同样,出租车行业也在发展,出租车已经是城 市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性 能的计价器对出租车司机和乘客来说都是很必要的。我们知道,只要乘坐的出租车启动,随着行驶里程的增加,就会看到司机旁边的计 价器里程数字显示的读数从零逐渐增大,而当行驶到某一值时(如2KM)计费数字显示开 始从起步价(如: 6元)增加。当乘客到站时,按下停止按键,计费数字显示总里程和 总金额,它可以很直观的反映用户使用情况。在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。汽 车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中 最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车 司机朋友还是乘客来说都是很必要的,因此,汽车计价器的研究也是十分有一个应用价 值的。通过本次设计,可以增进对单片机的感性认识,加深对其理论方面的理解,掌握单 片机的内部功能模块的应用,了解掌握单片机的软硬件设计过程、方法及实现。1.2 设计要求 主要的外围功能电路有:驱动电路,按键控制电路,掉电保护电路,时钟部分,数码管显示电路等。通过对以上各功能的设计,制作出的出租车计价器应具有以下功能:1) 上电时显示全为零,通过按下启动按键来开始计价,数码管开始显示起步价和起步金额;2) 按下模拟开关按键来产生一个脉冲信号,模拟行驶的里程;3) 数码管开始显示所走里程和所应付的金额,并逐渐增加;4) 按下停止按键,停止计价,数码管显示所走总里程和用户所需付总金额,按下清 零按键,数码管全显示零,以备下次计价。第 2 章 系统硬件设计2.1 设计方案与硬件说明采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合 可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。 设计采用AT89S51单片机为主控器,以A44E霍尔传感器测距(按键替代),实现对出租 车的基本的计价设计,并采用 AT24C02 实现在系统掉电的时候保存单价等信息,输出采 用 8 段数码显示管。利用单片机丰富的 I/O 端口,及其控制的灵活性,实现基本的计价 功能。系统结构图如下:1.1 系统结构图本电路设计的计价器能实现基本的计价功能,单片机计算总价的公式为:总价=起步 价+单价* (总里程-起步里程)+1。AT89S51作为一个单片微型计算系统,灵活性高,其 强大的控制处理功能和可扩展功能设计电路提供了很好的选择。硬件设计说明单片机是单片微型计算机的简称,单片机以其卓越的性能,得到广泛的应用,已经 深入到各个领域。在这次设计中,我们用到P0 口和P2 口,P0 口为8位三态I/O 口,此口 为地址总线及数据总线分时复用;P2 口为8位准双向口,与地址总线高八位复用;P0 口 和P2 口都有一定的驱动能力,P0 口的驱动能力较强。设计中,为了能够让数码管更好的正常显示,我们采用了驱动电路来驱动。在本次硬 件设计中,我们考虑采用芯片74LS245来驱动数码管显示。设计电路时,考虑到用里程(霍尔)传感器价格昂贵,且不便于试验检测,在设计 中采用一个模拟开关来代替。模拟开关一端接在P3.4 口,另一端接地,通过来回高低电 平的变化,每按两次,对应的里程数加一。通过在程序中设置的里程和金额的信息,在 加上驱动电路的设计,就可以在数码管上分别显示总金额和总里程。在显示方面,可以用液晶显示,也可以用数码管进行显示。由于在这次设计中只需 要显示里程和金额信息,我们采用数码管进行显示。这样既节约了成本,又可以达到显 示的目的。同时为了减少硬件的复杂度,我们采用了动态显示方式,选用了共阴极数码 管。为了焊接方便,我们选用了集成在一起的数码管。我们还设计了控制按键,能够很好的对出租车计价器控制,如启动/停止按键,清零 按键等。AT89S51单片机简介AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes 的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O) 口,5个中断优先级2 层中断嵌套,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路, 片内时钟振荡器。P0 口有二个功能:1、外部扩展存储器时,当做数据/地址总线。2、 不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外 部接上拉电阻。P1 口只做I/O 口使用:其内部有上拉电阻。P2 口有两个功能:1、扩展外部存储器时,当作地址总线使用。2、做一般I/O 口使用,其内部有上拉电阻。P3 口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能, 由特殊寄存器来设置。F1. 0 匚1斗I ccPl. 1 匚 P0. 0 /ADOF1. 2 匚 F0. 1F HU 1P1. 3 匚 P0. 2/02F1- 4 匚 FO. 3/03MOSI/P1. 5 匚 PO. 4/AD斗KI SO / F1.6 匚 FO. 5/05匚K/P1. 7 匚 PO. G/AII&KST匚 FO. 7/AL7KKD y P 3. 0 匚 EA/VPPTXD/F3. 1 匚 ALE/FROtIHT0/P3. 2 匚 PE SITIJTT1 /F3. 3 匚13 F2. r/Al 5T0/F3. 4 匚142F F2.6/A14nyrs. 5 匚15E& F2. 5/A1 5VTE/F3. & 匚I&25 F2 . 4/A12KE/F3. 7 匚1724 F2.即iUlXTAL2 匚1S23 F2. 2/A10HTAL1 匚1 22 F2. L/A9PIiIPCME 匚20 21 F2. 0/A8图2.1 AT89S51引脚图设计中用到的单片机各管脚(图2.1 )功能介绍如下:VCC:接+5V电源。VSS:接地。时钟引脚:XTAL1和XTAL2两端接晶振和30PF的电容,构成时钟电路。它可以使单片机稳定可靠的运行。RST:复位信号输入端,高电平有效。当在此引脚加两个机器周期的高电平时,就可 以完成复位操作。P1.0:接启动/停止按键,控制计价。P1.1:接功能键。P1.3:接清零键。P0 口接数码管段选端,P2 口接驱动芯片。P3.4(T0):接模拟开关按键,替代了出租车计价器中的霍尔传感器。P3.1、P3.0 口接掉电保护电路。2.2硬件系统设计按下计价按键时,显示起步价和起步里程范围,这些在程序中设置;当等于或超过 两公里后,按计算总价的公式为:总价=起步价+单价*(总里程-起步里程)+1进行计价。 本设计中,起步价为4元,起步里程为2公里,当然这些数据可以在程序中改写,以满 足不同时期价格调整的需要。2.3硬件电路组成硬件组成主要包括:驱动电路、显示电路、复位电路、掉电保护电路、时钟电路、 按键电路。驱动电路74LS245是我们常用的芯片,用来驱动led或者其他的设备。总线驱动器74LS244和 74LS245经常用作三态数据缓冲器,74LS244为单向三态数据缓冲器,而74LS245为双向三态数据缓冲器。本设计用74LS245作为驱动芯片,双向总线发送器/接收器(3S)。图2.4驱动芯片管脚图74LS245主要电器特性的典型值如下: 引出端符号:AA总线端BB总线端/G三态允许端(低电平有效)DIR 方向控制端功能表:表2.5功能表Ensblc 召DirerTi onControl IF1OperationLLE data t-o A busLHA data to 吕 busHX1-sola; ion利用74LS245来驱动数码管显示,单片机的P2.0到P2.5分别接A0到A5管脚,进 行数据的传送,其中AB/BA接高电平,控制数据从A到B进行传送,B0到B5分别接数码 管的位选端,驱动数码管依次显示。P2.0到P2.5的数据通过A传送到B中的数据送到数 码管,以达到显示数据信息的目的。显示电路多数的应用系统,都要配输入和输出外设,LED显示器和LCD显示器,虽然LCD显示效 果比较好,已经成为了一种发展趋势,但为了节约成本,我们选用了 LED显示器(图2.6)。在显示方面,我们选用了动态显示。静态显示虽然亮度较高,接口编程容易,但是 每位的段码线分别与一个8位的锁存器输出相连。占用的I/O 口线比较多,在显示位数 较多的情况下,一般都采用动态显示方式。利用动态显示的方法,由于LED显示器的余 辉和人眼的视觉暂留现象,只要每位显示的时间间隔足够短,就仍能感觉到所有的数码 管都在显示。为了简化硬件,通常将所有位的段码线相应段并联在一起,由一个8位I/O 口控制,在同一时刻,只让一位选通,如此循环,就可以使各位显示出将要显示的字符。A图2.6 LED数码管图2.7集成数码管LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一 个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用 时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。 在本设计仿真中使用的是6个一组的共阴8段数码管(图2.7)。找公共共阴和公共共阳的方法:首先我们找个电源|稳压器(3到5伏)和1个1K(几 百欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有 一个LED会发光的,找到一个就够了,然后用GND不动,VCC(串电阻)逐个碰剩下的脚, 如果有多个LED (一般是8个),那它就是共阴的了。共阴极数码管,阴极接地,当某个 发光二极管的阳极为高电平时,发光二极管点亮,对应的段就显示。复位电路单片机的复位是由外部的复位电路实现的,复位电路通常采用上电自动复位和按钮 复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。除了上电复位 外还需要按键手动复位(图2.8)。按键手动复位有电平方式和脉冲方式两种。其中电平 复位是通过RST端经电阻与电源VCC接通而实现的。单片机的复位速度比外围I/O接口 电路快为能够保证系统可靠的复位,在初始化程序中应安排一定的复位延迟时间。图2.8复位电路掉电保护电路掉电保护电路中采用了存储芯片AT24C02。AT24C02 是一个 CMOS 标准的 EEPROM 存储器,是 AT24CXX 系列(AT24C01/02/04/08/16) 成员之一,这些EEPROM存储器的特点是功耗小、成本低、电源范围宽,静态电源电流约 30uA110uA,具有标准的I2C总线接口,是应用广泛的小容量存储器之一。图2.9 AT24C02引脚图上图是AT24C02的引脚图,这个芯片是一个8脚芯片,内部存储器有256字节。 引脚功能介绍如下:A0 (引脚 1):器件地址的A0位,是器件地址的最低位,器件地址排列是A6 A5 A4 A3A2 A1 A0 R/W。A1 (引脚2):器件地址的A1位。A2 (引脚3):器件地址的A2位。GND (引脚4):地线。SDA (引脚5):数据总线引脚。SCL (引脚6):时钟总线引脚。TEST (引脚7):测试引脚。Vcc (引脚8):电源线引脚。U3SCLA0SDAA1A2R3 irik TE: = -本设计采用掉电存储电路图如下:R2 ink - TuTE; -:V:图2.10掉电存储电路时钟电路MCS-51单片机的各功能部件都是以时钟控制信号为基准,内部电路在时钟信号的控 制下,严格地按时序执行指令进行工作,单片机本身如同一个复杂的同步时序电路,为 了保证其各个部分同步工作,电路要在唯一的时钟信号控制下,严格地按照时序进行工 作。其实只需在时钟引脚连接上外围的定时控制元件,就可以构成一个稳定的自激振荡 器。为更好地保证振荡器稳定可靠地工作,谐振器和电容应尽可能安装得与单片机芯片 靠近。本设计中使用的振荡电路,由12MHZ晶体振荡器和两个约30PF的电容组成,在XTAL1 和XTAL2两端跨接晶体,电容的大小不会影响振荡频率的高低。在整个系统中为系统各 个部分提供基准频率,以防因其工作频率不稳定而造成相关设备的工作频率不稳定,晶 振可以在电路中产生振荡电流,发出时钟信号。如图2.11所示。图2.11时钟电路按键电路按键控制电路中,单片机的P1.0管脚接启动/停止按键,通过软件编程,当按下按 键计数器开始工作,开始计价;当弹起按键时,计数器停止工作,停止计价,启动/停止 按键带自锁功能。按下启动按键,开关处于导通状态,这时给P1.0送低电平信号,这时 TR0=1,计数器开始工作,调用计价子程序开始计价。清零按键接单片机的P1.3管脚,按 下清零按键,P1.3为低电平,调用清零子程序,用于将显示数据清零,在程序中给各位 赋0代码(0x3f),以达到清零的目的,方便下次计价。另外为功能键,控制价格调整, 这个按键是在没有按下启动/停止按键时有作用,计价过程中无效。图2.12按键电路第3章系统软件设计3.1软件总体设计51单片机的程序设计语言主要有两种:一是汇编程序设计;二是C语言编程设计。 两种程序设计语言都有各自的优点。用汇编语言编写和高级语言(C语言)比较起来节省空 间,这样对于存储空间仅4Kb的芯片来说是极之有利的,51单片机能更高速的运行。C 语言编写的程序,虽然不象汇编那样速度快、但程序简单易行、并且需要较小的存储空 间。C语言作为一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语 言的功能。此外,C语言程序还具有完善的模块程序结构,从而为软件开发中采用模块化 程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的主 流。本设计就是采用 C 语言编写的,由于采用模块化操作,使得程序在修改,执行的时 候显得方便易行。3.2 系统程序设计本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采 用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。在 main 函数编写开始,要进行初始化,包括对系统初始化和对存储器初始化,要对 硬件设备进行初始化,并使硬件处于就绪状态。通过判断是否计费,调价,清零等状态,来分别调用不同的子程序,使程序在设计 之前,就有了很强的逻辑关系。这些对应于硬件就是通过按下各个控制开关,来分别进行不同的动作,最后数码管 根据输入的信息,来显示不同的数据信息,这就达到了软件控制硬件,同时输入信息控 制输出信息的目的。整个程序的流程图如下:图 4.1 系统程序流程图第4章系统调试系统调试包括软件调试和硬件调试。硬件调试的任务是排除所焊接电路故障。软件 调试是利用开发工具进行在线仿真调试。调试的一般过程如图4.1所示:图4.1系统调试流程图系统调试的一般过程是上电运行后观察其运行状态,数码管是否点亮等。软件调试 先是各个模块、各个子程序分别调试,最后进行系统联机调试。4.1软件调试编程工具一C51语言8051单片机的应用程序设计,使用C51语言进行程序设计虽然相对于汇编语言代码 效率有所下降,但可以方便地实现程序设计模块化,代码结构清晰、可读性强,易于维 护、更新和移植,适合较大规模的单片机程序设计。近年来,随着C51语言的编译器性 能的不断提高,在绝大多数应用环境下,C51程序的执行效率已经非常接近汇编语言,因 此,使用C51进行单片机程序设计已经成为单片机程序设计的主流选择之一。程序调试工具一KEIL本设计的软件都是在Keil 口 Vision 7.5上进行编写,编译,调试以及运行操作。单片机仿真软件在线调试一PROTEUS1打开Proteus软件。2选择file菜单下的open design选项,找到所需的元器件,元器件上单击右键选 中,再单击左键对其进行命名和赋值,接着在编辑器左边的一栏中,找出并绘制设计所 要的各种元器件,按照电路图连接后并保存。3将用keil编译产生的hex文件下载到单片机中:双击51单片机,在对话框中把 保存过的hex文件打开,再单击确定。4单击左下角运行按钮,进行软件仿真调试,直到出现正确的结果。下图为软件的仿真窗口图:4.2系统仿真下图是通过在Keil C中编译通过,并生成Hex文件,在PROTEUS中仿真通过的整体 硬件原理图:0090051E345.UCCI 上士匕U1LUR7- zn .:;一 !r-! IwF, sTEtlTSEIP2A11ALEPZ.i/AIZ胡PZJVAQPZ.&h.HPZ.Tih.BpmFSDRXtF1.1F3.1iT:-lF12F3nnnP1J旳引ITfP1.tP3.innP15P3ST1P1.hP3J&1BF1.7Pl.TF3TJfIR門 1k由卩肋曲.汗22jt-Z3*77I-5T3中7T?-Si 正 1D19 W.DrBTT712Tii TT7 TisTIT MlBO阳H1 B?垃QJAtBt陌BHhBbATBT旺可H j -R2:.10K .ECL HUSDA AlH2:rE:w R3.1Q(i-TE:,in在本次设计中,我们采用AT89S51芯片为核心器件,设计出了简单的出租车计价器, 能够实现显示总金额和总里程,按键控制清零,调价。选题后,我便开始复习单片机方面的知识,也查阅、搜索了很多相关资料,进行总 体设计与具体设计,同时也学习仿真软件Protues和编程软件KeiC。由于以前都采用汇 编语言实现编程,对用C语言来实现单片机的编程不太习惯,花费了一些时间来熟悉C 语言的编程。在设计开始,要形成流程图,它可以使设计有一定的逻辑性与严密性,使 得设计思路明确。采用模块化的设计思想很重要,它方便编写、修改与调试,另外加上 必要的注释,便于交流与理解。这次毕业设计完成后,体会颇多,在学与做的过程中,取长补短,不断学习新的知 识,吸取经验,达到进步的目的。通过自身的努力以及相关图书资料的帮助,逐渐熟悉 了 KEIL、PROTEUS 和 C 语言等软件的使用以及硬件检测过程中的一些小技巧。本次设计 我学习到不少单片机的知识,但由于自己的理论知识水平有限,实践知识和设计经验不 足,在设计过程中难免存在一些问题。恳请各位老师批评指正,以使我在以后的学习和 实践中加以改进和提高。程序源代码#include /#include #include #define uchar unsigned char#define uint unsigned intint xscode6=0x3f,0x06,0x5b,0x4f,0x66,0x6d; /显示存储区int zxscode6=0x1f,0x2f,0x37,0x3b,0x3d,0x3e; /共阴显示片选码int code tab二0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阴极数码int i,j,flag;uchar sec;int kk=0; /路程标志位int jkk=0; /费用int jflag=0; /费用标志位int kflag=0; /路程标志位int zdflag=0; /中断标志位int kilo=0; /路程int dj=1; /路程单价int djflag=0; /路程单价 biaozhiwei/IIC引脚/延时程序子程序sbit keyl二P0; sbit key2二P1; sbit key3二P2; sbit key4二P3; sbit key5=P34; sbit SDA二P30; sbit SCL=P31; void delay();void delayl (xms)uint i,j;for(i=xms;i0;i-)for(j=ll0;j0;j-);void start()/IIC 开始位SDA = l;SCL = l;delay();SDA = 0;delay();void stop()/ IIC 停止位SDA = 0;delay();SCL = 1;delay();SDA = 1;void respons()/IIC 应答位uchar i;SCL=1;delay();while(SDA=1)&(i250)i+;SCL=0;delay();void init()SDA=1;delay();SCL=1;delay();uchar read_byte()/ 从 EEPROM 读到 MCUuchar i,j;for(i=0;i8;i+)SCL=1;j=1;j|=SDA;SCL=0;return(j);void write_byte(uchar date)/ 从 MCU 写到 EEPROMuchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;SCL=0;delay();SDA=CY;delay();SCL=1; delay();SCL=0; delay(); SDA=1; delay();void write_data(uchar addr, uchar start(); write_byte(0xa0); respons(); write_byte(addr); respons(); write_byte(date); respons(); stop();uchar read_data(uchar addr)uchar date; start(); write_byte(0xa0); respons(); write_byte(addr); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date;void xianshi()for(flag=0;flag6;flag+) P0= xscodeflag;P2= zxscodeflag; delay1(2); P0=0;date) /在指定地址addr处写入数据date/在指定地址addr读取数据/显示程序子程序/送显示码/送片选码/计费子程序void jijia()if(kk2&kk35&kk900) jkk=4+2*dj*(kk-2)+1;kflag=kk/100;jflag=jkk/100;xscode2=codetabkflagxscode5=codetabjflag kflag=kk/10;jflag=jkk/10;xscode1=codetabkflagxscode4=codetabjflag kflag=kk%10;jflag=jkk%10; if(kflag=0)kflag=2; xscode0=codetabkflag xscode3=codetabjflagvoid qingling()for(i=0;i100)sec=0;TL0=(65536-2)%256TH0=(65536-2)/256TMOD=0x06;EA=1;ET0=1;TR0=0;kilo=0;/计费子程序/计价方案/起步价4元/路程百位/路费百位/路程十位/路费十位/路程个位/路费个位/不足两公里时,显示两公里/显示码清零/主程序/计数值设置,记满两次产生中断/关定时器qingling(); aa:if(key1=0)/当键按下去,开始计费TR0=1; /开计数器0kk=kilo;jijia();/当键松开,停止计费if(key1=1)TR0=0;if(key2=0) delay1(10);if(key2=1)/停计数器1/功能调整键 /延时判断键是否松开goto aa;void Timer0_Int() zdflag=zdflag+1;if(zdflag=2)zdflag=0;kilo=kilo+1;xscode2=codetabdjflag+;/当pl.2 口的按键按下时功能标志位加一 if(key3=0&djflag=2)/当功能键标志位等1时,改变每公里的价钱delay1(10);if(key3=1)dj+;xscode1= codetabdj/10 ;/把价钱十位送显示区,单价不能超100 xscode0=codetabdj%10;if(key4=0) /有键按下,清显示,单价会初始值,单价标志位清零 qingling();dj=1;djflag=0;xianshi();/调显示子程序interrupt 1 using 2/计数器0中断服务/中断标志位加一/当中断产生二次后,路程加一公里并清中断标志位
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!