课程设计---出租车计价器设计.docx_第1页
课程设计---出租车计价器设计.docx_第2页
课程设计---出租车计价器设计.docx_第3页
课程设计---出租车计价器设计.docx_第4页
课程设计---出租车计价器设计.docx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

摘要出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。本设计采用at89s52单片机为主控器,附加u18949霍尔传感器测距,实现对出租车计价统计输出采用8段数码显示管。本电路设计的计价器不但能实现基本的计价,而且还能根据单程,双程来调节单价。出租车计价器用于记录里程与价格的关系,它能有效地避免司机与乘客的矛盾,保证双方的利益。使用单片机来完成设计要求。单片机功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程就可以轻容易的实现。避免了机械开关带来的不稳定因素。目录1概述31.1功能简述31.2设计任务及要求31.3方案论证及比较32 系统总体方案及硬件设计52.1单片机各引脚功能说明52.2单片机最小系统单元62.3按键电路82.4 u18949霍尔传感器检测单元83软件设计103.1 系统主程序103.2 中断程序113.3 计算程序113.4 显示程序123.5 键盘程序124 实验仿真134.1调试与测试134.2 里程计价测试135课程设计体会14参考文献15附1:源程序代码16附2:系统原理图231概述1.1功能简述出租车计价器用于记录里程与价格的关系,它能有效地避免司机与乘客的矛盾,保证双方的利益。1.2设计任务及要求(1)能显示里程,单位为公里,最后一位为小数位。(2)能显示金额数,单位为元,最后一位为小数位。(3)可设定单程价格和往返价格,单程价格为2元/公里,往返价格为1.5元/公里。(4)车速5公里/小时的时间累积为总等待时间,每5分钟等待时间相当于里程数增加1公里。(5)起步公里数为3公里,价格为5元,若实际距离大于3公里,按规则3计算价格。(6)按暂停键,计价器可暂停计价,按查询键,可显示总等待时间。1.3方案论证及比较方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管显示,一下是该方案的流程框图,方案一如图1-1所示:图1-1方案一方案二:采用eda技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块 计量模块、译码和动态扫描显示模块,其系统框图如图1-2所示:图1-2方案二方案三:采用mcu技术,通过单片机作为主控器,利用1602字符液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方案图如图1-3所示:图1-3方案三方案总结:通过各个方案的比较,本次采用方案三,不但控制简单,而且成本低廉,设计电路简单。2 系统总体方案及硬件设计2.1单片机各引脚功能说明at89s52电路图如图2-1所示: 图2-1 at89s52电路图vcc:供电电压。gnd:接地。p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。 p1口: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口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89s52的一些特殊功能口,p3口同时为闪烁编程和编程校验接收一些控制信号。rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。2.2单片机最小系统单元主控机系统采用了atmel 公司生产的 at89s52单片机,它含有256 字节数据存储器,内置8k 的电可擦除flash rom,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。复位电路和晶振电路是at89s52 工作所需的最简外围电路。单片机最小系统电路图如图2-2所示。 图2-2单片机最小系统图at89s52 的复位端是一个史密特触发输入,高电平有效。rst端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。在复位电路中,按一下复位开关就使在rst端出现一段时间的高电平,外接11.0592m 晶振和两个30pf 电容组成系统的内部时钟电路。2.3按键电路按键控制电路如图2-2所示,单片机的p1.0管脚接启动/停止按键,通过软件编程,当按下按键计数器开始工作,开始计价;当弹起按键时,计数器停止工作,停止计价,启动/停止按键带自锁功能。按下启动按键,开关处于导通状态,这时给p1.0送低电平信号,这时tr0=1,计数器开始工作,调用计价子程序开始计价。清零按键接单片机的p1.3管脚,按下清零按键,p1.3为低电平,调用清零子程序,用于将显示数据清零,在程序中给各位赋0代码(0x3f),以达到清零的目的,方便下次计价。另外为功能键,控制价格调整,这个按键是在没有按下启动/停止按键时有作用,计价过程中无效。图2-3按钮电路2.4 u18949霍尔传感器检测单元u18949属于开关型的霍尔器件,其工作电压范围比较宽(4.518v),其输出的信号符合ttl电平标准,可以直接接到单片机的io 端口上,而且其最高检测频率可达到1mhz。图2-4 u18949霍尔传感器原理u18949集成霍耳开关由稳压器a、霍耳电势发生器(即硅霍耳片)b、差分放大器c、施密特触发器d和oc门输出e五个基本部分组成。在输入端输入电压vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差vh输出,该vh信号经放大器放大后送至施密特触发器整形,使其成为方波输送到oc门输出。当施加的磁场达到工作点(即bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时oc门输出端输出低电压,三极管截止,使oc门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作。里程计算是通过安装在车轮上的霍尔传感器检测到的脉冲信号,送到单片机产生中断,单片机再根据程序设定,计算出里程。图2-5 u18949传感器测距示意图3软件设计3.1 系统主程序计算、循环等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。图3-1 主程序流程图当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价送数码管显示出来。程序流程如图3-1所示。 3.2 中断程序在中途等待中断程序中,每1ms产生一次中断,将当前里程值送入某个缓存变量,每5分钟将缓存变量中的值和当前里程值比较,当汽车停止,霍尔传感器5分钟没有输出信号,当前里程值和缓存变量内的值相同,则进入等待计时,每5分钟记一次价格。3.3 计算程序计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*等待单价。程序流程图如图3-2所示。图3-2 计算程序流程图3.4 显示程序程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。如图3-3所示。图3-33.5 键盘程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。 4 实验仿真4.1调试与测试首先将数码管安装到事先焊好的插槽上,然后,对照电路图确定好各芯片所在的位置,按照对应的引脚插到插槽上,最后接好合适的电源。采用编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作。硬件电路制作完毕,用万用表检测有无短路开路等现象,确定硬件电路没有问题后,用仿真头与硬件电路相连,运行程序进行调试。若调试不成功,则可再单独调试程序和硬件电路。程序用软件仿真运行,硬件电路再次检查有无焊错,或者元件与插座接触不良等方面问题;确认均无问题后,再次把软件和硬件联机调试,直至功能正常。把程序烧录进单片机at89s52结束调试。4.2 里程计价测试由于实验条件的限制,我们采用信号发生器产生外部中断,设定中断间隔为100ms,假定车轮周长为1m,则此时车速为36km/h.整个系统以此为基础,通过计费程序完成中金额的计算。表4-1的测试条件是:假设白天的单价是2元,起步价为5元(包含3公里),分别不公里程测试得数据如表:5课程设计体会经过这些天有关于出租车计价器的课程设计,使我对单片机的应用有了更深的了解。在课程设计的过程中,还是碰到了许多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一些相关的应用软件没能熟练掌握。通过这几天晚上的苦想和反复调试,以及参考网上的程序,还有同学的热心帮助,最终还是把问题解决了。通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握,凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。参考文献1 贾宗璞,许合利,c程序程序设计. 北京:中国矿业大学出版社,2007.12 余发山,王福忠,单片机原理及应用技术. 北京:中国矿业大学出版社, 2008.63 百度知道 at89s52概述:/view/2251929.html4 百度文库 at89s52中文资料:/view/1fe9152f7375a417866f8fe7.html附1:源程序代码#include #define uchar unsigned char #define uint unsigned int uchar qianwei,baiwei,shiwei,gewei; /显示数据各个位置数字的临时变量 char led_seg_code10=0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/段码表示0-9 uint tt,aa,round,distance,cost,price,wait;/定义路程、价钱、等待时间及一些全局的变量等; uchar dengdai,second,minute; unsigned long wait_ten_ms;/记录等待时间多少个10ms/按键的定义,所有按键按下去为低电平sbit key0=p10; /清零sbit key1=p11; /切换路程与等待时间sbit key2=p12; /单程还是往返设置sbit key3=p13; /暂停按钮sbit led1=p16; / 双程 sbit led2=p17;/ 暂停sbit led3=p14;/ 堵车sbit led4=p15; / 切换bit key1_flag;/由于按键会自动复位,这个为标志位bit key2_flag;bit key3_flag;bit flag; /初始化函数void initial_data(void)distance=0;cost=0;second=0;minute=0;wait_ten_ms=0;key1_flag=1; /key2_flag=0; /单程or往返,接指示灯;key3_flag=1; /暂停,接指示灯;flag=0;round=0;dengdai=0;led1=1; /双程指示led2=1; /暂停指示 led3=1; /堵车指示led4=1; / 等待时间切换标志 /暂停程序void zanting(void) if(key3_flag) ex0=0; /关闭中断和定时器tr0=0;elseex0=1;tr0=1; key3_flag=!key3_flag; /计算数据处理 void jisuan() distance=round/60+wait_ten_ms/3000;/车轮转60圈为100m,等待时间30s为100mif(distance30)cost=price*(distance-30)/10+50; wait=minute*100+second; /显示的辅助程序,分离一个数的各个数字 void fenli(uint temp) /数据的分离处理 if(temp9999) temp=9999;qianwei=temp/1000;baiwei=temp/100%10;shiwei=temp%100/10;gewei=temp%10; /延时约1ms,数码管显示时使用void diplay_delay(void) uint i; for(i=0;i0;i-) for(j=340;j0;j-); /键盘的扫描 void keyscan() if(key1=0) / 按键消抖并判断按下去的次数为基数还是偶数 delay(5); if(key1=0) key1_flag=!key1_flag; while(!key1)led_show(); delay(5); while(!key1)led_show(); if(key0=0) / 清零 delay(5); if(key0=0) initial_data(); if(key3=0) / 暂停 delay(5); if(key3=0) zanting(); while(!key3)led_show(); delay(5); while(!key3)led_show(); if(key2=0) / 单程还是往返 delay(5); if(key2=

温馨提示

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

评论

0/150

提交评论