资源描述
. . . 毕业设计(设计)题目:基于单片机的出租车计价器设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作与取得的成果。尽我所知,除文中特别加以标注和致的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得与其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了意。作 者 签 名:日 期:指导教师签名: 日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部容。作者签名: 日 期:学位论文原创性声明本人重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日注意事项1.设计(论文)的容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体与大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订基于单片机的出租车计价器设计摘 要随着国城市现代化的发展,出租车行业突飞猛进,出租车计价器的市场需求量也大大增加。出租车计价器是乘客与司机双方的交易准则,是出租车行业发展的重要标志,关系着乘客和出租车司机双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。传统机械式和半机械式出租车计价器主要依靠传感器接收的脉冲进行计数,依靠齿轮比进行计价,不可避免的造成计价器易损耗,精度低,不易调整价格,容易作弊等问题。从加强出租车行业管理与服务质量并且节约成本出发,考虑到单片机已经再各个领域成熟的应用了几十年,其技术可靠,参考资料丰富,价格低廉,因此本文选取了AT89S52这一单片机做为计价器的核心。运用霍尔传感器检测车轮转数,读取掉电存储单元里面的价格信息,经单片机处理之后显示到LED数码管上。用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合很容易实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。通过软件就可以轻易的实现计费模式的切换。本设计采用LED数码管提供了友好易读的界面,数据信息一目了然,极大的方便了司机朋友的使用。关键词:出租车计价器;AT89S52;单价调节; 软硬件设计A DESIGN OF TAXIMETER BASED ON SINGLE CHIP DESIGNABSTRACTWith the development of modern domestic cities, the taxi industry by leaps and bounds,and the rental car mileage fare meters market demand is also greatly increasing. Taximeter is both passengers and drivers of the transaction criteria, a taxi is the most important tools. It relates to the interests of both transactions. Has a good performance regardless of the meter is a vast number of taxi drivers or passengers are very necessary.Traditional mechanical and semi-mechanical Taximeter rely mainly on the sensor to receive the pulse count, relying on the pricing of gear ratio, the inevitable result of the meter easy to wear and tear, low precision, easy to adjust the price, easy to cheat and other issues.In order to strengthen the rental car trade management and the grade of service,and saves the cost to embark,The single-chip circuitry to AT89S52 as the center, an additional Hall sensor A44E ranging, to realize Taximeter statistics, using AT24C02 realize when the system power-down unit prices and save information such as system time. MCU used for the design, a relatively powerful, with less hardware and appropriate software can easily coordinate with each other to achieve the design requirements, flexibility and strong, can be programmed by software to complete more of the additional Function. Pricing model for the switch, software programming and can easily cite the achievement.Also in this programme that the use of a 8 digital display tube, can be more friendly to use interface.This design uses LED digital tube to provide a friendly and easy to read interface and data information at a glance, which greatly facilitates the use of the driver friends。Key words:Rental car mileage fare meter;AT89S52 ;unit price adjustment;software and hardware design39 / 47目录1 绪论11.1课题背景11.2 本文研究目的21.3本文主要容22 总体方案设计32.1方案论证与比较32.2单片机系统总体设计42.3芯片简介52.3.1 AT89S5252.3.4 DS130262.3.5 A44E72.3.6 AT24C0282.3.7 74LS138103 硬件电路设计113.1 CPU模块113.2 路程测量部分123.3 数据显示部分133.5 时钟部分143.6 掉电存储电路143.7 按键部分电路153.8 章节总结164 系统软件设计174.1 主程序设计174.2 里程计数中断服务程序184.3 仿真结果194.3.1仿真软件Proteus194.3.2 Proteus 界面介绍204.3.3 Proteus 仿真结果205总结22参考文献23致25附录A 系统总原理图26附录B 各部分程序27附件附件1 开题报告(文献综述)附件2 译文与原文影印件1 绪论1.1课题背景出租车行业在我国是八十年代初兴起的一项新兴行业,随着出租车行业的迅速发展,出租车已经成为了城市交通不可分割的部分,出租车计价器是乘客与司机之间的一把秤,它关系着交易双方的利益,是出租车中最具标志性的工具。一个性能良好的计价器无论是对广大出租车司机朋友还是乘客来说都是非常重要的1。出租汽车计价器是一种专用的计量仪器,它安装在出租汽车上,能连续累加计算,并指示出行程中任一时刻乘客应付费用的总数,其金额值是计程和计时时间的函数。出租车计价器在最初使用时具备的主要功能是根据行驶里程计价,要求精度高,可靠性好。要将出租车计价系统产品化,应该根据客户不同的需求进行不同的设计,在程序中增加一些可以人为改变但又不是可以在运行中随意改变的参数,以便客户根据不同的需要随时调节单价以与计价方式。多年来国普遍使用的车租车计价器计量功能少,操作不便,而且目前世界上90%的计价器产自。现今国生产计价器的企业仅有数百家,主要是集中在珠江三角和等地。这些企业也大都是一些中小型的企业,研发水平有限,技术水平不高,国际竞争力也不强2。我国最早的计价器几乎都采用机械齿轮构成,只能完成简单的测量功能,从某种程度上说,早期的计价器就只是个特殊的里程表。随着科学技术的发展,产生了采用了手摇计算机与机械结构相结合的新一代的计价器。它在计程的同时还可完成计价的工作。大规模集成电路的发展带来了第三代计价器,也就是现在常见的功能也在不断完善的全电子化的计价器。现在各大中城市出租车行业都必备出租车计价器,甚至于没有正规的出租车计价器的出租车几乎不再有人相信是真的,所以计价器市场的发展已成为了不可阻挡的趋势3。而部分小城市出租车行业尚不发达,但随着城镇城市化进程的日益加快,象征着城市面貌的出租车行业也将加速发展,计价器市场的不断扩也是毫无疑问的,所以未来出租车计价器的市场潜力还是巨大的。1.2 本文研究目的目前的出租车计价器种类繁多,采用的方案也各不一样。从传统简单的逻辑电路方案到高性能的FPGA方案,极丰富了计价器市场。但是各个方案又都有其难以避免的缺点,例如逻辑电路,由于主要依靠传感器接收的脉冲进行计数,依靠齿轮比进行计价,不可避免的造成计价器易损耗,精度低,不易调整价格,容易作弊等问题4。因此本文拟采用一个简单易行,且价格低廉的方案来取代当前的出租车计价器。考虑到单片机已经再各个领域成熟的应用了几十年,其技术可靠,参考资料丰富,价格低廉,因此本文选取了AT89S52这一单片机做为计价器的核心。运用霍尔传感器检测车轮转数,读取掉电存储单元里面的价格信息,经单片机处理之后显示到LED显示屏上。相信这种计价器能够成功的取代当前的出租车计价器给乘客和出租车司机带来方便和实惠。1.3本文主要容本文第一章主要介绍了出租车计价器的一些相关信息,简要的叙述了本设计存在的意义。第二章对当前的各种方案进行了比较论证,最后选取其中综合性能最好的方案,并且对这一方案里面所采用的各种芯片进行了简要的减少和说明。第三章则详细的叙述了各个芯片的硬件电路,各部分的功能构成,以与周边电路的设计。第四章则介绍了各个软件模块的设计方案,软件流程。也简单介绍了本文模拟用的软件Proteus和Proteus的仿真的结果。2 总体方案设计2.1方案论证与比较出租车计价器是出租车营运收费的专用计量仪表,随着电子技术的发展也给出租车计价器的发展带来了春天,日渐丰富的功能,完善的周边电路,更加人性化的操作也让出租车计价器技术日新月异,国出租车计价器的发展从传统的齿轮传动组成的机械式到用手摇式计算机代替部分机械元器件的半电子化出租车计价器5。出租车计价器的发展从未有过停止,各种新的解决方案也层出不穷。面对众多可选择的方案,出租车计价器计费是否能够公平公正准确的计费、是否能够让乘客信任是才是广大客户最关心的问题,而计价器营运数据是否方便管理,是否能够实现燃油附加费、税收的方便管理才是出租车司机最关注的6。在查阅了大量的资料和文献之后,本文最终筛选出了以下的两种较为简单易行又常见的方案: 方案一:采用单片机技术。单片机有着丰富的 I/ O端口,可实现基本的里程计价功能和价格调节、时钟显示功能。其原理如图2.1所示。图2.1单片机控制方案方案二:采用EDA技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块、计量模块、译码和动态扫描显示模块,其系统框图如图2.2所示:图2.2 FPGA控制方案通过比较以上两种方案,FPGA设计虽然也能满足要求,但是考虑到成本和扩展性上不如单片机,而且维修不方便,在中小规模生产的情况下没有明显的性价比。而相比来说单片机有较大的活动空间,利用单片机丰富的IO端口,与其控制的灵活性,不但能实现基本的里程计价功能和价格调节、时钟显示功能,而且能在很大的程度上扩展功能,还可以方便的对系统进行升级。为此采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求。2.2单片机系统总体设计本次设计我们利用单片机AT89S52芯片作为设计的核心,利用霍尔传感器测距,实现对出租车计价统计,采用AT24C02 实现在系统掉电的时候保存单价和系统时间等信息,显示采用8位LED数码管,分屏显示单价、路程、总金额以与时间.当出租车启动时,单片机检测到霍尔传感器的脉冲信号并进行里程计算。当无乘客时,单片机调用芯片DS1302程序和74LS138串口显示驱动程序,用LED进行时钟显示。当空车灯掰下乘客上车时:通过DS1302获取时间信息分辨白天/晚上,然后调用AT24C02程序获取白天、晚上的单价与起始价,便开始计价并显示时间、里程和金额等信息。当空车灯打上乘客下车时,等待出租车再次启动后单次金额与里程等信息清零复位,就此完成一次计价。总体框图如2.3:图2.3 总体设计框图2.3芯片简介根据任务书的功能要求和现在所具备的条件,本设计拟采用5个芯片,分别为: AT89S52、AT24C02、74LS138、DS1302、霍尔传感器A44E。2.3.1 AT89S52 本文所选用的AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案7。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片晶振与时钟电路。另外,AT89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止8。AT89S52引脚图如图2.4:图2.4单片机引脚图2.3.4 DS1302设计考虑到计价器的实用性,拟在没有乘客的情况想显示实时时钟,也是作为各个时段单价自动转换的标准。采用一个可靠的计时芯片是必不可少的。DS1302一种高性能、低功耗的实时时钟芯片,工作性能稳定可靠,采用SPI三线接口与CPU进行通信;并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天可以自动调整,并且具有闰年补偿功能。通过设DS1302的控制/状态寄存器选择日历,时钟方式经过初始校准后即可工作使用;工作电压宽达2.55.5V。可采用多电源供电9。如图2.5为DS1302的引脚功能图。图 2.5 DS1302 引脚功能图由于采用了备用电池供电,所以在汽车电源关闭的情况下,也能保持时钟的正常运行。DS1302由Vcc1或Vcc2中电压较高的一端供电。X1和X2是外接32.768kHz晶振的振荡源。RST是复位/片选线,通过把RST输入置高电平来启动所有的数据传送。RST有两种输入功能:第一,RST接通控制逻辑,允许将地址/命令序列输入到移位寄存器中;第二,RST提供了停止单字节和多字节数据的发送方法。当RST被置为高电平时,初始化所有的数据传送,允许操作DS1302。在传送过程中如果RST置为低电平,数据传送则会被立即停止,芯片的I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK则是输入端10。2.3.5 A44EA44E 属于开关型的霍尔器件,其工作电压围比较宽(4.518V),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高测频率可达到1MHZ。集成开关型霍尔传感器原理如图2.6所示。图2.6 集成开关型霍耳传感器原理图A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D 和OC 门输出E 五个基本部分组成11。在输入端输入电压VCC ,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差H V 输出,该H V 信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC 门输出。当施加的磁场达到工作点.(即OP B )时,触发器输出高电压(相对于地电位)使三极管导通,此时OC 门输出端输出低电压,通常称这种状态为“开”。当施加的磁场达到释放点(即rPB )时,触发器输出低电压,三极管截止,使OC 门输出高电压,这种状态为“关”。这样两次电压变换,使霍耳开关完成了一次开关动作12。2.3.6 AT24C02掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,芯片的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。其引脚功能:串行时钟信号引脚(SCL):在SCL输入时钟信号的上升沿将数据送入EEPROM器件,并在时钟的下降沿将数据读出。串行数据输入/输出引脚(SDA):SDA引脚可实现双向串行数据传输。该引脚为开漏输出,可与其它多个开漏输出器件或开集电极器件线或连接。器件/页地址脚(A2,A1,A0):A2、A1和A0引脚为24C01与24C02的硬件连接的器件地址输入引脚。24C01在一个总线上最多可寻址八个1K器件,24C02在一个总线上最多可寻址八个2K器件,A2、A1和A0部必须连接。24C04仅使用A2、A1作为硬件连接的器件地址输入引脚,在一个总线上最多可寻址四个4K器件。A0引脚部未连接。其电路如图2.7所示。图2.7 AT24C02引脚图由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片;当系统重新上电的时候,自动调用读存储器程序,将存储器的单价等信息,读到缓存单元中,供主程序使用13。AT24C02的存储容量为2Kb,容分成32页,每页8B,共256B,操作时有两种寻址方式:芯片寻址和片子地址寻址。(1)芯片寻址:AT24C02的芯片地址为1010,其地址控制字格式为1010A2A1A0R/W。其中A2,A1,A0可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。R/W为芯片读写控制位,该位为0,表示芯片进行写操作。(2)片子地址寻址:芯片寻址可对部256B中的任一个进行读/写操作,其寻址围为00FF,共256个寻址单位。2.3.7 74LS13874LS138芯片是常用的3-8线译码器,LS是TTL的 ,他的COMS版本叫74HC138。常用在单片机和数字电路的译码电路中。其封装如图2.9:图2.9 74LS138引脚图74LS138有3个附加控制端S1, S2和S3。当S1 =1,S2 + S3=0时,Gs输出为高电平,译码器处于工作状态。否则译码器被禁止,所有的输出端被锁存在高电平,如表2.1:表2.1 74LS138真值表三八译码器真值表输入端输出端A0A1A2Y0Y1Y2Y3Y4Y5Y6Y70001000000000101000000010001000000110001000010000001000101000001001100000001011100000001这三个控制端也被称为“片选”输入端,利用片选的作用可以将多片连接起来以扩展译码器的功能。3 硬件电路设计3.1 CPU模块该模块主要包括系统初始化、里程的识别和费率的计算与各种功能模块的的组织和管理等。主程序模块在系统中起着重要的作用。鉴于单片机的端口特性不同,拟将P0口、P2口作为数据输出口,接到数码管;P1用作存储器数据读写端口; P3口作为控制和霍尔传感器信号输入端口。最小系统如图3.1:图3.1 AT89S5最小系统模块由于单片机采用经过整流滤波之后的汽车用12V电源,外接的12M晶振来为单片机提供时钟源。由于计价器的工作环境比较差,它要求有抗振动、抗高低温、抗潮湿、抗电磁干扰等能力,特别是电源方面的干扰,如出租车启动时,发动机打火、电瓶充电等造成输入计价器的+12V电源不稳定。因此采用+12V电瓶电源经过滤波和电源稳压管理芯片7805后得到+ 5 V的稳定电压输出,保证整个系统能够正常工作,电路如图3.2所示。图3.2 电源电路3.2 路程测量部分里程测量是通过安装在车轮上的霍尔传感器A44E检测到的信号,由单片机处理之后显示到LED上的。其原理如图 3.3所示。图 3.3 A44E传感器工作原理图在霍尔电势发生器的两端加上电压VCC后,根据霍耳效应原理,当霍耳片处在磁场中时,霍尔传感器的输出端输出低电平。当车轮转动一圈时小磁铁提供一个磁场,则霍尔传感器输出一次低电平完成一次数据采集。车轮每转一圈,霍尔开关就检测并输出信号,引起单片机的中断,对脉计数。通过计算将脉冲增加体现在金额和里程上。出租车中从霍尔传感器中得到标准的脉冲信号送入单片机的P3.3引脚,利用单片机的T1的计数功能完成1000次的计数后产生一中断来完成路程的测量14。费用计算功能:费用计算包括两部分:起步费、行使费。(1) 起步费用白天6元晚上7元;(2) 行使费用1.6/公里;设车轮周长为1m,则霍尔传感器每产生1000个脉冲便表示车已行程1km。我们选择了P3.3口作为信号的输入端,部采用外部中断1,车轮每转一圈(我们设车轮的周长是1米),霍尔开关就检测并输出信号,引起单片机的中断,对脉计数,当计数达到1000次时,也就是1公里,单片机就控制将金额自动的增加,其计算公式:当前单价公里数=金额。3.3 数据显示部分设计要求有单价(2位)、总金额(4位)显示输出,时钟显示(包含时分秒的显示),若是采用 LCD液晶显示,则在光线较强时不能看清数据,也就不能满足要求。考虑到共阴数码管较为常见,因此我们采用8位LED数码管来显示。单片机的P0口不能输出高电平,因此需在P0口接8个上拉电阻,以满足数码管的工作条件。数码管显示电路如图3.4:图3.4 显示原理图3.5 时钟部分DS1302控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。采用双电源供电,在断电的情况下由干电池组供电,可维持芯片的正常工作15。电路如图3.5所示。图3.5 时钟芯片电路图3.6 掉电存储电路AT24C02采用的是I2C总线式串行器件。串行器件不仅占有很少的系统资源和I/O线,而且体积也大大缩小。在I2C总线上传送信息是的时钟同步信号是有挂接在SCL时钟线上的所有器件的逻辑与完成的。SCL线上有高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平。在数据传送过程中,必须确认数据传送的开始和结束。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号,起始状态应处于任何其他命令之前16;当SCL线处于高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。器件将处于备用方式(StandbyMODE).开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间,总线被认为是空闲的。I2C总线的数据传送格式是:在I2C总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)读写控制。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)确定17。在I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个应答位(ACK),ACK信号在第9个时钟周期时出现。每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时,(例如正在处理一个部中断,在这个中断处理完之前就不能接收I2C总线上的数据字节)可以使时钟SCL线保持低电平,从器件必须使SDA保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL线,主器件继续传送18。AT24C02连接如图3.6:图3.6 掉电存储单元3.7 按键部分电路按键部分采用一个拨动式按键和四个按钮式按键组成,按键一端连接单片机,另一端接地。当某一按键被按下时,对应的端口电平就被拉低。因此只需检测单片机个端口的电压是否为低电平,就能判断是哪个按键被按下。按键电路如图3.7所示:图3.7 按键控制单元3.8章节总结本章主要介绍出租车计价器的硬件电路设计,各个部分的电路已经列出。众所周知单片机的灵活性极大,因此硬件电路设计出来之后仍然可以根据具体需求更改软件部分的设计以实现新的功能。软件设计在单片系统的设计中占了很大的比重,本论文的软件设计将在下一章中详细介绍。4 系统软件设计4.1 主程序设计在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以与开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/ 清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的容,分别完成启动、清除、计程和计价等不同的操作。当空车信号灯打下时,表示有乘客上车,并启动计价,将根据里程寄存器中的容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价和起价来计算出当前的累计价格,并将结果存于价格寄存器中,然后将当前时间和累计价格送到LED 显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。司机把空车灯打上,就停止计价,显示当前所应该付的金额和对应的单价,等乘客下车后,启动出租车,计价器检测到传感器的脉冲信号,系统自动对显示清零,并重新进行初始化过程,完成1次计价。程序流程图如4.1:图4.1 主程序流程图4.2 里程计数中断服务程序每当霍尔传感器输出一个低电平信号就使单片机中断一次,里程计数器T1对里程脉冲计满1000次时,就完成当前行驶里程数的累加操作,并将结果存入里程寄存器中。其程序流程如图4.2 所示。图4.2 里程计数流程图4.3仿真结果比较了几种常见的电子集成仿真软件之后,本文选定了Proteus这一种常见的,便于仿真的软件来模拟设计结果。4.3.1仿真软件ProteusProteus软件是来自英国Labcenter electronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以与自动布线来实现一个完整的电子设计系统19。此系统受益于15年来的持续开发,被电子世界在其对PCB设计系统的比较文章中评为最好产品“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。4.3.2 Proteus 界面介绍Proteus ISIS的工作界面是一种标准的Windows界面,包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口8。如图4.4:图4.3 Proteus 窗口界面图4.3.3 Proteus 仿真结果仿真结果基本符合设计的目标:在空车的情况下,数码管显示为当前的时间。在按下空车灯的时候,数码管显示为当前的金额和单价。仿真效果如图4.5:图4.4 仿真结果图5 总 结由于使用的是AT89S52单片机作为核心的控制元件,灵敏的霍尔开关型器件A44E霍尔传感器,使本出租车计价器具有功能强、性能可靠、电路简单、成本低实用性强等特点。加上经过优化的程序,使其有很高的智能化水平。但是在我们设计和调试的过程中,也发现了一些问题,譬如计价的金额位数有限,实际的里程可能会很远,会超出我们的显示围。虽然AT89S52单片机抗干扰能力不如PLC,但是PLC价格较贵,不符合以经济为主的设计原则,虽然有上述种种的不足。但是用单片机运行效果仍然令人满意,同时也证明了本方案的正确性。本款出租车计价器的设计还不够人性化,比如本次设计按键方面还可以运用8279芯片控制,使其具有更高的控制运行功能。8279是专用键盘、显示控制芯片,能对显示器进行自动扫描;能识别键盘上键的符号;可充分提高CPU的工作效率。另外还可以加上语音的提示功能和自动打印票据功能等,这样以单片为核心设计的出租车计价器会更加有生命力,以符合当代社会的服务标准。总的来说,本系统工艺设计比较合理,控制方案选择恰当,硬件设计、软件设计都基本符合要求。参考文献1. 吴承琦,培生. 出租汽车计价器发展历程回顾、感悟与展望R.中国计量2008年03期 2. 培生等编著.出租汽车计价器M.中国计量3. N Flaherty.The 8-bit MCU is Dead, Long Live 8-bit MCU.Electronics world,2005,111: 18-304. 育才.单片微型计算机与其应用M.东南大学 5. 平川, 许兴广. 基于单片机电热水器模糊控制系统设计J.微计算机信息,2007, (32):145-1466. 群芳,士军,黄建单片微型计算机与接口技术M电子工业出版社,2008.5:97-101.7. 小虎,洁.基于单片机的出租车计价器编码传感器的设计J.自动化技术与应用,2005,24(10):1-38. 伟宏 肖卫初 邱飚.基于 Proteus 的多功能出租车计价器设计.工学院学报(自然科学版),2009,23(6) 9. 邱淑贤.霍尔式汽车车速传感器检测系统. 工业大学学报(科学版),2010,31(3)10. 徐莹 邹德君. 车速传感器采集信号处理电路的设计.省交通高等专科学校学报,2007,9(3)11. 阎石. 数字电子技术基础M. 高等教育,2006.5 中国新技术新产品,12. 宋青,权伟龙,齐新元.开关型霍尔传感器的原理与工程实现J.物理实验,200313. 余永权.ATMEL89系列单片机应用技术M.:航空航天大学出版社,200214. 凯,国庆.国平编著.MCS-51系列单片机系统原理与设计M.冶金工业,200315. 新民,王燕芳编著.微型计算机控制技术M.:电子工业,200316. 罗亚非.凌阳16位单片机应用基础M.: 航空航天大学出版社,200317. 赜.ARM嵌入式技术实践教程M .: 航空航天大学,200518. 小虎,洁.基于单片机的出租车计价器编码传感器的设计J.自动化技术与应用,2005,24(10):1-319. S.S. BEDAIR. A multichannel electronic digital taximeter that can dealwithmorethan one passenger simultaneously. Vehicular Technology Conference, 1987. 37:458 - 463 致为期两个月的毕业设计即将接近尾声,在席老师的亲切指导和同学的帮助下,此次设计才得以完成,在此向所有给予我此次毕业设计指导和帮助的老师和同学表示最诚挚的感。首先,向本设计的指导老师席燕辉老师表示最诚挚的意。在自己紧的工作中,仍然尽量抽出时间对我们进行指导,时刻关心我们的进展状况,督促我们抓紧学习。席老师给予的帮助贯串于设计的完全过程,从借阅参考资料到现场的实际操作,她都给予了指导,不仅使我学会运用书本中的知识,更学会了学习操作方法。也懂得了如何把握设计重点,如何合理安排时间和论文的编写,同时在毕业设计过程中,她和我们在一起共同解决了设备出现的各种问题。其次,要向给予此次毕业设计帮助的老师们,以与同学们以诚挚的意,在整个设计过程中,他们也给我很多帮助和无私的关怀,更重要的是为我们提供不少技术方面的资料,在此感他们,没有这些资料就不是一个完整的论文。另外,也向给予我帮助的所有同学表示感。总之,我的设计是老师和同学共同完成的结果,在设计的两个月里,我们合作的非常愉快,教会了我许多道理,是我人生的一笔财富,我再次向给予我帮助的席老师和同学表示感!附录A 系统总原理图附录B 各部分程序显示部分子函数:#include #include sbit LS138A = P22;sbit LS138B = P23;sbit LS138C = P24;unsigned char LedVal=1,2,10,2,6,10,3,5;void delay(unsigned int i) char j; for(i; i 0; i-) for(j = 200; j 0; j-);void display()unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;unsigned int i; while(1)for( i=0; i8; i+) P0=Disp_TabLedVali; switch(i) case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break;case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break; delay(150);P0=0; main()display();AT24C02的I2C总线操作:#include #define uchar unsigned char sbit sda=P14; sbit scl=P13; uchar a; void delay()/延时函数 ; void start() /开始信号 sda=1; delay(); scl=1; delay(); sda=0; delay(); void stop() /停止 sda=0; delay(); scl=1; delay(); sda=1; delay(); void respons() /应答,在数据传送8位后,等待或者发送一个应答信号 uchar i; scl=1; delay(); while(sda=1)&(i250)i+; scl=0; delay(); void init()/初始化函数,拉高sda和scl两条总线 sda=1; scl=1; void write_byte(uchar date)/写一字节,将date写入AT24C02中 uchar i; scl=0; for(i=0;i8;i+) date=date1; sda=CY; /将要送入数据送入sda scl=1; /scl拉高准备写数据 delay(); scl=0; /scl拉低数据写完毕 delay(); uchar read_byte()/读取一字节,从AT24C02中读取一个字节 uchar i,k; for(i=0;i8;i+) scl=1; /scl拉高准备读数据 delay(); k=(k0;a-) for(b=100;b0;b-); void write_add(uchar address,uchar date)/向AT24C02中写数据 start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); uchar read_add(uchar address)/从AT24C02中读出数据 uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; void main() init();/初始化AT24C02 write_add(23,0x55);/在23地址处写入数据0x55; delay1(100); P1=read_add(23);/读出地址为23处的数据 while(1); DS1302时钟部分程序:#include#include sbit SCK=P12;/时钟sbit SDA=P11;/数据sbit RST = P10;/ DS1302复位sbit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24; bit ReadRTC_Flag;/定义读DS1302标志unsigned char l_tmpdate7=0,0,12,15,5,3,8;/秒分时日月周年08-05-15 12:00:00unsigned char l_tmpdisplay8;code unsigned char write rtc address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c;code unsigned char read rtc address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; code unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat );unsigned char Read_Ds1302 ( unsigned char address );void Read_RTC(void);/read RTC void Set_RTC(void); /set RTC void InitTIMER0(void);/inital timer0void main(void) InitTIMER0(); /初始化定时器0
展开阅读全文