基于DSP的频率计毕业设计论文.doc_第1页
基于DSP的频率计毕业设计论文.doc_第2页
基于DSP的频率计毕业设计论文.doc_第3页
基于DSP的频率计毕业设计论文.doc_第4页
基于DSP的频率计毕业设计论文.doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录基于DSP的频率计毕业设计论文目 录1 前言11.1 选题意义11.2 国内外研究现状11.3 本文主要工作21.4 本文结构安排22 总体方案设计与论证32.1 设计方案选择32.2 方案设计与论证42.3 系统结构框图53 系统硬件设计73.1 硬件电路说明73.2 硬件电路模块介绍73.2.1 AT89S51单片机简介73.2.2 驱动电路113.2.3显示电路113.2.4复位电路133.2.5掉电保护电路143.2.6时钟电路163.2.7按键电路174 系统软件设计194.1 系统程序设计194.2 各模块程序设计204.2.1 掉电模块I2C总线接口设计204.2.2 按键模块设计234.2.3 显示模块设计234.2.4 测试里程模块设计244.2.5 计费模块设计255 系统调试及指标测试275.1 软件测试275.1.1 程序调试工具KEIL275.1.2 单片机仿真软件在线调试PROTUES285.2 硬件测试306 结论与展望336.1 结论336.2 不足与展望33致 谢35参考文献37附 录391 前言1 前言1.1 选题意义近年来,随着出租车的普及使其成为人们工作,生活不可缺少的交通工具。出租车行业的收费标准也随之被人们日益重视,出租车计价器已成为乘客和驾驶员之间公正合理收费的依据,起到双方“公平称”的作用。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。微型计算机已经广泛应用于各行各业,促进了社会的进步。作为今天的设计人员,必须很好的掌握微型计算机的概念与技术。书本上学习的知识通常只是理论上的东西,而现实工作中的则是与实际结合很紧密的事情。所以实践是必不可少的掌握所学内容的阶段。现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。随着城市建设益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。因此,汽车计价器的研究也是十分有一个应用价值的。1.2 国内外研究现状我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。随着改革开放益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打发票和语音提示、按时间自主变动单价等功能。出租车计价器就是单片微型计算机的一个典型的应用。现在市面上的出租车计价器品种繁多、功能强大。作为一个毕业设计的课题,本着从大处着眼,从小处入手的原则,对单片机的应用做了一些初步的尝试和探讨。出租车计价器一般采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。为此我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。现在可采用的设计方案较多,比如可采用单片机、PLC、VHDL、DSP、FPGA、ARM等等。各种方案都有各自的优点,如果采用模拟电路和数字电路设计的计价器,整体的电路规模会比较大,用到的器件比较多,造成故障率高,很难调试,所以我们采用单片机方案。在这里主要介绍单片机方案:单片机硬件与软件结合,硬件设计简单,单片机的接口较为丰富,可以很容易扩展出许多外部设备,并且软件调试过程容易实现。编程语言采用C语言,使用起来较为简单,软硬件接口设置方便。在本设计中,采用AT89S51单片机为主控器,并采用AT24C02实现在系统掉电的时候保存单价等信息,输出采用8段数码管显示。1.3 本文主要工作本文设计了一台出租车计价器,完成了一下工作:1)通过查阅相关资料,深入了解出租车计价器的工作原理;2)复习“MCS-51单片机原理及C语言程序设计”,掌握其接口扩展包括:显示、键盘等;3)按照设计基本要求组建基于单片机的出租车计价器的总体结构框图,构建硬件平台;4) 采用C语言编写应用程序,要进行初始化,包括对系统初始化和对存储器初始化,要对硬件设备进行初始化,并使硬件处于就绪状态;5)通过判断是否计费,调价,清零等状态,来分别调用不同的子程序。然后对系统进行软件仿真,硬件测试和结果分析,并且达到预期目标。1.4 本文结构安排第一章:前言;第二章:总体方案设计与论证;第三章:系统硬件电路设计;第四章:系统软件设计;第五章:系统调试与指标测试;第六章:项目的综合评价与展望。12 总体方案设计与论证2 总体方案设计与论证2.1 设计方案选择1)方案1采用中小规模数字电路构成计价器,由计数器构成主要的测量模块,由定时器组成主要的控制电路,通过在555振荡器上接入不同电阻选择白天、晚上、红灯或堵车,停车报价。电路框图如图2-1。图2-1 方案一2)方案2用555振荡器模拟车轮转数,用89S52实现外围计数功能,控制单片机P1口的相关开关实现白天,晚上,红灯,停车报价之间的切换,P0口作并行输出。显示模块选用7个数码管实现动态显示。电路框图如图2-2。图2-2方案二3)方案3出租车驱动轮转数与轴转数的传动比是一定的,磁感应传感器会产生一个大约20MS的低脉冲,可以通过计算磁感应传感器产生的低脉冲数来计算出租车跑的里程数及相应的车费。编码器的单片机通过一个I/O口来检测磁感应传感信号,当确定为传感器产生信号时,就通过里一个I/O口向解码器的单片机发送一组编码,则解码器的单片机首先判断当前准备接收的数据时编码器发送的编码还是解码器写入器的发送的解码,当判断解码器写入的解码时,解码器的单片机接收此解码,并用12C总线协议将解码保存到EEPROM中;当判断是编码器发送来的编码时,解码器的单片机接收此编码,然后读出自己EEPROM中的解码,语气接收到的解码相比较,若相同解码器单片机通过I/O口向计价装置发出计价脉冲,否则不发出计价脉冲。此方法解决了以前计价器计价不准确,使用寿命短等缺点图2-3 方案三4)方案4采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,而且灵活性较强,可以通过软件编程来完成更多的附加功能。设计采用AT89S51单片机为主控制器,通过按键代替实现霍尔传感器测距,实现对出租车的基本计价设计,并采用AT24C02实现在系统中掉电的时候保存单价等信息,输出采用8段数码管显示器。利用单片机丰富的I/O口,及控制的灵活性,实现基本的计价功能。系统框图2-3如下:图2-4 方案四2.2 方案设计与论证方案1系统电路较复杂,不能程控和扩展,难以实现白天晚上不同价位和单价调整,尚有进一步优化的空间。方案2采用单片机进行的设计,用较少的硬件和适当的软件相互配合容易的实现设计要求,可以通过软件编程来完成更多的附加功能。但是考虑到555振荡器价格昂贵,尚有进一步优化的空间。 方案3解决了以前计价器计价不准确,使用寿命短等缺点。但此方法通常使干扰信号也能产生计数脉冲,分立元件过于复杂,电路稳定性不好。方案4利用丰富的I/O端口,及其控制的灵活性,动态显示降低了硬件成本和电源损耗。在设计中采用一个模拟开关来代替。通过在软件程序中设置的里程和金额的信息,再加上驱动电路的设计,就可以在数码管上分别显示总金额和总里程,价格便宜而且方便易懂。综上所述,采用方案3较好。2.3 系统结构框图系统结构图如2-5所示:图2-5 系统结构图在方案四中,设计电路时,考虑到里程传感器价格昂贵,且不便于试验测试,在设计中采用一个模拟开关来代替。模拟开关一端接在P3.4口,另一端接地,通过来回高低电平的变化,每按两次,对应的里程数加一。通过在软件程序中设置的里程和金额的信息,再加上驱动电路的设计,就可以在数码管上分别显示总金额和总里程。设计中,为了能够让数码管更好的正常显示,本设计中采用了驱动电路来驱动,在本次硬件设计中,考虑采用芯片74LS245来驱动数码管显示。在显示方面可以用液晶显示,也可以用数码管进行显示。由于在这次设计中只需要显示里程和金额信息,设计时采用数码管进行显示。这样既节约了成本,又可以达到显示的目的。同时为了减少硬件的复杂度,本论文采用了动态显示方式,选用了共阴极数码管。同时,还设计了控制按键,能够很好的对出租车计价器控制,如启动、停止按键,清零按键等。333 系统硬件设计3 系统硬件设计3.1 硬件电路说明在本次设计中,硬件组成包括:AT89S51,驱动电路,显示电路,复位电路,掉电保护电路,时钟电路,按键电路等几个部分。单片机是单片微型计算机的简称,单片机以其卓越的性能得到广泛的使用。在这次设计中,我们采用AT89S51单片机,其中用到的I/O口为P0口和P2口,P0口为8位三态I/O口,此口为地址总线及数据总线分时复用;P2口为8位准双向口,与地址总线高八位复用;P0口和P2口都有一定的驱动能力,P0口的驱动能力较强。【1】出租车计价器根据乘客乘坐汽车行驶距里或所用时间的多少进行计价,并在行程中同步显示车费值。从起步价开始,当汽车程行驶未满2公里时,均按起步价计算。过2公里后,实现每1公里单价收费,测距收费或测时收费的和便构成了一位乘客的车费。同时,白天和夜晚价格不同,根据判断时间可以进行切换。白天单价、夜晚单价和起步价格都可以读取当前时间进行调节。在系统设计时,按下计价按键时,显示起步价和起步里程范围,这些在程序中显示,当等于或超过两公里后,按计算总价的公式为:总价=起步价+单价*(总里程-起步里程)+13.2 硬件电路模块介绍3.2.1 AT89S51单片机简介AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4k Bytes ISP(In-System Programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案. 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个 全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。【2】单片机各管脚功能介绍:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。PO口有两个功能:外部扩展存储器时,当作数据/地址总线。不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。【3】图3-1 AT89S51引脚图VCC:接+5V电源;GND:接地;P1.0:接启动/停止按键,控制计价;P1.1:按功能键;P1.3:按清零键;P0口接数码管选段,P2口接驱动芯片;P3.4(T0)接模拟开关按键,替代了出租车计价器中的传感器;P3.0、P3.1口接掉电保护电路。时钟引脚:XTAL1和XTAL2两端接晶振和30PF的电容,构成时钟电路,它可以使单片机稳定可靠的运行;RST:复位信号输入端,高电平有效。当在此引脚加两个周期的高电平时,就可以完成复位操作;ALE/PROG:当访问外部存储器时,ALE(地址锁存允许)输出电平用于锁存地址的低8位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE操作,可通过特殊功能寄存器(SFR)区中的8EH单元的D0位置位。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将 内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。图3-2 AT89C51的内部结构框图AT89S51主要特性1)兼容MCS-51指令系统,4k可反复擦写(1000次)ISP Flash Rom2)32个双向I/O口,4.5-5.5v工作电压3)2个16位可编程定时/计数器,时钟频率0-33MHz4)全双工UART串行中断口线,128x8Bit内部RAM5)2个外部中断源,低功耗空闲和省电模式6)中断唤醒省电模式,3级加密位7)看门狗(WDT)电路,软件设置空闲和省电功能8)灵活的ISP字节和分页编程,双数据寄存器指针3.2.2 驱动电路74LS245是我们常用的芯片,用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。 74LS245还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输(接收);DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。图3-3 74LS245芯片3.2.3显示电路用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间,更重要的是能节省成本。 硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD码即可,硬件接线有一定标准。软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。在显示方面我们选用了LED显示器动态显示。静态显示虽然亮度较高,接口编程容易,但是每位的段码线分别与一个8位的锁存器输出相连,占用的I/O口较多,在显示位数较多的情况下,一般采用动态显示。在多位LED显示时,为了简化电路,降低成本,将所有位LED的段选线并接在一起,在某一刻时,将要显示的字符段码同时送到每一个显示器的各段,但是只让这一位LED显示。下一时刻又送下一位LED要显示字符的段码,并只让下一位LED显示.如此轮流,使每位显示该为的字符,这样不断的循环送出响应的段选码位选码,就可以获得视觉稳定的显示状态。【9】图3-4 显示电路设计原理图LED数码有共阴和共阳两种,把这些LED发光二极管的正极接在一起(一般是拼成一个8字加一个小数点)而作为一个引脚,叫做共阳的,反之就叫共阴的,那么应用时这个脚就分别接VCC和GND。然后把多个这样的8字装在一起就成了多位数码管了。共阴数码管,阴极接地,当某个发光二极管的阳极为高电平时,发光二极管点亮,对应的段就显示。在本次设计仿真中使用的是6个一组的共阴8段数码管,如下图所示:图3-5 共阴极8段数码管示意图3.2.4复位电路单片机的复位是由外部的复位电路实现的,无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。所以设计好复位电路是至关重要的。系统开始运行和重新启动靠复位电路来实现,这种工作方式为复位方式。单片机在开机时都需要复位,以便CPU及其他功能部件都处于一种确定的初始状态,并从这个状态开始工作。【11】复位电路通常采用上电复位和按钮复位两种方式。上电复位是通过外部复位电路的电容充电来实现的。除了上电复位外还需要按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平方式复位是通过RST端经电阻与电源VCC接通而实现的。单片机复位速度比外围I/O接口电路快,并能保证系统可靠地复位,在初始化程序中安排一定的复位延迟时间。AT89S51的复位端高电平有效。RST端若由低电平上升到高电平并持续两个周期,系统将实现一次复位操作。在复位电路中,按下一个复位开关就使在RST端出现一段时间的高电平,就实现复位。图3-6 复位电路模块设计3.2.5掉电保护电路单片机实现的仪器仪表,家用电器,工业监控等系统中,对某些状态参数,不仅要求能够在线修改,而且断电能保持,以备上电后恢复系统的状态。断电数据保护方法可选用具有断电保护功能的RAM和电可擦存储器EEPROM。具有断电保护功能的RAM容量大,速度快,但占用线多,成本高,EEPROM适合数据交换量少,对传送速度要求不高的场合。【11】EPROM有并行和串行之分,并行EEPROM速度比串行快,容量大。串行芯片成本低,线路简单,工作可靠,占用单片机口线资源少。AT24CX系列串行EEPROM是目前单片机应用系统中使用较多的EEPROM芯片。其系列串行EEPROM除具有体积小、功耗低、工作电压有效范围宽等特点外,还具有型号多,容量大,I2C总线协议,占用I/O口线少,芯片扩展配置方便灵活,读/写操作相对简单等优点。在智能化装置中,正日益获得广泛应用。AT24CX系列EEPROM为串行的用电擦除的可编程CMOS只读存储器。自定时写周期包括自动擦除时间不超过10ms,典型时间为5ms。擦除/写入周期寿命一般都可达到10万次以上。片内数据保存寿命可达410年以上。采用单一电压+5V,低功耗工作电流1mA,备用状态只有10uA,端口为三态门输出,与TTL电平兼容。一般商业品工作温度为0+70,工业品为-40+85。这个系列的芯片有8脚DIP(双列直插)封装,8脚SOIC(表面贴装)封装,一部分型号还有14脚SOIC封装。【10】掉电保护电路中采用了存储芯片AT24C02。它的作用是在电源断开的时候,存储当前设置的单价信息,采用串行的总线和单片机的通讯。AT24C02系列串行EEPROM引脚、容量及结构目前我国应用最多的封装形式是8脚封装,如图3-6所示:图3-7 AT24C02型号和引脚图中R1,R2是上拉电阻,其作用时减少AT24C02的静态功耗。由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(时钟脉冲)和SDA(数据/地址)与单片机P3.1和P3.0连接,进行传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内,当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元里,供主程序使用。AT24C02的EEPROM的引脚说明如下:1)SCL串行时钟端,用于对输入和输出数据的同步。写入串行EEPROM的数据用SCL上升沿同步,输出数据用下降沿同步2)SDA串行数据输入/输出端,漏极开路结构。使用时该引脚必须接一个5.1K左右的上拉电阻。SDA线上数据传送顺序是高位在先,低位在后。3)WP写保护,用于硬件数据保护功能。当该引脚接地时,可以对整个存储器进行正常读/写操作;当其接电源Vcc时,芯片就具有写保护功能,被保护的区域因型号而异。被保护部分的读操作不受影响,实际上这时被保护的区域就可以作为串行只读存储器。英注意,对AT24C08芯片,虽然第7脚也定义为WP,但实际不起作用。A0,A1,A2片选或以页面选择地址输入,用于EEPROM器件地址编码。将这3个引脚配置成不同的编码值,可选中不同的芯片。在同一串行总线上最多可扩充8片同一容量或不同容量的芯片。但注意,有些型号的地址是无效的。例如,AT24C16所对应的3个引脚均无效,因此使用AT24C16时只能寻址1片,同样,使用AT24C04时刻寻址4片;使用AT24C08可寻址2片。TEST测试,用于对存储器的检测。VCC电源电压+5V。GND接地端。NC未连接。ATC24C02是目前最常用的型号,支持器件地址编码,统一串行总线最多时可同时连接18片,支持硬件设置数据保护。3.2.6时钟电路由于单片机没有时钟模块,故外接一个晶振,来产生系统时钟脉冲。时钟脉冲电路的主要作用是对外发出时序控制信号,在AT89S51芯片上,XTAL1和XTAL2分别为反向放大器的输入和输出,其中,当与本试验线路相同时,即使用内部时钟方式时,XTAL1和XTAL2必须外接石英晶体和微调电容,其中电容C1、C2对振荡频率起稳定的作用,振荡频率应在1.2MHz12MHz。该反向放大器可以配置为片内振荡器。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。时钟频率越高,单片机控制器的节拍越快,运算速度也越快。本设计中使用的振荡电路,有12MHZ晶体振荡器和两个约33PF的电容组成,在XTAL1和XTAL2两端跨接晶体,电容的大小不会影响振荡频率的高低。在整个系统中为系统各个部分提供基准频率,以防因其工作频率不稳定而造成相关设备的工作频率不稳定,晶振可以在电路中产生振荡电流,发出时钟信号。具体电路设计如图所示:图3-8 时钟模块电路设计3.2.7按键电路按键电路中,单片机的P1.0管脚按启动/停止按键,通过软件编程,当按下按键计数器开始工作,开始计价;当弹起按键时计数器停止工作,停止计价,启动/停止按键带自锁功能。按下启动按键,开关处于导通状态,这时给P1.0送低电平信号,这时TR0=1,计数器开始工作,调用计价子程序开始计价。功能键接到单片机的P1.3,按下功能键实现对计价器的价格调整。清零按键接单片机的P1.7管脚,按下清零按键,P1.7为低电平,调用清零子程序,用于将显示数据清零,在程序中给各位赋0代码,以达到轻灵的目的,方便下次计价。另外为功能键,控制价格调整,这个按键是在没有按下启动/停止按键时有作用,计价过程无效。图3-9 按键电路设计4 软件设计4 系统软件设计8051单片机的应用程序设计,使用C51语言进行程序设计虽然相对于汇编语言代码效率有所下降,但可以方便地实现程序设计模块化,代码结构清晰、可读性强,易于维护、更新和移植,适合较大规模的单片机程序设计。近年来,随着C51语言的编译器性能的不断提高,在绝大多数应用环境下,C51程序的执行效率已经非常接近汇编语言,因此,使用C51进行单片机程序设计已经成为单片机程序设计的主流选择之一。【6】C51语言是目前最流行的单片机程序设计语言。单片机既具有汇编语言的硬件操作能力,又兼有其他高级语言的优点。这便使得单片机C51的程序开发非常方便。在现代的单片机程序设计中,单片机C51语言日益得广大开发者的青睐。单片机C51语言是由C语言发展继承而来的。和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通平台。C51有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力。51单片机程序设计语言主要有两种:一是汇编程序设计。二是C语言编程设计。两种程序设计语言都有各自的优点。用汇编语言编写和高级语言(C语言)比较起来节约空间,这样对于存储空间仅4Kb的芯片来说是极之有利的,52单片机能高速的运行。C语言作为一种编译型程序语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。此外,C语言程序还具有完善的模块程序结构,从而为软件开发采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已经成为软件开发的主流。【8】在本次设计中就是采用C语言编写的,由于采用模块化操作,使得程序在修改,执行的时候显得方便易行。4.1 系统程序设计本设计中,软件设计采用模块化操作,利用各个模块之间的相互关系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。在main函数编写开始,要进行初始化,包括对系统初始化和对存储器初始化,要对硬件设备进行初始化,并使硬件处于就绪状态。通过判断是否计费,调价,清零等状态,来分别调用不同的子程序,使程序在设计之前,就有了很强的逻辑关系。这些对应于硬件就是通过按下各个控制开关,来分别进行不同的动作,最后数码管根据输入的信息,来显示不同的数据信息,就达到了软件控制硬件,同时输入信息控制输出信息的目的。整个程序的流程图如下:图4-1 主流程图4.2 各模块程序设计4.2.1 掉电模块I2C总线接口设计I2C总线的基本概念发送器:发送数据到总线的器件接收器:从总线接收数据的器件主机:初始化发送、产生时钟信号和终止发送的器件从机:被主机寻址的器件I2C总线是双向传输的总线,因此主机和从机都可能成为发送器和接收器。时钟信号SCL都要由主机来产生。信号的有效性:图4-2 IIC时钟信号1)数据线SDA的电平状态必须在时钟线SCL处于高电平期间保持稳定不变。2)SDA的电平状态只有在SCL处于低电平期间才允许改变,但是在I2C总线的起始和结束时例外。起始条件与停止条件:图4-3 IIC起始、停止条件起始条件当SCL处于高电平期间,SDA从高电平向低电平跳变时产生起始条件。总线在起始条件产生后便处于忙的状态。起始条件常常简记为S。停止条件当SCL处于高电平期间时,SDA从低电平向高电平跳变时产生停止条件。总线在停止条件产生后处于空闲状态。停止条件简记为P。程序实现:起始时刻:void I2C_Start()short_delay();I2C_SDA=1;short_delay();I2C_SCK=1;if(I2C_SDA=0)return 0;if(I2C_SCK=0)return 0;I2C_SDA=0;short_delay();I2C_SCK=0;short_delay();reture 1;停止时刻:void I2C_Stop()short_delay();I2C_SDA=0;short_delay();I2C_SCK=1;short_delay();I2C_SDA=1;short_delay();从机地址:I2C总线不需要额外的地址译码器和片选信号。多个具有I2C总线接口的器件都可以连接到同一条I2C总线上,它们之间通过器件地址来区分。主机是主控器件,它不需要器件地址,其它器件都属于从机,要有器件的地址。必须保证同一条I2C总线上所有从机的地址都是唯一确定的,否则I2C总线将不能正常工作。一般从机地址有7位地址位和一位读写标志R/W组成,7位地址占据高7位,读写位在最后。读写位是0,表示主机将要向从机写入数据;读写位是1,则表示主机将要从从机读取数据。应答状态位:在I2C总线传输数据过程中,每传输一个字节,都要跟一个应答状态位。接收器接收数据的情况可以通过应答位来告知发送器。应答位的时钟脉冲仍有主机产生,而应答位的数据状态则遵循“谁接收谁产生”的原则,即总是由接收器产生应答位。I2C总线规定:应答位为0表示接收器应答(ACK),常常简记为A;为1则表示非应答位(NACK),常常简记为N。发送器发送完LSB之后,应当释放SDA(拉高SDA,输出晶体管截止),以等待接收器产生应答位。【12】图4-4 发送控制信号I2C应答程序实现:void I2C_Ack(void)short_delay();I2C_SDA=1;short_delay();I2C_SCK=1;4.2.2 按键模块设计如下程序段用来定义按键位置寄存器变量,按键按下时,对应位置寄存器值发生变化,产生相应中断去调用对应的子程序,如按下P1.0管脚按键,出租车开始计费和显示行驶里程。sbit DistanceFuseIn =P34;sbit Start =P10;sbit Markup =P11;sbit Depreciate =P12;sbit Clear =P13;4.2.3 显示模块设计设计6位(高三位显示里程,低三位显示计价)8段数码管以动态显示方式实现,利用人眼视觉的暂停效应及LED显示特性,可以较好实现里程及计价显示,LED动态刷新子程序如下:void ReFreshLed(void)static unsigned char DispCnt =0;SetSegEn(FALSE); /短暂禁止显示SetSegCode(SegCodeDispBufDispCnt); /送段码到P0口SetBitCode(DispCnt);/送位选信号到P2口SetSegEn(TRUE); /开显示/依次显示if(DispCnt 5)DispCnt+;elseDispCnt=0;4.2.4 测试里程模块设计我们知道,在实际出租车计价器设计中,出租车行驶里程的测试是通过检测车轮上的霍尔传感器,来检测在出租车行驶过程中车轮转过多少圈(检测到2次霍尔中断为车轮行驶一圈),再根据车轮直径计算出行驶里程(*D*行驶圈数)。本方案中采用按键模拟车轮上的霍尔检测,按键一次代表检测到霍尔中断,按键两次代表车轮转过一圈,而在程序设计上就以车轮转过一圈表示行驶1公里(这里采取的是简化的做法,实际可能要很多个2次按键,出租车才会行驶到1公里,为了是程序调试和演示的可操作性,就以按2次按键,车轮行驶一圈的距离表示出租车行驶了1公里)。测试里程的子程序模块如下:【7】void ReadDistanceFuse(void)static unsigned char Fuse =1;static unsigned char Cnt =0;if(DistanceFuseIn =0)&(Fuse =1)if(Cnt 1) /2个脉冲为一公里。可以修改为其他数值。Cnt+;elseif(Distance 1000)Distance +;Cnt =0;Fuse = DistanceFuseIn;4.2.5 计费模块设计在程序中,设置为2公里之内为8元,里程在2公里和35公里之间,每公里单价为2元,超过35公里之后,单价变为4元。下图为计价模块流程图:图4-5 计价模块流程图void CalcFees(void)unsigned int buf;if(Distance =2)/起步距离Fees =8; /起步价8元else if(Distance 35) Fees =8 + 2*(Distance -2) + 1;elseFees =8 + 4*(Distance -2) + 1;5 系统调试及指标测试5 系统调试及指标测试根据方案设计的要求,分别进行软件测试、硬件测试和软硬件联合调试。电路按模块调试,各个模块都调试通过后再对整个系统进行联合调试。先在学习机上搭电路,调试成功后自制电路板再进行调试。图5-1 系统调试流程系统调试的一般过程是上电观察其运行状态,数码管是否点亮等。软件调试先是各个模块,各个子程序分别调试,最后进行系统联机调试。5.1 软件测试5.1.1 程序调试工具KEILKeil IDE(u Vision2)集成开发环境是Keil Software Inc/Keil Elektronik GmbH开发的基于MCS 8051内核的微处理器软件平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程的建立和管理、编译、连接、目标代码的生成到软件仿真、硬件仿真等完整的开发流程。尤其是C语言编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时是非常理想的工具。Keil 本身是一个纯软件工具,不能直接进行硬件仿真,必须挂接类似TKS系列仿真器的硬件才可以进行仿真。5.1.2 单片机仿真软件在线调试PROTUESProteus软件是目前最好的模拟单片机外围器件的工具。该软件的特点是:1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。2)支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。4)具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。【5】仿真软件PROTUES的使用:打开Protues软件;选择file菜单下的open design选项,找到所需要的元器件,元器件上单击右键选中,再单击左键对其进行命名和赋值,接着在编辑器左边的一栏中,找出并绘制设计所需要的各种元器件,按照电路图连接后并保存。将用keil编译产生的hex文件下载到单片机中,双击51单片机,在对话框中把保存过的hex文件打开,再单击确定。单击左下角运行按钮,进行软件仿真调试,直到出现正确的结果。下图为软件的仿真窗口:(a)(b)在仿真图b中仿真结果说明计价器起价为8元,在2公里之内价格不变。超过2公里之后,按下连接P3.4的按键,每按两次说明路程增加1公里,而在实际出租车计价时会用霍尔传感器来代替。(c)图5-2 软件仿真图 在仿真图c中,会看到数码管显示公里数(高三位)和费用(低三位)。在程序中设计,超过两公里之后,每超1公里,费用为2元,所以当里程数显示为5时,费用为15。5.2 硬件测试设计的过程中,对硬件的检测和对软件的测试都不能忽略,因为在系统的仿真过程中,各元件都是理想的,而在设计实际电路时,就需要多方便考虑。要先对元器件进行检测,然后进行调试。在已经焊接好的电路板上,要对其各个元器件进行检查。一般情况下,集成电路不会出现故障。在本设计中采用了先焊接插槽的方法,这可以避免一些元件在焊接的过程中被烧坏。另外在焊接数码管时,要先排线,再焊接以免线路混乱。元件在选购时需要多被选元件,元件的型号多,产品质量没有可靠地保证,就避免不了我们买的元器件是损坏的,再加上焊接是在万能板上焊接的,就有可能发生虚焊短路等情况发生。所以,在焊接好每个元件后都要进行检测,以保证焊接无误,焊接好电路板,把相应的芯片插到相对应的插槽中,再检一次,看芯片是否与插槽接触良好。驱动部分是检查74LS245与数码管和单片机接触的各个引脚,看是否焊接良好,另外,要让芯片和插座有良好的接触。显示部分检测的目的是看数码管是否能够正常显示。如果不该亮的字段点亮,检测是否有短路的情况:如果数码管不显示,说明位选段可能没有焊接好;如果显示不够亮,则应该检查驱动电路。6 结论与展望6 结论与展望6.1 结论在本次设计中,采用AT89S51芯片为核心器件,设计出了简单的出租车计价器,能够实现显示总金额和总里程。设计中,为了能够让数码管更好的正常显示,还采用了驱动电路来驱动。并且阅读大量资料,对计价器模块进行了综合分析,明确了论文的方向,确定了基于单片机控制的总体设计方案。在本次设计中,采用AT89S51芯片为核心器件,设计出了简单的出租车计价器,能够实现总金额和总里程,按键控制清零,调价。在选择方案时,按照要求具体分析,提出了硬件总体设计方案。本着经济、高效的原则,提供了系统的硬件选型参考。深入分析、总结了系统软件部分的功能,划分了驱动电路,显示电路,复位电路,掉电保护电路,时钟电路,按键电路几个模块;基于KEIL51进行了软件系统的设计。在本次设计中,含有掉电保护功能模块,具有存储记录的里程和金额的信息。6.2 不足与展望论文设计完成之后,我们进行软件仿真,达到了预期的效果。但是在论文中还有很多的不足,我们可以经过软件调试达到。主要有以下几点:1)开关按键过多,易遭成司机忙中出错。2)现实生活中,白天和晚上的计价标准是不一样的,单价标准也不同。所以应在软件中加入程序通过时间判断进行白天价格和晚上价格的初始化,即使是行车期间时间由白天跳到晚上,也可调整单价。3)缺少语音播报功能,如果提供语音播报功能可以向乘客致欢迎词及报价,即可提高行业服务质量,也为一些视力有障碍的乘客提供便利。4)设计时缺少假定红灯和堵车情况。而实际生活中也常有红灯或堵车同时在计费,所以可以在电路和程序中加入相关的模块来实现此功能。参考文献参考文献1 马淑华,王凤文,张美金编著. 单片机原理与接口技术(第二版). 北京:北京邮电大学出版社,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论