出租车计价器课程设计方案_第1页
出租车计价器课程设计方案_第2页
出租车计价器课程设计方案_第3页
出租车计价器课程设计方案_第4页
出租车计价器课程设计方案_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

--河南理工大学《单片机应用与仿真训练》设计报告出租车计价器姓名:学号:专业班级:电气09指导老师:所在学院:电气工程与自动化学院2012年5月10日ﻬ摘要本设计是以AT89S52单片机为核心,以A44E霍尔传感器为信号采集传感器,采用AT24C02作为存储芯片,加上各种外围电路构成的出租车计价器。本设计采用霍尔传感器对轮胎转数进行计数,并将采集到的脉冲信号传输给单片机,单片机通过内部定时器对一定时间内的转动圈数进行一次统计,经计算实现对出租车速度、里程、应付金额等状态信息的测量。本设计采用了寄存器芯片AT24C02,实现系统对单价、里程、等待时间等信息的存储,采用时钟芯片DS1302在正常及掉电的时候来显示时间和在系统需要时进行计时。本设计设置5个按键为输入控制方式,分别控制查询、功能、单双成切换、暂停(结账)以及清零,输出显示采用了两个4段数码管实现对时间、金额、里程的显示,设置了四个LED灯,分别为空车指示灯、等待查询指示灯、单双程指示灯。关键词ﻩﻩ单片机ﻩﻩ霍尔传感器ﻩﻩ出租车计价器ﻩﻩ时钟AbstractThisdesignuseAT89S52SCMasthecore,withU18Hallsensorsforsignalacquisitionsensor,tirerotationtocount,SCMcalculationforataxispeed,processingrealizessuchstatusinformationmeasurementmileage.ThisdesignusedaregisterAT24C02chip,andrealizethesysteminunitprice,mileage,waitingtimeinformationstorage,theclockDS1302chipinnormalandpowerlosttimetodisplaythetimeandinthesystemneedstobecarriedoutwhenthetimer。Thedesignfortheinputcontrolbuttonstoway,outputshowstwoofthefourperiodsofdigitalnixietube,lamp,andwaitingforinquiresemptycarlamp,one—waylampsway。Keywords AT89S52SCMﻩHallsensorsﻩTaximeterﻩClockﻬ目录TOC\o”1-3"\h\z\uHYPERLINK\l”_Toc325837636"摘要 PAGEREF_Toc325837636\h1HYPERLINK1ﻩ概述 PAGEREF_Toc325837638\h3HYPERLINK\l"_Toc325837639”1.1设计目的、意义ﻩPAGEREF_Toc325837639\h3HYPERLINK2 系统总体方案设计ﻩ325837641\h4HYPERLINK\l"_Toc325837642”2.1设计要求 PAGEREF_Toc325837642\h4HYPERLINK\l"_Toc325837643”2.1.1基本要求ﻩPAGEREF_Toc325837643\h4HYPERLINK\l"_Toc325837644”2.1.2发挥部分ﻩPAGEREF_Toc325837644\h5HYPERLINK\l”_Toc325837645”2.2设计的主要功能 PAGEREF_Toc325837645\h5HYPERLINK\l"_Toc325837646”2.3方案的选取 PAGEREF_Toc325837646\h5HYPERLINK2。3.1硬件设计方案ﻩPAGEREF_Toc325837647\h5HYPERLINK\l"_Toc325837648"2.3.2软件设计方案ﻩPAGEREF_Toc325837648\h6HYPERLINK\l"_Toc325837649"3 硬件设计ﻩPAGEREF_Toc325837649\h6HYPERLINK\l"_Toc325837650"3。1AT89S52单片机及最小系统ﻩPAGEREF_Toc325837650\h6HYPERLINK\l"_Toc325837651"3.1.1AT89S52单片机ﻩPAGEREF_Toc325837651\h6HYPERLINK3.1.2单片机最小系统ﻩPAGEREF_Toc325837652\h8HYPERLINK\l"_Toc325837653”3.2测距单元 PAGEREF_Toc325837653\h8HYPERLINK\l"_Toc325837654”3.3按键单元ﻩPAGEREF_Toc325837654\h10HYPERLINK3。5显示单元 PAGEREF_Toc325837656\h11HYPERLINK\l"_Toc325837657”3.6储存单元ﻩPAGEREF_Toc325837657\h14HYPERLINK\l”_Toc325837658”4ﻩ软件设计 PAGEREF_Toc325837658\h15HYPERLINK\l"_Toc325837659"4.1系统主程序ﻩPAGEREF_Toc325837659\h15HYPERLINK\l”_Toc325837660"4.2数据处理子程序ﻩ837660\h15HYPERLINK\l"_Toc325837661"4.3等待时间计时子程序 PAGEREF_Toc325837661\h16HYPERLINK\l”_Toc325837662”4.4键盘扫描子程序ﻩPAGEREF_Toc325837662\h17HYPERLINK\l”_Toc325837663"5ﻩProteus软件仿真 PAGEREF_Toc325837663\h18HYPERLINK\l”_Toc325837664”6ﻩ课程设计体会ﻩPAGEREF_Toc325837664\h19HYPERLINK\l"_Toc325837665"参考文献 PAGEREF_Toc325837665\h20HYPERLINK\l"_Toc325837666"附1:源程序代码ﻩPAGEREF_Toc325837666\h20HYPERLINK\l"_Toc325837667”附2:系统原理图ﻩPAGEREF_Toc325837667\h0概述1.1设计目的、意义随着经济的不断发展,人们的收入得到很大提高。人们便越来越追求生活的舒适与方便,而出行方式便是关切到人们生活质量的一个重要方面。在物价上涨的今天,相对于自己购买私家车,更多的人倾向于乘坐出租车出行。虽然现在有部分小城市尚未普及出租车,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展。汽车计价器作为乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的.因此,汽车计价器的研究也是十分有一个应用价值的.本次设计的目的在于现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试.而采用单片机进行的设计,相对来说功能强大,是深化单片机应用的良好途径,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。1。2AT89S52单片机功能简介计算机系统已明显地朝巨型化、单片化、网络化三个方向发展.巨型化发展的目的在于不断提高计算机的运算速度和处理能力,以解决复杂系统计算和高速数据处理,比如系统仿真和模拟、实时运算和处理。单片化是把计算机系统尽可能集成在一块半导体芯片上,其目的在于计算机微型化和提高系统的可靠性,这种单片计算简称单片机.单片机的内部硬件结构和指令系统主要是针对自动控制应用而设计的,所以单片机又称微控制器MCU(MicroControllerUnit)。用它可以很容易地将计算机嵌入到各种仪器和现场控制设备中,因此单片机又叫做嵌入式微控制器(EmbeddedMCU).单片机自20世纪70年代问世以来,以其鲜明的特点得到迅猛发展,已广泛应用于家用电器、智能玩具、智能仪器仪表、工业控制、航空航天等领域,经过30多年的发展,性能不断提高,品种不断丰富,已经形成自动控制的一支中坚力量。据统计,我国的单片机年容量已达1~3亿片,且每年以大约16%的速度增长,但相对于国际市场我国的占有率还不到1%.这说明单片机应用在我国有着广阔的前景。对于从事自动控制的技术人员来讲,掌握单片机原理及其应用已经成为必不可少的学习任务.单片机的应用十分广泛,在工业控制领域、家电产品、智能化仪器仪表、计算机外部设备,特别是机电一体化产品中,都有重要的用途。其主要的用途可以分为以下方面。显示:通过单片机控制发光二极管或是液晶,显示特定的图形和字符.机电控制:用单片机控制机电产品做定时或定向的动作。检测:通过单片机和传感器的联合使用,用来检测产品或者工况的意外发生。通信:通过RS-232串行通信或者是USB通信,传输数据和信号.科学计算:用来实现简单的算法。那么单片机是不是解决上述应用的唯一选择呢?淡然不是!目前,在自动控制中,一般有三种选择,分别是嵌入式微机、DSP和单片机。单片机最明显的优点是价格便宜,从几元人民币到几十元人民币。这是因为这类芯片的生产量很大,技术也很成熟。其次,单片机的体积也远小于其他两种方案。单片机本身一般用40引脚封装,当然功能多一些的单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只有8只引脚.当然,单片机无论在速度还是容量方面都小于其他两种方案,但是在实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能。例如,控制电冰箱的控制器就不需要使用嵌入式系统,用一片51就可以轻松实现.所以应用的关键是看能否够用,是否有很好的性能价格比.51系列的单片机已经面世十多年,依然没有被淘汰,还在不断发展中,这就说明是他有广阔的应用前景.系统总体方案设计2。1设计要求2.1。1基本要求(1)能显示里程,单位为公里,最后一位为小数位.(2)能显示金额数,单位为元,最后一位为小数位.(3)可设定单程价格和往返价格,单程价格为2元/公里,往返价格为1.5元/公里.(4)车速〈5公里/小时的时间累积为总等待时间,每5分钟等待时间相当于里程数增加1公里。(5)起步公里数为3公里,价格为5元,若实际距离大于3公里,按规则3计算价格。(6)按暂停键,计价器可暂停计价,按查询键,可显示总等待时间.2.1。2发挥部分(1)增加了空车指示功能,当无客人时,按下功能切换按键,空车指示灯亮.(2)增加实时时间显示,无论计价器工作或者空车,都能显示实时时间,便于时间提醒。(3)增加信息储存功能。可以储存等待时间,里程和金额。2.2设计的主要功能本设计所设计的出租车数字计价器的主要功能有:金额输出、路程输出、数据复位、计时计价、空车显示等.输出采用2个4位8段共阳数码管,车辆行走时前4位显示路程,后4位显示金额。车辆候车时,前4位显示等待时间,后4位显示等待金额。空车时显示实时时间。储存等待时间,里程和金额.2.3方案的选取本设计是由软件设计和硬件设计两部分组成的。软件设计要进行程序的编写和软件仿真;硬件设计要设计电路、硬件仿真和制作电路板。2.3。1硬件设计方案本系统的硬件设计主要包括单片机AT89S52、数据显示部件、U18霍尔传感器电路、里程计算及计价单元的设计.在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。计价器的单片机系统框图如图1所示.它由以下几个部件组成:霍尔传感器单元、AT89C52单片机、金额显示、里程显示、电源.利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程和价格的计算及显示功能.图1计价器系统框图2.3.2软件设计方案本设计程序的采取C语言进行编写,使用KeiluVision4编译和Proteus7.4a仿真软件进行仿真调试.其中的里程计算和费用计算方案如下.1、里程计算(1)霍尔传感器对车轮进行信号检测,产生并输出脉冲信号到单片机;(2)单片机对传感器输出的脉冲信号进行计数,并进行km计算:每一个信号代表轮胎旋转一周,设轮胎的周长为1.57m;每km产生的信号数为N,里程显示为N×1。57m=1.57N(km)2、费用计算(1)出租车的起步费为5元,并且3km内不需额外计价;(2)出租车行驶3km后,单程2元/km,双程1。5元/km。(3)等待收费的标准为5分钟算一公里;(4)暂停时计价器暂停计价,不收费用。硬件设计本设计的硬件设计包括单片机AT89S52单元、测距单元、显示单元(数码管显示金额、等待时间和里程,指示灯对单双程切换指示、空车指示、等待计时指示)、按键单元、时钟单元和储存单元。3.1AT89S52单片机及最小系统3。1.1AT89S52单片机AT89S52具有如下特点:40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(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使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。图2AT89S52引脚图图3AT89S52封装图设计中用到的单片机各管脚(图2)功能以及与其他模块连接介绍如下:VCC:接+5V电源。VSS:接地。时钟引脚:XTAL1和XTAL2两端接晶振和30PF的电容,构成时钟电路。它可以使单片机稳定可靠的运行.RST:复位信号输入端,高电平有效。当在此引脚加两个机器周期的高电平时,就可以完成复位操作。P1.0:接功能按键。P1。1:接切换键,表示单双程切换.P1。2:接查询(上次金额)键.P1。3:接清零键。P1.4:接空车指示灯.P1.5:接查询指示灯。P1.6:接开始计时指示灯.P1。7:接双程指示灯。P3.0:接查询/确认键。P0口接数码管段选端,P2口接数码管位选段。P3.2:接霍尔传感器的输出口。P3.3:接存储器的SCL口.P3.4:接储存器的SDA口.P3.5:接时钟电路DS1302的RST口.P3。6:接DS1302的SCLK口。P3。7:接DS1302的I/O口。3.1。2单片机最小系统复位电路和晶振电路是AT89S52工作所需的最简外围电路。单片机最小系统电路图如图4所示。

