出租车计价器系统设计[含CAD图纸+文档]

出租车计价器系统设计[含CAD图纸+文档]

收藏

资源目录
跳过导航链接。
压缩包内文档预览:

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

出租车计价器系统设计含CAD图纸+文档,含CAD图纸+文档,出租车计价器系统设计,出租车计价器,出租车计价器文件,出租车计价器设计
编号:20542280    类型:共享资源    大小:1.69MB    格式:ZIP    上传时间:2019-07-04 上传人:QQ24****1780 IP属地:浙江
15
积分
关 键 词:
含CAD图纸+文档 出租车计价器系统设计 出租车计价器 出租车计价器文件 出租车计价器设计
资源描述:
出租车计价器系统设计[含CAD图纸+文档],含CAD图纸+文档,出租车计价器系统设计,出租车计价器,出租车计价器文件,出租车计价器设计
内容简介:
毕 业 设 计 任 务 书 2008 年4月18 日 毕业设计题目出租车计价器系统设计指导教师俞 云 强职称副教授专业名称机电一体化技术班级机电50532学生姓名王 猛学号5020053228设计要求1完成资料翻译一份(3000字以上)2完成基于AT89S51单片机的出租车计价器系统设计;3完成相关程序设计;4完成毕业设计说明书一份;5完成相关图纸。完成毕业课题的计划安排序号内容时间安排1外文资料翻译2008.3.1至2008.3.52搜集相关资料并调研,完成调研报告2008.3.6至2008.3.143进行硬件电路的设计及机构的选择,并完成相关程序的编写,编写说明书,绘制相关图纸。2008.3.15至2008.4.224整理毕业设计说明书并定稿,准备答辩2008.4.23至2008.4.245答辩2008.4.20答辩提交资料外文资料翻译,毕业设计调研报告,毕业设计说明书,相关图纸。计划答辩时间2008.4.20 无锡职业技术学院机电技术学院 2 0 0 8 年 4 月 1 8 日无锡职业技术学院毕业设计说明书第一章 引 言随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在着买卖纠纷困扰着行业的发展。而在出租车行业中解决这一矛盾的最好方法就是改良计价器。用更加精良的计价器来为乘客提供更加方便快捷的服务。我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打发票和语音提示、按时间自主变动单价等功能。随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。凡乘过出租车的人都知道,只要汽车开动,随着行驶里程的增加,就会看到汽车前面的计价器里程数字显示的读数从零逐渐增大,而当行驶到某一值时(如5KM)计费数字显示开始从起步价(如10元)增加。当出租车到达某地需要在那里等候时,司机只要按一下“计时”键,每等候一定时间,计费显示就增加一个该收的等候费用。汽车继续行驶时,停止计算等候费,继续增加里程计费。到达目的地,便可按显示的数字收费。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。为此我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。第二章 出租车计价器系统设计内容2.1基本设计内容(1) 不同情况具有不同的收费标准。l 白天l 晚上l 途中等待(10min 开始收费)(2) 能进行手动修改单价(3) 具有数据的复位功能(4) IO 口分配的简易要求l 距离检测使用霍尔开关A44El 白天/晚上收费标准的转换开关l 数据的清零开关l 单价的调整(最好使用 和 按键)(5) 数据输出(采用LCM103)l 单价输出2 位l 路程输出2 位l 总金额输出3 位(6) 按键l 启动计时开关l 数据复位(清零)l 白天/晚上转换2.2拓展功能l 能够在掉电的情况下存储单价等数据l 能够显示当前的系统时间l 语音播报数据信息第三章 方案论证3.1方案比较方案一:采用数字电路控制。其原理方框图如图31 所示。采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用。移位寄存器电路金额显示单价显示里程传感器电源电路及保护电路图31数字电路方案方案二:采用单片机控制。利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。其原理如图32所示。89S51单片机键盘控制总金额显示单价显示AT24C02掉电存储串口显示驱动电路里程计算单元图32单片机控制方案3.2确定方案通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。第四章 单片机计价器系统总体设计4.1计价器的工作原理通常计价器采用MCS - 51 芯片,在EEPROM中预先已写入了有关程序和数据的信息,如基本距离、续程距离、候时时间的规定值,与收费标准规定相应的收费价格值,不同出租条件下收费的变化比率,附加车费值计费方式等数据和与收费办法相应的车费计算与控制程序等,并且在计价器安装前已根据不同车型选定好K 值。计价器的原理结构如图4-1 所示。在工作过程中其主要的功能都是由MCS - 51 芯片中的定时器/ 计数器来实现。图4-1 计价器的原理结构图4.2 单片机系统总体设计单片机系统总体设计框图如图4-2所示启动/清除开关89S51单片机AT24C02掉电存储里程传感器键盘控制串口显示驱动电路总金额显示单价显示锁存器图42 单片机系统总体设计框图第五章 硬件设计5.1单片机总体电路图设计电路图见附图一所示5.2 AT89S51单片机介绍AT89S51兼容MCS51微控制器,4K字节FLASH存贮器支持在系统编程ISP 1000次擦写周期,128字节片内RAM,工作电压4.0V到5.5V,全静态时钟0 Hz 到33 MHz,三级程序加密,32个可编程IO口,2/3个16位定时/计数器,6/8个中断源,全双工UART,低功耗支持Idle和Power-down模式, Power_down模式支持中断唤醒, 看门狗定时器,双数据指针,上电复位标志。内部逻辑结构,如图5-1所示。图5-1 AT89S51内部逻辑结构图1.定时器/ 计数器的基本原理作为基本组成内容,AT89S51单片机共有两个可编程的定时器/ 计数器,分别称定时器/ 计数器0和定时器/ 计数器1 。它们都是十六位加法计数结构,分别由TH0 和TL0 及TH1 和TL1 两个8 位计数器组成。2.计数功能所谓计数是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。MCS - 51 芯片有T0 ( P3. 4)和T1 (P3. 5) 两个信号引脚,分别是这两个计数器的计数输入端。外部输入的脉冲在负跳变时有效,进行计数器加1 (加法计数) 。3.定时功能定时功能也是通过计数器的计数来实现的,不过这时的计数脉冲来自单片机的内部,既每个机器周期产生一个计数脉冲。也就是每个机器周期计数器加1 。由于一个机器周期等于12 个振荡脉冲周期,因此计数频率为振荡频率的1/ 12 。如果单片机采用12MHz 晶体,则计数频率为1MHz。即每微秒计数器加1 。这样不但可以根据计数值计算出定时时间,也可以反过来按定时时间的要求计算出计数器的预置值。5.3电源控制线路设计出租车计价器316V/ 60mAh 镍镉电池恒流充放电控制线路额定电压316V , 容量为60mAh 的Nicd 电池在出租车计价器中有着广泛的应用,它也是其它智能化仪表中最为常用的备用电池。在出租车计价器的日常维护中,一旦由于电池爬碱(轻微漏液),线路漏电、短路以及长期使用造成电池性能下降时,对电池的处理办法一般采用弃用。然而对这类电池进行适当的维护,如对爬碱的电池进行清理并用绝缘胶密封,对记忆效应明显的电池可进行多次循环充放电加以消除,有不少电池仍可利用,但这需要一种可用于判定电池性能的容量检测线路,而普通的NiCd 电池充电器并不具有这一功能。为此笔者设计了一种适用于316V/ 60mAh NiCd 电池恒流充放电控制线路,不仅可用于容量检测,在作一般的充电器使用时,可在充电前对电池的剩余容量给予准确有效的放电以消除其记忆效应,比普通的充电线路更具优越性。1基本原理(1)恒流放电线路图5-2 是恒流放电线路原理图,其基本工作原理是当电池放电时,由于电压下降引起电流下降时,通过电阻R 的反馈及运放的调整,使三极管T 的基极电流发生变化,调节三极管ce 极压降从而确保R 上的电压不变,使之流过的电流保持恒定。设电池放电电流为I ,运放同反相端电压分别为V + , V - ,基准稳压管D 的电压为E0 ,由于三极管的基极电流较小,可忽略不计,因此流过R 的电流可视为电池的放电电流。则:图5-2 恒流放电线路原理图V = RI , V + = E0由于运放的同反相端电压相等,即V + = V - ,因此:E0 = RI则: I = E0/ R显然,放电电流只决定于基准电压E0 及限流电阻R 的阻值,与电池电压无关,一旦E0 及R 保持定值,电流I 即恒定不变。由于R 上的压降必须大于电池的终止放电电压,并确保三极管c e 之间的压降有足够的调整空间,因此R 的取值不易过大。(2)放电终止控制线路图5-3 为放电终止控制线路原理图,图中运放构成电压比较器,当电池电压E 大于基准电压E0 时,V + V - ,比较器输出高电平,三极管导通,继电器吸合。同样当电池电压低于基准电压时, V + V - 。运放输出低电平,三极管截止,继电器断开。这样,便可通过继电器触点控制放电电流的通断。根据“GB/ T1103 - 1996 圆柱密封镉镍可充单体电池”标准规定, 单体电池的终止放电电压为110V ,对于316V NiCd 电池是由三只单体电池串联而成,因此,终止放电电压为310V ,而图中的基准电压应取E0 = 3. 0V。图5-3 放电终止控制线路原理图(3)恒流充电线路图5-4为由78L05 构成的恒流充电线路原理图,图中: I0 = U0/ R ,则充电电流I 为:I = I0 + I d = U0/ R + Id式中U0 为78L05 的输出电压(定值+ 5V) ,而Id 为78L05 的静态工作电流,一般在几至十几毫安也为定值,因此,一旦R 调整确定,充电电流即为恒定电流不变。图中输入电压Ui 要求大于U0 + E ,其中E 为电池电压。D 是反向隔离二极管,为防止电池电流反串而设。由于785L05 输出电流仅为100mA ,因此,该线路的充电电流也不超过100mA。图5-4 恒流充电线路原理图(4)充电定时控制线路如图5-5 所示由555 及两级4020 计数器构成了充电定时控制线路,图中555 构成了多谐振荡器,其周期稳定的振荡波形经两级4020 计数实现长时间定时,采用两级计数的目的是为了降低555 的振荡周期,以便采用小容量CBB (金属聚酯膜电容) 振荡电容,虽然采用单级4020 计数同样可达到两级计数的定时时间,但振荡电容必须采用容量较大的电解电容,而电解电容的稳定性及温度特性远不及CBB电容。如采用10F 的电解电容,当温度在030 范围内波动时,8 小时的定时时间将产生30min 的温度误差,而采用CBB 电容产生的误差小于1min。图中调整W1 使555 振荡周期为t = 11716ms ,则定时时间: T = 214 210 t = 810h 。图中按下AN1 ,4020 复位,4020 ( IC3) 的Q10输出低电平,三极管T导通,继电器通电,触点J K 吸合自锁,接通充电电路工作电源对电池进行充电,同时555 振荡,4020开始计数,当定时时间达到预定时间后,4020 ( IC3)的Q10输出高电平,三极管T 截止,继电器线包断电,触点J K断开,切断定时线路及后级充电线路工作电源,停止对电池充电。图5-5 电池恒流充放电控制线路2恒流充放电控制线路图5-5 为316V/ 60mAh NiCd 电池恒流充放电控制线路,其容量检测精度优于3 %(不计计时误差) 。根据GB/ T11013 1996 标准规定,NiCd 电池容量测试时的充电电流应为012C (C 为电池容量) ,充电时间8h ,然而以012C 的恒定放电电流放电至终止电压,要求最小放电时间不低于4175h 。因此,图中充放电电流为12mA。充电定时时间为8h 。(1)恒流放电控制线路:图5-5 中运放A1 、A2 采用LM324 (一片LM324 可用于二个放电控制线路) 。其中A1 、A2 的基准电压由工作电源(当采用7812 稳压器稳压后的工作电源已有足够的稳压精度) 分压而成,A1 的基准电压为112V ,通过W2 调整,A2 的基准电压为310V ,可通过W3 调整。当K1 时,NiCd 电池接入放电回路,按下AN1 ,当电池电压高于310V 时, 继电器动作,J K1 吸合自锁,L ED1 亮,表示放电开始,当电池电压低于310V 时,继电器断开,电池终止放电,同时其常闭触点闭合,蜂鸣器鸣响,提示放电终止,只有当K 2或切断工作电源时蜂鸣才停止蜂鸣。若按下AN1 蜂鸣器一直鸣响,说明电池电压已低于310V ,不用再进行放电。(2)恒流定时充电控制线路:图5-5 中W3 为充电电流调节电阻,调整W3 使充电电流为12mA。图中C2 、R8 及C3 、R10 为4020 上电复位线路,C4 、C5 、C6 为旁路电容,可提高定时线路的干扰性能。555 选择电压、温度漂移较小的SE555 ,L ED2 用于充电状态指示,当K 2 时,电池接入充电回路,按下AN2 ,电池便开始充电,同时L ED2 闪烁,当充电时间到8h 时,线路自动切断并停止充电。 线路用于电池容量检测时,首先对电池剩余容量放电,当放电至终止电压时,转入8 小时充电,充电完毕后,再进行放电,记录开始放电至终止放电的时间t (h) ,即可计算出电池的容量:实际容量= t 额定容量/ 5h (mAh)一般出租车计价器关机时, 静态电流小于50A ,而计价器要求断电一个月其内存数据及时钟线路仍能正常工作,可计算出备用电池容量不得低于36mAh ,因此若实际容量仍能达到36mAh ,则可继续使用。图5-5 为单路充放电控制线路。多路可按图复制,但定时控制线路只需一路。控制线路电压可由220V 交流经变压、整流、滤波后由7812 提供,若变压器次级电流为1A(电压可选15V) ,而继电器的线包电流小于100mA ,则最多可驱动8 路充放电控制线路,可同时对8 节316V/ 60mAh 时NiCd 电池进行充放电。5.4里程计算、计价单元的设计1车轮转动里程检测电路该电路的主要作用是敏感路程,产生计程脉冲;在具体实现时采用霍尔传感器A44E来作为里程传感器,将安装在与车轮相连接的涡轮变速器的磁铁上,使汽车每前进10 m传感器产生一次脉冲,即向里程计数器电路发出一个计数脉冲,以使得计数电路进行里程计数。车速传感器测控系统框图如图5-6所示89S51单片机计价系统D/A转换A/D转换测速采集卡车速传感器图5-6 车速传感器测控系统框图2里程计数中断电路当车轮转动里程检测电路提供了计程脉冲信号后,里程计数中断电路则根据该脉冲信号定时向微机系统发出计数中断请求信号,使系统根据一定的算法对里程数据进行计数计算。里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。其原理如图56所示。 89S51 单片机 霍尔传感器小磁铁车轮图57传感器测距示意图由于A44E 属于开关型的霍尔器件,其工作电压范围比较宽(4.518V),其输出的信号符合TTL 电平标准,可以直接接到单片机的IO 端口上,而且其最高检测频率可达到1MHZ。集成开关型霍耳传感器原理如图5-8,A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D 和OC 门输出E 五个基本部分组成。在输入端输入电压CC V ,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差H V 输出,该H V 信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC 门输出。当施加的磁场达到.工作点.(即OP B )时,触发器输出高电压(相对于地电位),使三极管导通,此时OC 门输出端输出低电压,通常称这种状态为.开.。当施加的磁场达到.释放点.(即rP B )时,触发器输出低电压,三极管截止,使OC 门输出高电压,这种状态为.关.。这样两次电压变换,使霍耳开关完成了一次开关动作。图58 集成开关型霍耳传感器原理图其集成霍耳开关外形及接线如图59 所示。图59集成霍耳开关外形及接线我们选择了P3.2 口作为信号的输入端,内部采用外部中断0(这样可以减少程序设计的麻烦),车轮每转一圈(我们设车轮的周长是1 米),霍尔开关就检测并输出信号,引起单片机的中断,对脉计数,当计数达到1000 次时,也就是1 公里,单片机就控制将金额自动的加增加,其计算公式:当前单价 公里数=金额。5.5数据显示单元的设计设计使用一个定时/计数器每1/10 s向主机发一次中断请求信号,并利用并行接口电路完成对时钟的实时显示功能。同时,利用动态扫描电路完成对出租车的起价和当前累计价的显示。由于设计要求有单价(2 位)、路程(2 位)、总金额(3 位)显示输出,加上我们另外扩展了时钟显示(包含时分秒的显示),采用LCD 液晶段码显示,在距离屏幕1 米之外就无法看清数据,不能满足要求,而且在白天其对比度也不能够满足要求,因此我们采用6 位LED数码管的分屏显示,如图510所示:图510 a 时钟显示(图中显示为12点34分46秒)图510 b 总金额和单价显示(图中显示为总金额12.3元,每公里4.6元)图510 c路程和单价显示(图中显示为总路程12公里,当前单价4.6 元)图510 d单价调整显示(图中显示为右起白天单价4.6元/晚上7.8/中途等待1.2 元)数据的分屏的显示是通过按键S1 来实现切换的,如图511所示。图511 S1切换显示屏在出租车不走的时候,按下S1,可以实现数据的分屏显示;车在行走的时候只有总金额和单价显示屏在显示,当到达目的地的时候,客户要求查看总的里程的时候,就可以按下S1 切换到里程和单价显示屏,供客户查询。显示电路的电路原理图见附图二所示。从单片机串口输出的信号先送到左边的移位寄存器(74HC164),由于移位脉冲的作用,使数据向右移,达到显示的目的。移位寄存器74HC164还兼作数码管的驱动,插头1(header1)接电源,插头2(header2)接数据和脉冲输出端。电路中的三个整流管D1D3 的作用是降低数码管的工作电压,增加其使用寿命。5.6 AT24C02 掉电存储单元的设计掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02 是ATMEL 公司的2KB 字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40 年以上,而且采用8 脚的DIP 封装,使用方便。其电路如图5-12所示。图512 掉电存储电路原理图图中R8、R10 是上拉电阻,其作用是减少AT24C02 的静态功耗,由于AT24C02 的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。5.7启动及清除电路在系统电路中,设计一个启动/清除按钮,用来作为启动里程计数或清除里程数计数的开关。将该按钮开关接到微机系统的某个中断请求线上,当开关被按下一次时就作为计程启动中断请求;再按下一次时,就作为系统的计程清0中断处理。5.8按键单元的设计电路共采用了四个按键,S1、S2、S3、S4,其功能分别是:S1 分屏显示切换按键,S2功能设定按键,S3 ./白天晚上切换按键,S4 ./中途等待开关。第六章 软件设计6.1 软件设计该系统软件采用汇编语言编制,模块化设计,分为主程序,脉j巾中断程序,空车牌中断程序,键盘中断程序,日历时钟芯片中断程序,打印及显示程序。在空车牌中断程序中完成对出租车营运状态的判断;在脉冲中断程序中完成计量计价工作;日历时钟芯片每秒钟向80C31发中断请求,在中断程序中完成等候计时工作或者时钟显示工作。键盘中断程序用于完成各次营运数据的查寻工作。结构框图如6-1图所示主程序定时中断服务程序里程计数中断服务程序中途等待中断服务程序启动/清除计程中断服务程序显示子程序服务程序键盘服务程序图6-1 系统软件结构框图该计程计价系统的软件设计分为以下几个模块:1主程序模块在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。当主程序判断出有“启动计程中断”发生时,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将已行走的里程数和当前累计价格送显示电路显示出来。当主程序判断出有“清除计程中断”产生时,将显示电路中的当前行驶里程数和运行累计价格清0,并重新进行初始化过程。其程序流程如图6-5所示.当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。2定时中断服务程序在定时中断服务程序中,需要完成对行车时间的累加计数,并将该时间数据和当前时钟送显示电路进行实时显示。在定时中断服务程序中,每100ms 产生一次中断,当产生10 次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。如图6-2所示定时中断定时处理键码分析功能键分别执行各自模块显示中断返回有按键否?有无有无图6-2 定时中断服务程序流程图 3里程计数中断服务程序当里程计数器对里程脉冲计满一定数值时,就由里程计数中断电路向微机发出中断请求,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数的累加操作,并将结果存入里程寄存器中。每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000 次时,就有程序将当前总额,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。如图6-3所示传感器产生中断信号中断信号处理键码分析功能键分别执行各自模块显示中断返回有按键否?有无有无图6-3 里程计数中断服务程序流程图4中途等待中断服务程序当在计数状态下霍尔开关没有输出信号,片内的T1 定时器便被启动,每当计时到达10分钟,就对当前金额加上中途等待的单价,以后每十分钟都自动加上中途等待的单价。当中途等待结束的时候,也就自动切换到正常的计价。如图6-4所示中途等待产生中断定时器启动中途等待结束正常计价显示中途等待中断服务程序图6-4 中途等待中断服务程序流程图5启动/清除计程中断服务程序当系统有启动/清除中断请求产生时,我们可以设定第一次中断为启动中断,第二次中断为清除中断,并在中断服务程序中将标志寄存器的内容相应置“1”或清“0”。其中,标志为“1”时表示本次中断是启动中断;为“0”时表示是清除中断。6显示子程序服务程序由于是分屏显示数据,所以就要用到4 个显示子程序,分别是:时分秒显示子程序(HMS_DIS)、金额单价显示子程序(CP_DIS)、路程单价显示子程序(DP_DIS)、单价调节子程序(PA_DIS)。7键盘服务程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。6.2 流程图1主程序流程图主程序流程图如图65所示:图65主程序流程图2计价流程图计价流程图如图66 所示:图66 计价流程图3单价时间调整流程图单价时间调整流程图如图67所示:图67 单价时间调整流程图第七章 程 序 设 计7.1 主程序清单出租车计价器程序ORG 0000HZ8279 EQU 0FF82HD8279 EQU 0FF80HINII8279:MOV DPTR,#Z8279MOV A, #0D1HMOVX DPTR,AWAIT:MOVX A, DPTRJB ACC.7, WAITMOV A,#00H MOVX DPTR,AMOV A,#2AHMOVX DPTR,A;-8279初始化MOV A,#00HPUSH PSWPUSH DPHPUSH DPLPUSH ACCKK:MOV DPTR,#Z8279MOVX A,DPTRANL A,#07HJNZ READMOV A,#00HSJMP KK-是否有键按下;READ: MOV A,#40HMOVX DPTR,AMOV DPTR,#D8279MOVX A,DPTRCJNE A,#0EH,KK-是否是开车键0EPOP ACCPOP DPLPOP DPHPOP PSWMOV R4,#00HAG:MOV A,#00H-再次启动TT: MOV R6,#8DL3: MOV R7,#200DL2: MOV R5,#250DL1:NOPDJNZ R5,DL1DJNZ R7,DL2 DJNZ R6,DL3-产生一个延时ADD A,#01H-路程自动加一PUSH ACCMOV DPTR,#Z8279 MOVX A,DPTRANL A,#07HJNZ READ1SJMP GO1READ1:MOV A,#40HMOVX DPTR,AMOV DPTR,#D8279MOVX A,DPTRCJNE A,#0FH,GO1-是否是停车键0FLJMP OVERGO1: POP ACCPUSH ACCPUSH ACCMOV B,#100DIV ABMOV 76H,AMOV A,#10XCH A,BDIV AB-数值转换为非压缩BCD码MOV 74H,BMOV 75H,AMOV 77H,#00HPOP ACC CJNE A,#2,LLLL: JC L2SUBB A,#2MOV B,#2MUL ABADD A,#5MOV R3,AAJMP L4L2:MOV A,#5; -由路程算出票价L4:MOV B,#100DIV ABMOV 72H,AMOV A,#10XCH A,B-数值转换为非压缩BCD码DIV ABMOV 70H,BMOV 71H,AMOV 73H,#0DISLED: PUSH DPH-显示PUSH DPLMOV DPTR, #Z8279MOV A,#90HMOVX DPTR,AMOV R0,#70HMOV R7,#08H MOV DPTR,#D8279DL0:MOV A,R0ADD A,#0CHMOVC A,A+PCMOVX DPTR,AINC R0DJNZ R7,DL0POP DPLPOP DPHPOP ACCAJMP TT LEDSEG:DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FH,77H,7CHDB 39H,5EH,79H,71HOVER:MOV R1,#70H-如果停车把路程和票价以压缩的BCD码保存起来MOV R0,#60HBC:MOV A,R0MOV R3,#4ADD A,R4MOV R0,ATOG1: MOV B,R1ANL B,#0FHINC R1MOV A,R1ANL A,#0FHSWAP AORL A,BMOV R0,AINC R1INC R0DJNZ R3,TOG1INC R4INC R4INC R4INC R4WAIT1:MOV DPTR,#Z8279MOVX A,DPTRANL A,#07HNZ READ2SJMP GO2READ2: MOV A,#40HMOVX DPTR,AMOV DPTR,#D8279MOVX A,DPTRCJNE A,#0EH,GO2-等待再次拉客LJMP AG-等待是否回放GO2:CJNE A,#07H,WAIT1AJMP HFFHFF:MOV R0,#60HHF1:MOV R4,#4MOV R1,#70HHF:MOV A,R0MOV A R0MOV B,R0ANL A,#0FHMOV R1,AANL B,#0F0HMOV A,BSWAP AINC R1MOV R1 AINC R0INC R1DJNZ R4,HFMOV A,R0DISLED1: PUSH ACCPUSH DPHPUSH DPLMOV DPTR,#Z8279MOV A,#90HMOVX DPTR,AMOV R0,#70HMOV R7,#08H MOV DPTR,#D8279DL:MOV A,R0ADD A,#0BHMOVC A,A+PCMOVX DPTR,AINC R0DJNZ R7,DLPOP DPLPOP DPLLJMP DDLEDSEG1:DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FH,77H,7CHDB 39H,5EH,79H,71HDD: MOV DPTR,#Z8279MOVX A,DPTRANL A,#07HJNZ READ4SJMP DDREAD4: MOV A,#40HMOVX DPTR,AMOV DPTR,#D8279MOVX A,DPTRCJNE A,#07H,AGGPOP ACCMOV R0,AAJMP HF1AGG:LJMP AG等待再次拉客END这段程序完成的功能是:用单片机实现出租车记价器计价功能。它的功能要求如下:按开车键后,显示路程和票价,按停车键,显示总的路程和票价,并将存储。再按下开车键,记价器附初值,重新显示当前路程和票价,再按停车键,显示总的路程和票价,并再次存储。多次存储后,按一次回放键,显示第一次的票价和路程,按两次停车键,显示第二次的票价和路程,依次按回放键,依次显示跑过的路程和票价。 7.2 计价器子程序清单DAY_PRICEEQU 6FHNIGHT_PRICEEQU 6EHMIDWAY_PRICEEQU 6DHSTART_PRICEEQU 6CHCOUNTL EQU 6BHCOUNTH EQU 6AHM100 EQU 69H ;-外部中断次数DISTANCE EQU 68H ;-行车距离MS100 EQU 67HSEC EQU 66HMIN EQU 65HHOUR EQU 64HLEDSL EQU 63H ;-时分钞显示缓冲区LEDSH EQU 62HLEDML EQU 61HLEDMH EQU 60HLEDHL EQU 5FHLEDHH EQU 5EHLEDDANJIAL EQU 5DH ;-总额,单价显示缓冲区LEDDANJIAH EQU 5CHLINE_ EQU 5BHLEDCOUNT1 EQU 5AHLEDCOUNT2 EQU 59HLEDCOUNT3 EQU 58HLEDDANJIA2L EQU 57H ;-路程,单价显示缓冲区LEDDANJIA2H EQU 56HLINE_ EQU 55HLINE_ EQU 54HLEDDISTANCEL EQU 53HLEDDISTANCEH EQU 52HLEDDAY_PL EQU 51H ;-中途,晚上,白天显示缓冲区LEDDAY_PH EQU 50HLEDNIG_PL EQU 4FHLEDNIG_PH EQU 4EHLEDW_PL EQU 4DHLEDW_PH EQU 4CHS1 BIT P1.0S2 BIT P1.1S3 BIT P1.2S4 BIT P1.3S11 EQU 4BHS22 EQU 4AHS33 EQU 49HS44 EQU 48HM1 EQU 47HH1 EQU 46HM2 EQU 45HH2 EQU 44HPRICE EQU 43HORG 0000HAJMPMAINORG 0003HAJMPTOORG 000BHAJMPTOTIMEORG 001BHAJMPTOSTARTORG 0030HMAIN: MOV SP,#70HMOV TMOD, #11HMOV TH0, #3CHMOV TL0, #0B0HMOV TH1, #3CHMOV TL1, #0B0HMOV 22H, #0AHSETBEASETBTR0SETBEX0SETBIT0SETBET0SETBET1; -RAM单元初始化MOV R7,#34MOV R0,#69HLOOPL:MOV R0,#0DEC R0DJNZR7,LOOPLMOV COUNTL, #00H ; -起步价MOV COUNTH, #05HMOV DAY_PRICE,#25H ; -白天价格初始化MOV NIGHT_PRICE,#30H ; -晚上价格初始化MOV MIDWAY_PRICE,#10H ; -中途等待初始化MOV START_PRICE, #50H ; -起步价初始化MOV S11, #0MOV S22, #0MOV S33, #0MOV S44, #0MOV DISTANCE, #02HMOV HOUR, #12H-*键盘第一层扫描程序;(键盘扫描主程序)*KEY_MAIN: SETB TR0ACALL HMS_DISACALL T100MSDACALL T100MSDACALL T100MSDJB S1, KEY_MAINACALL T10MSDJB S1, KEY_MAINJNB S1,$SJMP WAI1WA1: JB S1, K1ACALL T10MSDJB S1, K1WAIT1: JNB S1, WAIT1WAI1: ;INC S11;MOV A, S11;CJNE A, #1, N1;MOV M1, MIN; MOV H1, HOURMOV R0, #LEDDANJIALMOV R2, #6CLR AMOV COUNTL,AMOV COUNTH,AMOV M100, AMOV DISTANCE,ABK1: MOV R0, ADEC R0DJNZ R2, BK1; -起动初始化MOV PRICE,DAY_PRICEMOV COUNTL, #00H; -起步价MOV COUNTH, #05H;MOV DISTANCE,#02HLCALL CP_DIS; -总金额和单价显示K1: JB S2, K2ACALL T10MSDJB S2, K2WAIT2: JNB S2, WAIT2INC S22MOV A, S22CJNE A, #1, NEXT1LCALL PA_DISLJMP KEY_DJNEXT1: CJNE A, #2, NEXT2CLR TR0LCALL HMS_DISLJMP KEY_SJNEXT2: CJNE A, #3, K2MOV S22, #0K2: JB S3, K3ACALL T10MSDJB S3, K3WAIT3: JNB S3, WAIT3INC S33MOV A, S33CJNE A, #1, NXT1LCALL DP_DISNXT1: CJNE A, #2, NXT2CLR CMOV A, M2SUBB A, M1MOV M1, AMOV A, H2SUBB A, H1MOV H1, A;LCALL XCSJ_DISNXT2: CJNE A, #3, K3MOV S33, #0LCALL CP_DISK3: JB S4, BK_KEY_MAINACALL T10MSDJB S4, BK_KEY_MAINWAIT4: JNB S4, WAIT4INC S44MOV A, S44CJNE A, #1, NT1MOV PRICE,DAY_PRICELCALL CP_DISNT1: CJNE A, #2, NT2MOV PRICE,NIGHT_PRICELCALL CP_DISNT2: CJNE A, #3, NT3MOV PRICE,MIDWAY_PRICESETB TR1LCALL CP_DISNT3: CJNE A, #4, BK_KEY_MAINMOV S44, #0LJMP KEY_MAINBK_KEY_MAIN: LJMP WA1;* 键盘第二层扫描程序; (单价调整程序);(KEY_DJ) *KEY_DJ: JB S1, KY1ACALL T10MSDJB S1, KY1WAIT5: JNB S1, WAIT5INC S11MOV A, S11CJNE A, #1,NEXT11LJMP DAY_PNEXT11: CJNE A, #2,NEXT12LCALL NIG_PNEXT12: CJNE A, #3, KY1LCALL MID_PMOV S11, #0LJMP KEY_MAINKY1: JB S2, KY2ACALL T10MSDJB S2, KY2WAIT6: JNB S2, WAIT6INC S22MOV A, S22CJNE A, #1, NEXT13LCALL PA_DISLJMP KEY_DJNEXT13: CJNE A, #2, NEXT14CLR TR0LCALL HMS_DISLCALL KEY_SJNEXT14: CJNE A, #3, KY2MOV S22, #0LJMP KEY_MAINKY2: AJMP KEY_DJ;*键盘第三层扫描程序; (时间调整程序);(KEY_SJ) *KEY_SJ: JB S1, KEY1ACALL T10MSDJB S1, KEY1WAIT7: JNB S1, WAIT7INC S11MOV A, S11CJNE A, #1,NEXT21LCALL HOU_TNEXT21: CJNE A, #2,NEXT22LCALL MIN_TNEXT22: CJNE A, #3,KEY1MOV S11, #0LJMP KEY_MAINKEY1: JB S2, KEY2ACALL T10MSDJB S2, KEY2WAIT8: JNB S2, WAIT8INC S22MOV A, S22CJNE A, #1, NEXT23LCALL PA_DISLJMP KEY_DJNEXT23: CJNE A, #2, NEXT24CLR TR0LCALL HMS_DISNEXT24:CJNE A, #3, KEY2MOV S22,#0LCALL KEY_SJLJMP KEY_MAINKEY2: AJMP KEY_SJ;*键盘第四层扫描程序; (闪显/加1/减1程序)*DAY_P:SETB F0 ; -调用定时延时标志位LCALL T100MSDLCALL T100MSD;LCALL T100MSD;LCALL T100MSD;LCALL T100MSDMOV LEDDAY_PL, #0AHMOV LEDDAY_PH, #0AHLCALL PA_DIS1;LCALL T100MSDLCALL T100MSDLCALL T100MSD; LCALL T100MSD;MOV A, DAY_PRICE;MOV B, #10;DIV AB;DA A;MOV LEDDAY_PL, B;MOV LEDDAY_PH, ALCALL PA_DIS;AJMP LP1LP1: JB S3, KEY11;LCALL T10MSD;JB S3, KEY11; WAIT9: JNB S3, WAIT9;INC DAY_PRICEMOV A, #1ADD A, DAY_PRICEDA AMOV DAY_PRICE,AMOV A, DAY_PRICECJNE A, #99H, KEY11MOV DAY_PRICE, #0KEY11: JB S4, KEY12LCALL T10MSDJB S4, KEY12MOV A,DAY_PRICEADD A, #99HDA AMOV DAY_PRICE,ACJNE A, #00H, KEY12MOV A, #99HKEY12: JB S1, KEY13ACALL T10MSDJB S1, KEY13WAIT11: JNB S1, WAIT11INC S11MOV A, S11CJNE A, #1,NEXT31LCALL DAY_PNEXT31: CJNE A, #2,NEXT32LCALL NIG_PNEXT32: CJNE A, #3,NEXT33LCALL MID_PNEXT33: CJNE A, #4, KEY13MOV S11, #0KEY13: JB S2, KEY14LCALL T10MSDJB S2, KEY14WAIT12:JNB S2, WAIT12LJMP KEY_MAINKEY14: AJMP DAY_P;-NIG_P: SETB F0 ;-调用定时延时标志位LCALL T100MSDLCALL T100MSD;LCALL T100MSD;LCALL T100MSD;LCALL T100MSDMOV LEDNIG_PL, #0AHMOV LEDNIG_PH, #0AHLCALL PA_DIS1LCALL T100MSDLCALL T100MSD;LCALL T100MSD;LCALL T100MSD;LCALL T100MSDLCALL PA_DISJB S3, KEY21LCALL T10MSDJB S3, KEY21; WAIT13: JNB S3, WAIT13;-MOV A, #1ADD A, NIGHT_PRICEDA AMOV NIGHT_PRICE,ACJNE A, #99H,KEY21MOV NIGHT_PRICE,#0KEY21: JB S4, KEY22LCALL T10MSDJB S4, KEY22; WAIT14: JNB S4, WAIT14;-MOV A, NIGHT_PRICEADD A, #99HDA AMOV NIGHT_PRICE,ACJNE A, #00H, KEY22MOV NIGHT_PRICE,#99HKEY22: JB S1, KEY23ACALL T10MSDJB S1, KEY23WAIT15: JNB S1, WAIT15INC S11MOV A, S11CJNE A, #1,NEXT41LCALL DAY_PNEXT41: CJNE A, #2,NEXT42LCALL NIG_PNEXT42: CJNE A, #3,NEXT43LCALL MID_PNEXT43: CJNE A, #4, KEY23MOV S11, #0LJMP KEY_DJKEY23: JB S2, KEY24LCALL T10MSDJB S2, KEY24WAIT30:JNB S2, WAIT30LJMP KEY_MAINKEY24: AJMP NIG_P;-MID_P: SETB F0 ;-调用定时延时标志位LCALL T100MSD;LCALL T100MSD;LCALL T100MSD;LCALL T100MSDMOV LEDW_PL, #0AHMOV LEDW_PH, #0AHLCALL PA_DIS1LCALL T100MSD;LCALL T100MSD;LCALL T100MSD;LCALL T100MSDLCALL PA_DISJB S3, KEY31LCALL T10MSDJB S3, KEY31; WAIT16: JNB S3, WAIT16; INC MIDWAY_PRICEMOV A, MIDWAY_PRICEADD A, #1DA AMOV MIDWAY_PRICE,ACJNE A, #99H, KEY31MOV MIDWAY_PRICE, #00H;-CJNE A, #100, KEY31MOV MIDWAY_PRICE, #0KEY31: JB S4, KEY32LCALL T10MSDJB S4, KEY32;WAIT17: JNB S4, WAIT17MOV A, MIDWAY_PRICEADD A, #99HDA AMOV MIDWAY_PRICE,ACJNE A, #00H, KEY32MOV NIGHT_PRICE,#99HKEY32: JB S1, KEY33ACALL T10MSDJB S1, KEY33WAIT18: JNB S1, WAIT18INC S11MOV A, S11CJNE A, #1,NEXT51LCALL DAY_PNEXT51: CJNE A, #2,NEXT52LCALL NIG_PNEXT52: CJNE A, #3,NEXT53LCALL MID_PNEXT53: CJNE A, #4, KEY33MOV S11, #0LJMP KEY_DJKEY33: JB S2, KEY34LCALL T10MSDJB S2, KEY34WAIT31:JNB S2, WAIT31LJMP KEY_MAINKEY34: AJMP MID_P;-HOU_T: SETB F0 ;-调用定时延时标志位LCALL T100MSDLCALL T100MSDMOV LEDHL, #0AHMOV LEDHH, #0AHLCALL HMS_DIS1; -直接调用显示,不经过拆分程序LCALL T100MSDLCALL T100MSDMOV SEC, #0LCALL HMS_DISJB S3, KEY41LCALL T10MSDJB S3, KEY41WAIT19: JNB S3, WAIT19MOV A, HOURADD A, #1DA AMOV HOUR,ACJNE A, #24H, KEY41MOV HOUR, #0KEY41: JB S4, KEY42LCALL T10MSDJB S4, KEY42WAIT20: JNB S4, WAIT20MOV A, HOURADD A, #99HDA AMOV HOUR,ACJNE A, #99H, KEY42MOV HOUR, #23HKEY42: JB S1, KEY43ACALL T10MSDJB S1, KEY43WAIT21: JNB S1, WAIT21INC S11MOV A, S11CJNE A, #1,NEXT61LJMP HOU_TNEXT61: CJNE A, #2,NEXT62LJMP MIN_TNEXT62: CJNE A, #3,KEY43MOV S11, #0LJMP KEY_SJKEY43: JB S2, KEY44LCALL T10MSDJB S2, KEY44WAIT32: JNB S2, WAIT32LJMP KEY_MAINKEY44: AJMP HOU_T-MIN_T: SETB F0 ; -调用定时延时标志位LCALL T100MSDLCALL T100MSDMOV LEDML, #0AHMOV LEDMH, #0AHLCALL HMS_DIS1; -直接调用显示,不经过拆分程序LCALL T100MSDLCALL T100MSDMOV SEC, #0LCALL HMS_DISJB S3, KEY51LCALL T10MSDJB S3, KEY41WAIT22: JNB S3, WAIT22MOV A, MINADD A, #1DA AMOV MIN, ACJNE A, #60H, KEY51MOV MIN, #0KEY51: JB S4, KEY52LCALL T10MSDJB S4, KEY52WAIT23: JNB S4, WAIT23MOV A, MINADD A, #99HDA AMOV MIN, ACJNE A, #99H, KEY52MOV MIN, #59HKEY52: JB S1, KEY53ACALL T10MSDJB S1, KEY53WAIT24: JNB S1, WAIT24INC S11MOV A, S11CJNE A, #1,NEXT71LCALL HOU_TNEXT71: CJNE A, #2,NEXT72LCALL MIN_TNEXT72: CJNE A, #3,KEY53SETB TR0MOV S11, #0LJMP KEY_SJKEY53: JB S2, KEY54LCALL T10MSDJB S2, KEY54WAIT33: JNB S2, WAIT33LJMP KEY_MAINKEY54: AJMP MIN_T-时钟中断TOTIME: PUSH PSWPUSH ACCMOV TH0, #3CHMOV TL0, #0B0HINC MS100MOV A, MS100CJNE A, #10,RETURNMOV MS100,#0MOV A, SECADD A, #1DA AMOV SEC,ACJNE A,#60H,RETURNMOV SEC,#0MOV A, #1HADD A, MINDA AMOV MIN,ACJNE A,#60H, RETURNMOV MIN,#0MOV A, #1HADD A, HOURDA AMOV HOUR,ACJNE A, #24H,RETURNMOV HOUR,#0RETURN: POP ACCPOP PSWRETI-外部霍尔中断TO: PUSH PSWPUSH ACCMOV A, R0MOV B, #10DIV ABMOV 20H,A ; -算出当前价格 转100次的钱数,并给20H单元MOV A,#1ADD A,M100MOV M100,AMOV A, M100CJNE A, #100,RETURN1MOV M100,#0INC 21HMOV A,21HCJNE A, #0AH, RETURN1 ; -已经到了1公里MOV 21H,#0MOV A, #1ADD A, DISTANCEDA AMOV DISTANCE,AACALLDP_DISMOV A, PRICEADD A, COUNTLDA AMOV COUNTL,ACJNE A, #10H,RETURN1MOV COUNTL,#0MOV A, #1ADD A, COUNTHDA AMOV COUNTH,ACJNE A, #99H, RETURN1MOV COUNTH,#0ACALL CP_DISRETURN1: POP ACCPOP PSWRETITOSTART: PUSH PSWPUSH ACCMOV TH1, #3CHMOV TL1, #0B0HDJNZ 22H, RETURN2 ; -1S未到返回MOV 22H, #0AHMOV A, #1ADD A, 23H;-23H,存放秒,24H存放分DA AMOV 23H, ACJNE A, #60H, RETURN2MOV 23H, #0MOV A, #1ADD A, 24HDA AMOV 24H,ACJNE A, #10H, RETURN2MOV 24H, #0MOV A, START_PRICEADD A, COUNTLDA AMOV COUNTL,ACJNE A, #10H, RETURN2MOV COUNTL, #0MOV A, #1ADD A, COUNTHDA AMOV COUNTH,ACJNE A, #99H,RETURN2MOV COUNTH,#0RETURN2: POP ACCPOP PSWRETI-* 显示子程序*功能:分四屏幕显示数据,时分秒(HMS_DIS)总额单价(CP_DIS)路程单价(DP_DIS)单价调整(PA_DIS);使用资源:使用第三组寄存器R7,R6,R1,R0;时钟显示(包括时分秒调整)HMS_DIS:PUSHACC ;(hourminutesseconddisplay)PUSHPSWSETBRS1MOV R0,#SEC ;时分秒的拆分(三个字节)MOV R1,#LEDSLMOV R6,#03HLOOP1:MOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAPAANL A, #0FHMOV R1,ADEC R1DEC R0DJNZR6,LOOP1POP PSWPOP ACCHMS_DIS1: PUSH ACCPUSH PSWMOV R7,#06HMOV R0,#LEDSLLOOP: MOVA, R0MOVDPTR,#TABMOVCA,A+DPTRMOV SBUF,ABK: JBCTI,NEXTSJMPBKNEXT: DECR0DJNZR7,LOOPCLRRS1POPPSWPOPACCRET总金额和单价显示CP_DIS:PUSH ACC ;(countpricedisplay)PUSH PSWSETB RS1MOV R0,#COUNTH ;MOV R1,#LEDCOUNT2MOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAPAANL A, #0FHMOV R1,AMOV LEDCOUNT1,COUNTLMOV A,LEDCOUNT1 ;-送总金额低位MOV DPTR,#TABMOVC A, A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV A,LEDCOUNT2 ;-送总金额中位MOV DPTR,#TABMOVC A,A+DPTRCPL ACC.4MOV SBUF,AJNB TI, $CLR TIMOV A,LEDCOUNT3 ;-送总金额高位MOV DPTR,#TABMOVC A,A+DPTRMOVSBUF,AJNB TI,$CLR TICLR RS1MOV SBUF,#0FEH ;-送短线(短线的字型码是0FEH)JNB TI, $CLR TIMOV R0,#PRICE;() ;单价拆分(两个字节)MOV R1,#LEDDANJIALMOV R6,#03HMOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAPAANL A, #0FHMOV R1,ADEC R1MOV A,LEDDANJIAL ;-送单价低位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A, LEDDANJIAH ;-送单价高位MOV DPTR,#TABMOVCA,A+DPTRCPL ACC.4MOV SBUF,AJNB TI,$CLR TIPOP PSWPOP ACCRET路程和单价显示(distance pricedisplay)DP_DIS:PUSH ACC ;PUSH PSWSETB RS1MOV R0,#PRICE ;-单价的拆分(一个字节)MOV R1,#LEDDANJIALMOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAPAANL A, #0FHMOV R1,ADEC R1MOV A,LEDDANJIAL ; -送单价低位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDDANJIAH ; -送单价高位MOV DPTR,#TABMOVCA,A+DPTRCPL ACC.4MOV SBUF,AJNB TI,$CLR TIMOV SBUF,#0FEH ; -送短线JNB TI, $CLR TIMOV SBUF,#0FEH ; -送短线JNB TI,$CLR TIMOV R0,#DISTANCE路程的拆分(一个字节)MOV R1,#LEDDISTANCELMOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAPAANL A, #0FHMOV R1,ADEC R1MOV A,LEDDISTANCEL ; -送路程低位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDDISTANCEH ; -送路程高位MOV DPTR,#TABMOVC A,A+DPTRMOVSBUF,AJNB TI,$CLR TICLR RS1POP PSWPOP ACCRET白天晚上中途等待单价调整PA_DIS:PUSH ACC ;(Priceadjust display)PUSH PSWSETB RS1MOV R0,#DAY_PRICE ;价格调整拆分(三个字节)MOV R1,#LEDDAY_PLMOV R6,#03HLOOP2:MOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAPAANL A, #0FHMOV R1,ADEC R1DEC R0DJNZR6,LOOP2POP PSWPOP ACCPA_DIS1:PUSH ACCPUSH PSWMOV A,LEDDAY_PL ; -白天单价MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A, LEDDAY_PHMOV DPTR,#TABMOVCA,A+DPTRCPL ACC.4MOV SBUF,AJNB TI,$CLR TIMOV A,LEDNIG_PL ; -晚上单价MOV DPTR,#TABMOVCA,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDNIG_PHMOV DPTR,#TABMOVC A, A+DPTRCPL ACC.4MOV SBUF,AJNB TI,$CLR TIMOV A,LEDW_PL ; -中途等待单价MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDW_PHMOV DPTR,#TABMOVC A,A+DPTRCPL ACC.4MOVSBUF,AJNB TI,$CLR TICLR RS1POP PSWPOP ACCRETTAB:DB11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H,0FFH;-*10毫秒延时程序*T10MSD: SETBRS0MOVR4,#12TM:MOVR3,#128TM6:DJNZR3,TM6DJNZR4,TMCLRRS0RETT100MSD: MOV R3, #200D11: MOV R4, #125D12: DJNZ R4, D12DJNZ R3, D11RETEND第八章 测 试 报 告8.1里程计价测试由于试验条件有限,我们采用电动机附带霍尔元件作为车轮,电机为3V 的直流电机,每分的转速可以达到几千转,我们设定电机每转一圈为车轮转动1 米,当电机转动达到1000圈时,就表示已经到达了一公里,系统自动将当前的单价加到总金额上。1白天单价测试表1 的测试条件是:设定白天的单价是2.5 元,起步价为5 元(包含3 公里),分别行驶不同里程测得数据如下表。表1 白天单价测试公里41015374959总金额理论7.522.53590120145实际8233590120145行驶历程理论41015374959实际4.110.21537.248.959误差0.25000.50.2502晚上单价测试表2 的测试条件是:晚上的单价设定为3.0 元,起步价为5 元(包含3 公里),分别行驶不同里程测得数据如下表。表2 晚上单价测试 公里41015374959总金额理论82641107143173实际82641107143173行驶历程理论41015374959实际49.91537.148.959误差00.300.30.303中途等待计价测试表3 的测试条件是:设定在单价为2.5 的情况下已经行驶了10 公里,进行中途等待,分别等待不同的时间(10 分钟为一个单位),起步价为5 元(包含3 公里)。表3 中途等待计价测试 时间当前金额22.5204050607080总金额理论27.532.53537.54042.5实际2833354043误差理论000000实际0.50.500.500.5里程测试数据的分析:通过表1、表2、表3 的数据,我们可以看到系统的计价功能很稳定,误差很小,几乎为零,不过还应该在实际的应用中测试。8.2掉电存储测试表4 掉电存储测试白天单价晚上单价中途等待单价掉电前数据2.73.71.7重新上电后数据2.73.71.7表4 显示的数据表明,系统能在掉电的情况下正确的保存数据,并且能在系统上电将数据读到相应的存储单元。第九章 设 计 总 结 及 展 望 9.1设计总结由于使用的是AT89S51单片机作为核心的控制元件,使用全双工串行口进行通信,其外接显示电路由74LS614 和共阳极数码管构成,实现了扩展并行I/ O 接口的功能,来实现单价,起步价,返程价,郊区价,夜间价,低速价,显示和修改时间等功能,是一个低成本的出租车计价系统。以及灵敏的霍尔开关型器件,电源线路简单实用,除可检测使用中电池性能外,也可用于新购买电池的质量检测,对参数进行适当调整,也用于其它规格Nicd 电池的容量检测或作充电器用。本出租车计价器具有功能强、性能可靠、电路简单、成本低的特点,加上经过优化的程序,使其有很高的智能化水平。但是在我们设计和调试的过程中,也发现了一些问题,譬如计价的金额位数有限,实际的里程可能会很远,会超出我们的显示范围。计价器的设计还不够人性化,比如加上语音的提示功能,可能会更有生命力。,争取使该系统慢慢趋向完美。本系统解决了以往计价器计价不准确、使用寿命短等缺
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:出租车计价器系统设计[含CAD图纸+文档]
链接地址:https://www.renrendoc.com/p-20542280.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!