单片机课程设计出租车计价器DOC.docx
- 文档编号:5282441
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:27
- 大小:555.76KB
单片机课程设计出租车计价器DOC.docx
《单片机课程设计出租车计价器DOC.docx》由会员分享,可在线阅读,更多相关《单片机课程设计出租车计价器DOC.docx(27页珍藏版)》请在冰豆网上搜索。
单片机课程设计出租车计价器DOC
河南理工大学
《微机原理与单片机接口技术》
课程设计报告
出租车计价器设计
姓名:
郝高锋蒋亚光
学号:
专业班级:
指导老师:
所在学院:
电气工程与自动化学院
2013年04月10日
摘要
本设计是一个基于单片机的出租车计价器。
本设计主要完成的功能有计时,计费,记录里程,空车显示,暂停,测速等。
用到的硬件主要有C51单片机,直流电动机,霍尔传感器等。
通过霍尔传感器及单片机的外部中断功能,记录车轮的旋转圈数,通过车轮的周长计算里程。
由于使用的单片机系统附带的数码管显示只有四个数码管,所以每次只能显示一种数据:
里程、费用或者等待时间。
为了所有的数据都能在数码管上显示,加入了按键。
第五个键可以显示里程,第六个键可以显示等待时间,第五个键和第六个键都没有按的话就是显示费用。
本设计还附有测速的功能,通过单片机内部的计时器计时,通过每分钟测得的里程计算出车的速度。
通过测得的速度判定使用里程计费还是通过时间计费,这样也比较人性化。
本设计的另一个人性化之处在于可以暂停计费,这样可以随时暂停计费,支持部分收费。
本设计的空车提示功能对司机和乘客都有好处,方便乘客叫车,也可以减少司机的麻烦。
本设计通过灯的提示表示某个键被按下,这样能让司机和乘客很清晰的看到按了什么键。
当按下启动计费键后绿灯会亮,这样就会让司机很容易判断是不是按了启动计费键,以免造成不必要的损失。
当按下暂停键时,红灯就会亮,这样方便乘客判断是不是暂停了计费,有利于保障乘客的合法权益。
而空车则有黄灯提示,这样乘客只要看到黄灯就能判断是空车能够方便乘客叫车。
本设计主要有三部分组成,分别是霍尔传感器测量部分、单片机处理部分、数码显示部分。
霍尔传感器测量部分主要是由硬件组成的不需要太多的编程,而单片机处理部分主要任务是编程,数码管显示部分是单片机的扩张部分。
下面对本设计进行一些简单的功能总体描述。
加电之后系统默显示三公里内的费用,此时处于初始状态;第一个键是计费启动键,按下之后开始计费同时绿灯亮;第二个键是计费暂停键,按下之后计费暂停同时红灯亮;第三个键是空车提示键,按下之后黄灯亮,同时等待时间、里程、费用等都归零;第四个键是单程和往返转换键,可以实现单程、往返的转化;第五个键是里程查询键,按了之后数码管显示里程数;第六个键是等待时间查询键,按了之后可以查询等待时间。
关键字:
C51单片机霍尔传感器费用里程等待时间中断计时器
1概述
1.1出租车起源
出租车是一种公共交通工具,一般是短途的、往返于同一城市的不同地点。
其收费一般比其它的公共交通高,比如:
公交车、地铁等。
出租车起源于英国。
1620年,伦敦出现了第一家四轮马车出租车队,尽管整个车队才有四辆马车,但是车夫们穿着统一订做的制服,行驶于街道十分拉风,随即这一行业开始迅猛发展起来。
1654年,英国议会颁布了出租马车管理的法令,并给出租马车主发放营业许可证。
1886年卡尔·本茨发明了以汽油发动机为动力的三轮汽车,这一年被称为汽车元年。
而直到1897年,世界上第一家出租汽车公司才在德国斯图加特成立。
我国的出租车行业最早是始于清朝末年,当时有一些德国商人和法国商人在中国办了洋车行,包括上海、北京、青岛、宁波等口岸城市。
建国之后出租车行业曾经存在过一阵子,到文革期间出租车被当作资本主义的尾巴给彻底割掉了。
之后文革之后有缓慢的发展,到改革开放后有了较大的发展。
1.2出租车计价器研究现状
出租车计价器大概经历了四个发展阶段,一、传统的全部由机械元器件组成的机械式,二、半电子式即用电子线路代替部分机械元器件,三、集成电路式,四、单片机式。
使用单片机设计的出租车计价器功能很强大,可以满足计时、计程、计费、查看、存储、统计等多种计量功能。
利用编程可设计出多种不同的计费模式,不同的情况采取不同的收费方式,使司机在工作中能够应付各种突发状况,设计理念更加人性化,符合当今社会的需要。
其各种功能由键盘控制,操作简单。
且计价器造价低廉,安装方便,优势明显。
1.3出租车计价器发展趋势
随着单片机性能不断提高而价格却不断下降,单片机控制得到更广泛的应用。
外围芯片的不断发展使得计价器的功能更加强大,性能更加稳定。
随着电子技术的发展以及对计价器的不断改进和完善,产生了诸多的附加功能。
例如:
(1)存储功能,可存储多项营运数据,便于查询。
新型数据存储器的应用使得计价器的营运数据在掉电情况下还可以保存10年;
(2)永久时钟功能,在非营运状态下,日历时钟芯片的使用使计价器可以显示永久时钟;(3)LCD显示功能,液晶屏的使用让计价器实现多屏显示的功能,可同时显示各项营运数据使乘客一目了然。
1.4本设计的目的及意义
随着人民生活水平的提高,人们已经不再满足于衣食住的享受,出行的舒适程度已经受到越来越多人的关注。
于是,出租车行业以较低价格,较高的服务质量,给人们带来了出行的方便及享受。
但是大量的买卖纠纷困扰着行业的发展。
改良计价器是解决这一矛盾的最好方法。
用更加精良的计价器来为乘客提供更加方便快捷、优良的服务是本设计的一大目的。
凡坐过出租车的人都知道,只要汽车一开动,随着行驶里程的增加,汽车前面的计价器,里程显示器显示的读数就会从零逐渐增大,而当行驶到某一值时(如3千米)计费数字显示器开始从起步价(如5元)增加。
当出租车到达某地需要在那里等候时,司机按下“计时”键,每等候一定时间,计费显示就增加一个等候费用。
汽车继续行驶时,停止计算等候费,继续增加里程计费。
到达目的地,便可按显示的数字收费。
我国在70年代开始出现出租车,但那时的计费系统大都是从国外进口的,不但不准确,而且价格还十分昂贵。
随着改革开放日益深入,出租车行业的发展势头已十分突出,国内很多机械厂家都推出了国产计价器。
出租车计价器的功能也从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),发展到能够自主计费,以及现在的能够打发票和语音提示、按时间自主变动单价等功能。
随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。
所以可以本课题的研究很有必要,意义重大。
2系统总体方案及硬件设计
2.1计价器工作原理
出租车计价器是根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并在行程中同步显示费用。
从起步价开始,当汽车程行驶未满3公里时,均按起步价计算。
过3公里后,实现每1公里单价收费,中间遇暂停时,开始计时收费,测距收费和计时收费的和便构成了乘客的总车费。
完整的出租车计价器还应包括存储、查看、统计等功能。
本计价器设计采用单片机控制。
主要是利用单片机丰富的I/O端口以及其控制的灵活性,实现基本的里程计价功能、时钟显示功能、空车提醒等功能。
其原理框图如下:
里
程
原理框架图
通过键盘控制计价器的启动、暂停、空车提示及各种显示之间的转换。
测量单元是非常重要的单元,用来测量里程;同时与计时器配合工作也可以测速。
而单片机是核心处理单元,处理按键信息及测量单元的信息,并发出正确的指令,在整个系统中的作用就相当于人的大脑。
显示单元是一个重要的人际交流单元,主要用来显示费用、里程、总等待时间等信息,为司机和乘客提供各种方便。
2.2单片机单元
单片机单元是本设计的核心部分,采用的是C51单片机。
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
主要性能参数:
·与MCS-51产品指令系统完全兼容
·4k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz-24MHz
·三级加密程序存储器
·128×8字节内部RAM
·32个可编程I/O口线
·2个16位定时/计数器
·6个中断源
·可编程串行UART通道
·低功耗空闲和掉电模式
单片机引脚图如下:
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
·P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在FIash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
·P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
FIash编程和程序校验期间,P1接收低8位地址。
·P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
·P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用
上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:
端口引脚
第二功能
P3^0
RXD(串行输入口)
P3^1
TXD(串行输出口)
P3^2
/INT0(外中断0)
P3^3
/INT1(外中断1)
P3^4
T0(定时/计数器0外部输入)
P3^5
T1(定时/计数器1外部输入)
P3^6
/WR(外部数据存储器写选通)
P3^7
/RD(外部数据存储器读选通)
本设计使用的单片机最小系统如下图:
2.3里程计算
里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。
霍尔传感器是根据霍尔效应制作的一种磁场传感器。
在半导体薄片两端通以控制电流I,并在薄片的垂直方向施加磁感应强度为B的匀强磁场,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压。
由于A44E属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ。
差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压CCV,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差HV输出,该HV信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到“工作点”(即OPB)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为“开”。
当施加的磁场达到“释放点”(即rPB)时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为“关”。
这样两次电压变换,使霍耳开关完成了一次开关动作。
里程测量原理图如下:
本设计选择了P3.2口作为信号的输入端,内部采用外部中断0,车轮每转一圈(我们设车轮的周长是1米),霍尔开关就检测并输出信号,引起单片的中断,对脉计数,当计数达到1000次时,也就是1公里,单片机就控制将金额自动的加增加,算公式:
单价×公里数=金额。
2.4键盘控制及指示灯单元
本设计是用了最小系统的所有六个键。
第一个键是计费启动键,按下之后开始计费同时绿灯亮;第二个键是计费暂停键,按下之后计费暂停同时红灯亮;第三个键是空车提示键,按下之后黄灯亮,同时等待时间、里程、费用等都归零;第四个键是单程和往返转换键,可以实现单程、往返的转化;第五个键是里程查询键,按了之后数码管显示里程数;第六个键是等待时间查询键,按了之后可以查询等待时间。
键盘电路如下图:
本设计的灯指示功能主要是方便乘客和司机。
按下启动键时绿灯亮这样既能提示乘客已经开始计费,防止司机多计费又能防止司机忘记按下启动键而造成少收费,使司机受到损失。
是一个非常人性化的设计。
2.5显示单元
本设计利用的单片机最小系统只有四个数码管动态显示所以同一时间内只能显示费用、里程、等待时间中的一个,所以为了能够让乘客和司机能看到各种数据就要用到键盘转换,按下不同的键显示不同的数据。
系统默认的是显示费用,如果想看到其它的数据就要按下相应的按键。
第五个键是里程查询键,按了之后数码管显示里程数;第六个键是等待时间查询键,按了之后可以查询等待时间。
单片机最小系统所用的数码显示管是共阴极的数码显示管,送高电平亮。
由于四个数码管共用一个八位端口所以要用到动态显示。
数码管的动态显示的扫描时间比较难调节,需要多次的调节。
比较繁琐不过只要坚持多次调节就能够成功。
3软件设计
本设计的电路部分比较简单主要是软件部分,所以软件是核心部分。
主要包括外部中断0,定时器中断1,键盘扫描,数码管显示等模块。
3.1主程序模块
主程序主要是完成初始化,包括推挽试输出、设置定时器工作方式、中断控制寄存器设置。
当然还包括一个死循环,循环中包括键盘扫描和数码管显示。
3.2外部中断
车轮每转一周执行一次中断程序执行一次中断程序,如果是处在根据里程计费的模式则记录圈数的变量q和n都增加1,然后判定q是否达到一千,如果达到一千则路程增加二百米。
同时判定是单程还是双程,如果单程则费用增加0.4元,如果是双程则费用增加0.3元。
如果是处在计时收费模式则仅n增加1。
流程图如下
否
是
否
是
否
是
否
是
变量k是否为零是为了判定是否为计程收费,如果k为零则说明是计程收费、如果k不为零则表示是计时收费。
变量j表示里程,里程小于3公里时费用为5元,当里程大于三公里时按单程价格为2元/公里,往返价格为1.5元/公里收费。
3.3计时测速单元
定时测速主要是为了满足“车速<5公里/小时的时间累积为总等待时间,每5分钟等待时间相当于里程数增加1公里”这项要求的。
测速的原理是:
通过定时器可以实现每一分钟都执行一次定时器中断程序,在定时器中断程序中判定车轮在这一分钟转的圈数,然后利用圈数及车轮的周长计算车速。
当车速小于5公里/小时时就会进入计时收费模式,此时变量k置1,中断程序中记录车运行圈数的不会增加,同时记录圈数的变量q要减去这一分钟内的圈数n。
当速度再次大于5公里/小时时k又被置0,进入计程收费模式,同时记录q加上这一分钟之内的汽车转过的圈数n。
是
是否
否
否
是
否
是
3.4键盘扫描单元
键盘扫描主要是判定哪个键被按下然后执行相关的程序。
按键的具体功能描述如下:
第一个键是计费启动键,按下之后开始计费同时绿灯亮;第二个键是计费暂停键,按下之后计费暂停同时红灯亮;第三个键是空车提示键,按下之后黄灯亮,同时等待时间、里程、费用等都归零;第四个键是单程和往返转换键,可以实现单程、往返的转化;第五个键是里程查询键,按了之后数码管显示里程数;第六个键是等待时间查询键,按了之后可以查询等待时间。
3.5显示单元
显示单元比较简单只是利用了动态显示,将要显示的数据通过数码管显示。
流程图如下:
4Proteus软件仿真
5课程设计体会
刚开始时不了解霍尔传感器是如何使用的所以感觉硬件电路部分无从下手,为了解决这个问题查了很多资料也在网络上找了很多资料并且和同学进行了讨论。
明白了霍尔传感器的工作原理之后就是焊接电路了,这次设计的电路相对还是比较简单的,所以焊接电路只遇到了一些比较小的问题还是很容易就能解决的。
关键是程序设计,关于如何测量问题开始有两种方案:
一、用计数器记录车轮转过的圈数,二、使用外部中断记录车轮转过的圈数。
经过分析发现用计数器记录圈数不容易测速,所以选择了使用外部中断进行记录圈数。
圈定好方案后首先大概的把程序结构想好然后在进行程序的编写。
其实程序的编写过程还是很顺利的,没有遇到什么困难,但是在程序调试中遇到了一个难题即外部中断程序不能够执行,经过了多次的检查都没有发现错,开始怀疑是硬件出了问题于是就怀疑是霍尔传感器出了问题。
不过把霍尔传感器装到其他同学的电路上却运行正常,排除了霍尔传感器的问题。
还是回到了程序上,经过对程序的认真仔细的检查终于发现了错误所在,其实就是一个细节问题,一个很细小的失误,但是这个失误让我付出了很大的代价。
首先是花费的时间,为了这个很小的失误我大概用了近五六个小时的时间,不停的调试、查看程序。
其次是很影响心情,因为整个程序的构思和各个方面都没有什么错误,但是偏偏运行结果不正确,这对我造成了很大的心理压力,信心也很受打击。
解决了这个细小的失误之后程序和硬件基本上就没有什么问题了,达到了预想的要求。
从本次设计中我学到的最重要的一点就是细节决定成败。
做任何事都要注重细节,正所谓千里之提溃于蚁穴。
一定要把每个细节做好,不能只看整体的思路没有问题就认为大功告成了,往往在某个细节上功亏一篑。
其实做好每个细节并不难就看你认真不认真,或许很仔细很认真的去做会在刚开始的时候有点慢,用的时间比较多,但是在调试的时候会省去很多的时间。
以前我认为能把程序的主体部分先编出来然后在进行调试就简单了,但是随着编写程序的增多我发现调试和修改程序往往比编写程序更麻烦,更需要精力。
因为你第一遍编写的时候是按照你的设想编写的,由于你的不认真可能造成实际编写的和你所设想的算法有些出入,然后你检查的时候由于潜意识中认为是按照自己的设想编写的就很容易忽略某些小的失误,这样就很难查出那些不太明显的错误。
恰恰就是这些小的失误可能造成你整个工程的无法完成。
参考文献
[1]河南理工大学.微机原理与单片机接口技术[M].
[2]徐淑华等著.《单片机微型机原理及应用》.哈尔滨工业大学出版社
[3]马淑华等著《单片机原理与接口技术》.北京邮电大学出版社
[4]李群芳、张士军、黄建.《单片微型计算机与接口技术》(第三版).电子工业出版社,2008.
[5]李群芳,肖看.单片机原理接口与应用.北京:
清华大学出版社,2005.
附1:
源程序代码
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitw1=P0^0;
sbitw2=P0^1;
sbitw3=P0^2;
sbitw4=P0^3;
sbitL1=P0^5;
sbitL2=P0^6;
sbitL3=P0^7;
sbitH1=P3^6;
sbitH2=P3^7;
sbitD1=P2^0;
sbitD4=P2^3;
sbitD7=P2^6;
sbitD10=P3^3;
sbitD3=P2^2;
sbitD6=P2^5;
sbitD12=P3^5;
sbitD2=P2^1;
sbitD5=P2^4;
sbitD8=P2^7;
sbitD11=P3^4;
chartab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
chartab2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
staticucharx,m,k,s,d,e,r,w,y,g1,g2,g3,g4;
staticintq,n;
staticfloatj,f;
staticuintg,h;
voidxianshi();
voiddealy(uinti,c)//延时函数
{
uinta,b;
for(a=i;a>0;a--)
for(b=c;b>0;b--);
}
voidINT0()interrupt0//外部中断0,用于记录车轮圈数
{
if(k==0)//k==1时为表示计时收费,k==0时表示计程收费
{
q=q+r;//加上在计时收费最后一分钟里漏加的圈数
r=0;
q++;//圈数加一
if(q>=1000)//是否达到二百米
{
q=0;
j=j+0.2;//里程增加二百米
if(j>3&&d==0)//单程
f=5+2*(j-3);
if(j>3&&d==1)//往返
f=5+1.5*(j-3);
}
if(j<=3)//里程小于三公里费用为五元
f=5;
}
if(j<=3)//里程小于三公里费用为五元
f=5;
n++;//用于测速的圈数n加一
}
voidT1()interrupt3//定时器1的中断
{
TH1=(65536-50000)/256;//赋初值
TL1=(65536-50000)%256;
x++;
if(x>=5)//是否到一秒
{
x=0;
m++;
if((m-1)>=10)//是否到一分钟
{
m=0;
if(n<100)//n小于100时表示速度小于5公里/小时
{
q=q-n;//圈数减去计程最后一分钟中多加的圈数
j=j+0.2;//每分钟相当于两公里
if(j>3&&d==0)//单程
f=5+2*(j-3);
if(j>3&&d==1)//往返
f=5+1.5*(j-3);
if(j<=3)//里程小于三公里费用为五元
f=5;
k=1;//进入计时收费模式,k==1时为表示计时收费,k==0时表示计程收费。
h++;//等待时间加一分钟
}
if(n>=100)//n大于100时表示速度大于5公里/小时
{
if(k==1)//是否为进入计程收费模式的第一个一分钟,如果是则需要把q加n
r=n;
k=0;//进入计程收费模式,k==1时为表示计时收费,k==0时表示计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 出租车 计价器 DOC