图4单片机最小系统AT89S52的复位端是一个史密特触发输入,高电平有效。RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M晶振和两个30pF电容组成系统的内部时钟电路.3.2测距单元本次设计我们选取了霍尔传感器来进行里程测量。霍尔器件是一种磁传感器。用它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用.霍尔器件以霍尔效应为其工作基础.霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高,耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀.霍尔器件分为:霍尔元件和霍尔集成电路两大类,前者是一个简单的霍尔片,使用时常常需要将获得的霍尔电压进行放大.后者将霍尔片和它的信号处理电路集成在同一个芯片上.本次设计选取了霍尔集成电路来测量里程。里程测量是通过将霍尔传感器的集成电路安装在车轮上方的铁板上,将磁铁安装在车轮上,旋转的车轮将磁铁对准集成电路时,霍尔传感器会输出一个脉冲信号,送到单片机,经过单片机的计算处理,将行驶的里程送到显示单元并显示出来。其原理示意图如下:图5传感器测距示意图A44E是一种利用霍尔效应做成的半导体集成电路器件,它被设计在交变磁场中运行,特别是能在低电源电压和长时间运行温度范围可达到125℃。这种霍尔IC可用作各种类型的传感器(速度传感器、位移传感器、转速传感器等等),接触开关以及相类似的应用场合。其工作电压比较宽(2.5~20V),可运行在较大的温度范围内(-20℃~125℃),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ.霍尔传感器的特性如图6所示,其中BOP为工作点“开”的磁感应强度,BRP为释放点“关"的磁感应强度。当外加的磁感应强度超过动作点BOP时,传感器输出低电平,当磁感应强度降到动作点BOP以下时,传感器输出电平不变,一直要降到释放点BRP时,传感器才由低电平跃变为高电平.BOP与BRP之间的滞后使开关动作更为可靠.U18集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。在输入端输入电压VCC,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点(即Bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作。图6A44E霍尔传感器和其输出特性A44E霍尔传感器有3个外接口,2个是电源的正负极接口,最后一个是脉冲信号输出口,只要将霍尔传感器的信号输出端接到单片机的端口上便可以实现距离检测。其中,单片机的P3。2(INT0)引脚作为信号的输入端,采用外部中断0进行计数。车轮每转一圈,霍尔传感器就产生一个脉冲信号,根据霍尔效应原理,当霍尔片处在磁场中时,霍尔传感器的输出端输出低电平。当车轮转动一圈时小磁铁提供一个磁场,则霍尔传感器输出一次低电平完成一次数据采集,从而产生信号。霍尔传感器检测并输出信号到单片机的INT0或INT1计算脉冲输入端,引起单片机的中断,对脉冲计数,当计数达到特定的次数时,里程就会增加,单片机对里程进行计算后,通过接口电路将计算好的结果传送到数码管并显示出来。3.3按键单元本设计的按键单元电路(如图7)有5个按键,功能分别是:S1是空车时查询上次金额和里程以及等待时间,结账时查询本次金额和里程以及等待时间;S2功能键,不按时空车指示灯亮而且数码管显示实时时间,按下时可设置单双程,此时再按S3可进行单程和双程之间切换,再按S1可确认单双程,双程时双程指示灯亮并开始计价;按下S4可对本次金额、里程以及等待时间进行查询;S5为清零键,按下时清零之前数据消除以及存储本次信息。图7按键单元电路3。4时钟单元本设计采用基于DS1302的时钟电路(如图8)对时间进行实时显示,单片机掉电对其没有影响。用数码管表现出来,当出租车空车时就显示时间,给人时间提示。图8时钟电路单元3.5显示单元本设计显示单元包括两部分:数码管显示(图11)和二极管指示显示(图12)。数码管显示部分使用两个四位一体的LED数码管,LED显示器是由LED发光二极管发展过来的一种显示器件,是发光二极管的改型。LED是发光二极管的简称,是一种将电能转换成光能的设备.本身也是一种光源。LED显示器是由发光二极管排列组成的显示器件.它采用低电压扫描驱动,具有:耗电少、使用寿命长、成本低、故障少、视角大、可视距离远等特点。此外,它的响应时间短(一般不超过0.1us),亮度也比较高。它的缺点是工作电流比较大,每一段的工作电流在10mA左右。其中每位数码管是由8个发光二极管演变而来,其中7个发光二极管构成7笔字形,另一个构成小数点,称为8段LED。8段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示0~9等10个数字和小数点,使用非常广泛,它的外观如图9所示:图98段数码管这类数码管可以分为共阳极(8个发光二极管的阳极接在—起)与共阴极(8个发光二极管阴极连在一起)两种,共阳极就是把所有LED的阳极连接到共同接点,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如图10所示.图10共阳和共阴数码管结构通过控制这个公共端,可使该位亮或暗。如共阴极端接地或共阳极接高电平,则该位显示器有效,反之无效。本设计采用共阴LED数码管.数码管有静态显示和动态显示两种,这里采用动态显示。它具有低功耗、接口少等特点。如图11两个四位一体数码管接P0口作为段选,接P2口作为位选.空车时显示时间,开始计价时前四位显示路程,后四位显示价钱。当查询等待时间时显示为等待时间.图11显示单元(数码管显示部分)二极管指示部分包括空车指示灯、等待时间查询指示、开始计时指示和双程指示如图12.这些指示灯能对出租车的每一种状态进行指示,空车时空车指示灯亮,查询等待时间时等待时间查询指示灯亮,当汽车速度小于5km/h时开始计时,计时指示灯亮。计价前如果按下双程键双程指示灯亮,表示为双程。图12显示单元(二极管指示部分)3.6储存单元存储单元的作用是储存上一次的里程、金额和等待时间.AT24C02是Atmel公司的1KB的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2。5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。图13储存单元电路图中R3、R4是上拉电阻,其作用是减少AT24C02的静态功耗。由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(时钟脉冲)和SDA(数据/地址)与单片机P3.3和P3。4口连接,进行传送数据。软件设计本系统的软件设计主要分为系统主程序、数据处理子程序、等待时间及时子程序和键盘扫描子程序五个模块,下面对每一块进行介绍。4。1系统主程序本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。在main函数编写开始,要进行初始化,包括对系统初始化和对硬件设备进行初始化,并使硬件处于就绪状态。在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。系统流程图如下图14.图14系统主程序流程图4。2数据处理子程序每当霍尔传感器输出一个低电平信号就使单片机中断一次,在计数中断服务程序,里程和金额都相应变化,当然等待时间也换算成里程(当速度小于5km/h时5分钟想当于1公里)。计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:金额=(里程—3)*单价+5;否则,执行公式:总金额=起步价。程序流程图如图15所示。图15数据处理子程序流程图4.3等待时间计时子程序当出租车的速度5km/h时等待时间开始计时,并被换算里程,进行计算显示等待时间和金额。当结算时停止计时和计费并显示金额,当有查询键按下时显示等待时间,当有清零键按下时存储本次金额。如图16:图16等待时间计时子程序4。4键盘扫描子程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。流程图如图17。图17键盘扫描子程序Proteus软件仿真本设计需要用KeiluVision4对C51程序进行编译,生成“.hex"文件,如图18:图18KeiluVision4编译在Proteus软件中画出仿真电路(如图19),把KeiluVision4编译后生成的“。hex"导入到单片机中,按“运行仿真"键进行仿真.图19Proteus仿真课程设计体会在本次单片机课程设计中,经过讨论,我们选择的设计内容是以AT89S52芯片为核心的出租车计价器,计价器的功能是以按键为输入控制方式,实现对汽车运行过程中状态信息的测量,主要包括等待时间、金额和里程等,并实现对这些信息进行存储及显示处理等功能。在完成整个课程设计的过程中,我们遇到了许多困难,但在解决困难的同时,我们也收获了许多,现在就将在整个课程设计过程中的几点收获与体会总结如下:1、巩固了单片机使用、C语言编程等专业知识由于单片机课程是在上学期修的,之后的这段时间也没有使用单片机实际的做一些设计,很多单片机的知识以及C语言的编程方法已经不是能很熟练的应用。因此,选题后我们便开始复习单片机方面的知识,同时也通过各种方式查阅、搜索了很多相关资料。从总体设计与具体设计,从电路焊接到调试完成,在整个过程中,我们学会了基本的单片机开发技能。2、熟悉了Proteus、KeiluVision4、word2010、viso2010等软件的操作从开始设计到最终完成设计,我们使用了仿真软件Proteus和编程软件KeiluVision4对电路及程序进行调试。由于不熟练,开始时各种问题层出不穷,有时一个小问题便让我们困惑半天,我们查阅相关资料,请教他人最终才得以解决。通过编写程序,我们深刻意识到采用模块化的设计思想的重要性,它方便编写、修改与调试,另外加上必要的注释,便于交流与理解。通过后期的文档整理,我们熟悉了为我们对word2010、viso2010办公室软件的操作,为我们今后的工作学习打下了良好基础。3、锻炼了团队协作能力在整个设计的过程中,我们两人通力合作。本着以学习知识为重,完成课程设计内容次之的原则,先是一人做硬件设计,一人做软件设计.在对各自分工的内容有了较深的了解之后,我们便互相交流,将对各自所负责内容的理解与遇到的问题告诉对方,然后共同寻找问题的解决方法。在对方遇到困难时,我们互相鼓励,互相帮助,培养了对他人的耐心尊重与关怀。本次设计我们学习到不少专业内外的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题.所焊实物尚有许多不足,个别功能还不能很好的实现,主要原因是考虑问题不周全,电路设计经验少,实际动手能力不足.恳请各位老师批评指正,以使我们在以后的学习和实践中加以改进和提高。参考文献戴佳,陈斌,苗龙。51单片机应用系统开发典型实例.中国电力出版社,2005余发山,王福忠.单片机原理及应用技术.中国矿业大学出版社,2008.6侯玉宝,陈忠平,李成群.基于Proteus的51系列单片机设计与仿真.电子工业出版社,2008李玉梅。基于MCS-51系列单片机原理的应用设计.国防工业出版社,2006边春元,李文涛,江杰。C51单片机典型模块设计与应用.机械工业出版社,2008楼然苗,胡佳文,李光飞等.单片机实验与课程设计.浙江大学出版社,2010。10段晨东。单片机实用技术教程.清华大学出版社,2008王晓明.单片机接口技术.北京航空航天大学出版社,2007王晓敏.传感器检测技术及应用.北京大学出版社,2010吴红星.电机驱动与控制专用集成电路及应用.中国电力出版社,2006附1:源程序代码#include〈reg52.h>#include〈intrins.h>#defineuintunsignedint#defineucharunsignedchar#defineDanJia_DanCheng20#defineDanJia_WangFan15#defineLunJing5/*车轮直径0.5m*/#defineLunChang1。57//m3.14*0.5/*************************状态码定义**************************/#defineKongChe_flag0#defineJinEr_LiCheng_flag1#defineShiJian_flag2#defineDanJia_flag3/*************************************ds1302地址定义*****************************************/#defineWRITE_SECONDﻩ0x80#defineWRITE_MINUTEﻩﻩ0x82#defineWRITE_HOUR0x84#defineREAD_SECONDﻩ0x81#defineREAD_MINUTE0x83#defineREAD_HOURﻩ0x85#defineWRITE_PROTECT 0x8E/***************************************AT24C02*****************************************/#defineﻩOP_READﻩ0xa1ﻩﻩ//器件地址以及读取操作#define OP_WRITE0xa0ﻩﻩ//器件地址以及写入操作/****************************引脚定义*********************************/sbitFunction_Key=P1^0;sbitQieHuan_Key=P1^1;sbitZanTing_Key=P1^2;sbitClear_Key=P1^3;sbitChaXun_QueRen_Key=P3^0;sbitKongChe_Led=P1^4;sbitChaXun_Led=P1^5;sbitJiShi_Led=P1^6;sbitDanShuang_Led=P1^7;//位寻址寄存器定义sbitACC_7=ACC^7;sbitSCLK=P3^6;//DS1302时钟信号7脚sbitDIO=P3^7;//DS1302数据信号6脚sbitCE=P3^5;//DS1302片选5脚sbitSDA=P3^4;sbitSCL=P3^3;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};ﻩuchardatadis1[]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};//时分秒显示缓冲区uchardatachuzhi[]={0x00,0x00,0x00};//时分秒初值uchardatatime1302[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};uintdataCount=0;uintdataCount1=0,Count2=0;uchardataDanJia=DanJia_DanCheng;//默认单程价格uintdataLiCheng=0;uintdataJinEr=0;uchardataSecond;uintdataMinute;uintdataSpeed=0;uintdataOld_Count,New_Count;uchari=0,j=0,k=0,n=0;uintdata_temp[];bitKaiShiFlag=0;bitJiShiFlag=0;bitChaXunFlag=0;uintZanTingFlag=0;bitJinErFlag=0;voidstart();voidstop();unsignedcharshin();bitshout(ucharwrite_data);unsignedcharread_random(ucharrandom_addr);voidwrite_byte(ucharaddr,ucharwrite_data);voiddelayms(ucharms);voiddata_process();voidfill_byte(ucharfill_data,ucharn);voiddelay(uintx){ﻩuinty;ﻩwhile(x--)ﻩﻩfor(y=110;y>0;y——);}/************************************at24c02程序***************************************/voidstart()//开始位{ﻩSDA=1; SCL=1;ﻩ_nop_();ﻩ_nop_();ﻩSDA=0;ﻩ_nop_();ﻩ_nop_();ﻩ_nop_(); _nop_(); SCL=0;}voidstop()//停止位{ﻩSDA=0;ﻩ_nop_();ﻩ_nop_();ﻩSCL=1;ﻩ_nop_();ﻩ_nop_();ﻩ_nop_(); _nop_(); SDA=1;}ucharshin()//从AT24Cxx移入数据到MCU{ unsignedchari,read_data; for(i=0;i〈8;i++)ﻩ{ﻩﻩSCL=1;ﻩﻩread_data<<=1;ﻩﻩread_data|=(unsignedchar)SDA;ﻩﻩSCL=0;ﻩ}ﻩreturn(read_data);}bitshout(unsignedcharwrite_data)//从MCU移出数据到AT24Cxx{ﻩunsignedchari;ﻩbitack_bit;ﻩfor(i=0;i〈8;i++) ﻩ//循环移入8个位ﻩ{ﻩﻩSDA=(bit)(write_data&0x80);ﻩﻩ_nop_(); ﻩSCL=1; ﻩ_nop_();ﻩﻩ_nop_();ﻩ SCL=0;ﻩﻩwrite_data<〈=1;ﻩ}ﻩSDA=1;ﻩ ﻩ//读取应答ﻩ_nop_();ﻩ_nop_();ﻩSCL=1;ﻩ_nop_();ﻩ_nop_();ﻩ_nop_();ﻩ_nop_();ﻩack_bit=SDA;ﻩSCL=0;ﻩreturnack_bit; ﻩ //返回AT24Cxx应答位}voidwrite_byte(ucharaddr,ucharwrite_data)//在指定地址addr处写入数据write_data{ﻩstart();ﻩshout(OP_WRITE);ﻩshout(addr); shout(write_data);ﻩstop();ﻩdelayms(10);ﻩﻩ//写入周期}ucharread_current()//在当前地址读取{ﻩucharread_data;ﻩstart(); shout(OP_READ); read_data=shin(); stop(); returnread_data;}ucharread_random(unsignedcharrandom_addr)//在指定地址读取{ﻩstart(); shout(OP_WRITE);ﻩshout(random_addr); return(read_current());}voidfill_byte(ucharfill_data,ucharn)ﻩ//填充数据fill_data到EEPROM内{uchari;ﻩfor(i=0;i〈n;i++)ﻩ{ﻩﻩwrite_byte(i,fill_data);ﻩ}}voiddelayms(ucharms){ﻩunsignedchari; while(ms--)ﻩ{ﻩ for(i=0;i<120;i++);ﻩﻩ}}/*************************************数码管显示程序*******************************************/voidseg_show(ucharw,uchardat,uchardp){if(w==dp)ﻩ{ﻩﻩP2=wei[w];ﻩP0=table[dat]|0x80;ﻩdelay(1);ﻩ}ﻩelseﻩ{ P2=wei[w];ﻩP0=table[dat];ﻩdelay(1); ﻩ}}voidshow_nint(ucharw,uintdat,ucharn,uchardp)//显示w位:从w位显示;dat:显示数据;//n:要显示数据的位数;dp:小数点显示位;最多五位数字显示{ﻩif(n==1)ﻩ{ ﻩseg_show(w,dat,dp);ﻩﻩ}ﻩif(n==2)ﻩ{ seg_show(w,dat/10,dp);ﻩseg_show((w+1),dat%10,dp);ﻩﻩ}ﻩif(n==3)ﻩ{ﻩﻩseg_show(w,dat/100,dp);ﻩﻩ ﻩﻩseg_show((w+1),dat/10%10,dp);ﻩ seg_show((w+2),dat%10,dp); ﻩ}ﻩif(n==4) { ﻩseg_show(w,dat/1000,dp);ﻩﻩseg_show(w+1,dat/100%10,dp); ﻩseg_show(w+2,dat/10%10,dp);ﻩ seg_show(w+3,dat%10,dp); ﻩ}ﻩif(n==5)ﻩ{ seg_show(w,dat/10000,dp);ﻩﻩseg_show(w+1,dat/1000%10,dp);ﻩ seg_show(w+2,dat/100%10,dp);ﻩﻩseg_show(w+3,dat/10%10,dp);ﻩ seg_show(w+4,dat%10,dp); ﻩ}ﻩﻩ}/***************************ds1302时钟程序***************************///地址、数据发送子程序/*voidWrite1302(unsignedcharaddr,dat){ﻩunsignedchari,temp;ﻩCE=0;//CE引脚为低,数据传送中止ﻩSCLK=0;//清零时钟总线ﻩCE=1;//CE引脚为高,逻辑控制有效ﻩ//发送地址ﻩfor(i=8;i〉0;i--)//循环8次移位 {ﻩﻩSCLK=0;ﻩ temp=addr; ﻩDIO=(bit)(temp&0x01);//每次传输低字节 addr〉>=1;//右移一位ﻩﻩSCLK=1;ﻩ}ﻩ//发送数据ﻩfor(i=8;i>0;i-—) {ﻩSCLK=0;ﻩtemp=dat;ﻩDIO=(bit)(temp&0x01); dat>〉=1;ﻩSCLK=1;ﻩ}ﻩSCLK=1; CE=0;} *///数据读取子程序unsignedcharRead1302(unsignedcharaddr){unsignedchari,temp,dat1,dat2;CE=0;SCLK=0;CE=1;//发送地址for(i=8;i>0;i--)//循环8次移位{SCLK=0;temp=addr;DIO=(bit)(temp&0x01);//每次传输低字节addr〉>=1;//右移一位SCLK=1;}//读取数据for(i=8;i〉0;i--){ACC_7=DIO;SCLK=1;ACC〉>=1;SCLK=0;}ﻩﻩSCLK=1;CE=0;dat1=ACC;dat2=dat1/16;//数据进制转换dat1=dat1%16;//十六进制转十进制dat1=dat1+dat2*10;return(dat1);}//初始化DS1302(选择性使用)/*voidinit1302(uchars,ucharm,ucharh,uchard,ucharmon,uchary){ﻩWrite1302(WRITE_PROTECT,0X00);//禁止写保护ﻩWrite1302(WRITE_SECOND,s);//秒位初始化 Write1302(WRITE_MINUTE,m);//分钟初始化ﻩWrite1302(WRITE_HOUR,h);//小时初始化ﻩ//Write1302(0x80,0x80);//时钟暂停ﻩWrite1302(0x86,d);ﻩﻩ//日初始化ﻩWrite1302(0x88,mon);ﻩﻩ//月初始化 Write1302(0x8c,y);ﻩﻩ//年初始化ﻩWrite1302(WRITE_PROTECT,0x80);//允许写保护}ﻩﻩ */voidshow_time(){ chuzhi[2]=Read1302(0x81); chuzhi[1]=Read1302(0x83);ﻩﻩchuzhi[0]=Read1302(0x85); ﻩdis1[7]=chuzhi[2]%10; dis1[6]=chuzhi[2]/10;ﻩdis1[4]=chuzhi[1]%10;ﻩdis1[3]=chuzhi[1]/10;ﻩdis1[1]=chuzhi[0]%10; dis1[0]=chuzhi[0]/10;ﻩﻩseg_show(7,dis1[7],9);delay(1);ﻩseg_show(6,dis1[6],9);delay(1);ﻩseg_show(5,10,9);delay(1);ﻩseg_show(4,dis1[4],9);delay(1); seg_show(3,dis1[3],9);delay(1);ﻩseg_show(2,10,9);delay(1);ﻩseg_show(1,dis1[1],9);delay(1);ﻩseg_show(0,dis1[0],9);delay(1);}/********************************按键扫描函数**********************************/voidkeyscan(){ uintm=0,LastJinEr[4]=0,last1=0,LastLiCheng[4]=0,last2=0,LastMinute[3]=0,last3=0,LastSecond[2]=0,last4=0;ﻩif(KaiShiFlag==0)ﻩ{ ﻩﻩif(ChaXun_QueRen_Key==0)ﻩﻩ{ ﻩﻩﻩChaXun_Led=0;ﻩﻩ ﻩdelay(5);ﻩﻩﻩﻩif(ChaXun_QueRen_Key==0)ﻩﻩﻩﻩ{ﻩ ﻩﻩﻩwhile(ChaXun_QueRen_Key==0); ﻩ ﻩﻩJinErFlag=1;ﻩ ﻩﻩﻩn++; ﻩ ﻩ ﻩif(n==3)ﻩﻩﻩ{ﻩﻩﻩ n=0;ﻩﻩ ﻩﻩChaXun_Led=1;ﻩﻩﻩﻩJinErFlag=0;ﻩﻩﻩ}ﻩﻩﻩ }ﻩ ﻩ}ﻩ if(JinErFlag==1)ﻩﻩ {ﻩﻩ ﻩfor(m=4;m〉0;m--)ﻩﻩﻩﻩﻩ {ﻩﻩﻩ ﻩLastJinEr[m—1]=read_random(m);ﻩﻩﻩﻩ}ﻩﻩﻩﻩlast1=LastJinEr[3]+LastJinEr[2]*10+LastJinEr[1]*100+LastJinEr[0]*1000;ﻩ ﻩﻩfor(m=8;m>4;m--)ﻩﻩﻩﻩﻩﻩ{ﻩﻩﻩ ﻩLastLiCheng[m-5]=read_random(m);ﻩﻩﻩ }ﻩ ﻩﻩlast2=LastLiCheng[3]+LastLiCheng[2]*10+LastLiCheng[1]*100+LastLiCheng[0]*1000;ﻩﻩﻩ for(m=11;m〉8;m--)ﻩﻩﻩ ﻩ{ﻩﻩ ﻩﻩLastMinute[m—9]=read_random(m); ﻩﻩﻩ}ﻩﻩﻩﻩlast3=LastMinute[2]+LastMinute[1]*10+LastMinute[0]*100;ﻩﻩ ﻩfor(m=13;m>11;m—-)ﻩﻩﻩﻩ ﻩ{ﻩ ﻩﻩﻩLastSecond[m-12]=read_random(m); ﻩﻩ } ﻩﻩﻩlast4=LastSecond[1]+LastSecond[0]*10;ﻩﻩﻩ if(n==1)ﻩ ﻩﻩ{ﻩﻩﻩﻩﻩshow_nint(4,last1,4,6);ﻩ ﻩﻩshow_nint(0,last2,4,2);ﻩﻩﻩﻩ}ﻩﻩﻩ if(n==2) ﻩﻩﻩ{ﻩﻩﻩ ﻩseg_show(5,10,9); ﻩﻩﻩﻩshow_nint(2,last3,3,9);ﻩﻩﻩ show_nint(6,last4,2,9);ﻩﻩ ﻩ}ﻩﻩ ﻩ} ﻩﻩif(Function_Key==0)ﻩﻩﻩ{ ﻩﻩdelay(5);ﻩﻩ ﻩif(Function_Key==0) ﻩﻩﻩ{ﻩﻩﻩﻩﻩwhile(Function_Key==0);ﻩﻩ ﻩ i++;ﻩﻩﻩﻩﻩif(i==2)ﻩ ﻩ {ﻩﻩ ﻩﻩﻩi=0;ﻩﻩﻩﻩﻩ} ﻩ ﻩ}ﻩ ﻩ} ﻩﻩif((i==KongChe_flag)&&(JinErFlag==0))ﻩﻩﻩ{ ﻩ ﻩshow_time();ﻩﻩﻩ}ﻩ ﻩelseif(JinErFlag==0)ﻩﻩ { ﻩﻩﻩ if(DanJia==DanJia_DanCheng) ﻩseg_show(0,10,9);//显示"—-"表示待设置单价ﻩﻩ elseﻩﻩ ﻩﻩseg_show(5,10,9);ﻩﻩﻩshow_nint(1,DanJia_DanCheng,2,1);ﻩﻩﻩshow_nint(6,DanJia_WangFan,2,6);ﻩﻩﻩﻩif(QieHuan_Key==0)ﻩﻩﻩﻩ{ ﻩﻩﻩﻩﻩdelay(5);ﻩ ﻩ ﻩif(QieHuan_Key==0)ﻩﻩﻩﻩﻩ { ﻩﻩﻩﻩ ﻩwhile(QieHuan_Key==0);ﻩﻩﻩﻩ ﻩif(DanJia==DanJia_DanCheng)ﻩﻩﻩﻩﻩ ﻩ{ﻩﻩ ﻩﻩﻩﻩDanJia=DanJia_WangFan;ﻩ ﻩﻩ ﻩﻩDanShuang_Led=0;ﻩ//双程led亮 ﻩ ﻩﻩﻩ ﻩﻩﻩ} ﻩﻩﻩ ﻩelseﻩﻩﻩﻩ ﻩﻩ{ﻩﻩﻩﻩﻩﻩ ﻩDanJia=DanJia_DanCheng; ﻩ ﻩﻩ ﻩﻩDanShuang_Led=1; ﻩﻩ ﻩﻩﻩ}ﻩﻩ ﻩﻩﻩ} ﻩﻩﻩ }ﻩﻩﻩﻩﻩif(ChaXun_QueRen_Key==0)ﻩ ﻩﻩﻩ{ﻩﻩﻩﻩﻩﻩdelay(5);ﻩ ﻩ ﻩif(ChaXun_QueRen_Key==0) ﻩﻩﻩﻩﻩ{ ﻩﻩﻩﻩ ﻩwhile(ChaXun_QueRen_Key==0); ﻩﻩ ﻩKongChe_Led=1; ﻩﻩﻩﻩﻩKaiShiFlag=1;ﻩﻩﻩ ﻩﻩ} ﻩﻩ ﻩ}ﻩﻩ }ﻩ}elseif(KaiShiFlag==1)ﻩﻩ//非空车{ﻩﻩﻩif(ZanTingFlag==0)ﻩﻩﻩﻩﻩEA=1; elseﻩ ﻩﻩﻩEA=0; // EA=1;//开始计费ﻩﻩif((Speed〈=50)&&(ZanTingFlag==0))ﻩﻩ{ﻩ JiShi_Led=0; ﻩJiShiFlag=1;ﻩﻩ TR0=1;ﻩ//开始计时ﻩﻩ //EX0=0;//停止记路程ﻩﻩﻩﻩ//if(P3^2==0)ﻩﻩﻩﻩ//EX0=1;ﻩﻩﻩﻩif(ChaXunFlag==1)ﻩﻩ{ ﻩﻩﻩﻩﻩif(k==1) ﻩ ﻩ ﻩ{ﻩﻩﻩﻩﻩ ﻩshow_nint(0,LiCheng,4,2);ﻩﻩ ﻩshow_nint(4,JinEr,4,6);ﻩﻩﻩﻩﻩﻩ}ﻩ ﻩ ﻩﻩelse ﻩﻩﻩ ﻩ{ ﻩ ﻩﻩﻩseg_show(5,10,9); //显示’-'ﻩﻩﻩﻩshow_nint(2,Minute,3,9);ﻩ ﻩ show_nint(6,Second,2,9);ﻩﻩﻩﻩﻩ }ﻩﻩﻩ}ﻩﻩ}ﻩﻩelseﻩ {ﻩﻩﻩﻩ//if((ZanTingFlag==1))ﻩ //{ ﻩﻩ//ﻩEX0=0; ﻩ//停止记路程ﻩﻩ//}ﻩﻩﻩif((Speed>50)&&(ZanTingFlag==0)) ﻩ {ﻩﻩﻩ ﻩEX0=1;ﻩ //开始记路程ﻩ ﻩ}ﻩ ﻩTR0=0;ﻩ //暂停计时 ﻩﻩJiShiFlag=0;ﻩﻩ JiShi_Led=1;ﻩﻩ}ﻩﻩif(ZanTing_Key==0)ﻩ {ﻩ ﻩdelay(5);ﻩﻩﻩif(ZanTing_Key==0)ﻩﻩﻩ{ﻩﻩﻩﻩwhile(ZanTing_Key==0);ﻩﻩﻩﻩﻩﻩﻩ ChaXun_Led=1;ﻩﻩﻩﻩ ZanTingFlag++; ﻩﻩ if(ZanTingFlag==1)ﻩﻩﻩﻩﻩEA=0;ﻩﻩﻩﻩif(ZanTingFlag==2)ﻩ ﻩﻩ{ﻩﻩ ﻩﻩZanTingFlag=0;ﻩﻩﻩﻩ} ﻩﻩ} ﻩ}ﻩﻩif(ChaXun_QueRen_Key==0) ﻩ{ﻩ ﻩﻩdelay(5); ﻩ ﻩif(ChaXun_QueRen_Key==0)ﻩﻩﻩ {ﻩﻩ ﻩﻩwhile(ChaXun_QueRen_Key==0); ﻩﻩ ChaXunFlag=1;ﻩﻩﻩﻩ ChaXun_Led=0; ﻩﻩﻩk++;ﻩ ﻩﻩﻩif(k==2)ﻩﻩ ﻩﻩﻩk=0; ﻩ ﻩ}ﻩﻩ}ﻩﻩif(Clear_Key==0)ﻩ{ﻩﻩdelay(5);ﻩﻩ if(Clear_Key==0) ﻩﻩ{ﻩﻩﻩﻩﻩﻩﻩﻩwhile(Clear_Key==0);ﻩﻩﻩﻩﻩfill_byte(0,8); ﻩﻩﻩﻩfor(m=4;m>0;m--)ﻩﻩ

温馨提示

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

评论

0/150

提交评论