当前位置:文档之家› 基于单片机系统的出租车计价器

基于单片机系统的出租车计价器

基于单片机系统的出租车计价器
基于单片机系统的出租车计价器

机电信息工程学院

单片机系统课程设计报告

目录

一、设计任务和性能指标 (3)

1.1设计任务 (3)

1.2性能指标 (3)

二、设计方案 (4)

2.1任务分析 (4)

2.2系统设计 (5)

三系统硬件设计 (7)

3.1电源电路 (7)

3.2单片机的最小系统 (8)

3.3 DS1302时钟电路 (9)

3.4显示电路的设计 (10)

3.5按键控制的设计 (11)

3.7复位电路 (13)

四、系统软件设计 (14)

4.1主程序设计 (14)

4.2 子程序设计 (15)

4.2.1 DS1302子程序 (15)

4.2.1 DS1302子程序流程图 (15)

4.2.2 显示子程序 (17)

4.2.2 显示子程序流程图 (19)

4.3 修改时间子程序 (20)

五、调试及性能分析 (21)

5.1调试步骤 (21)

5.1.1硬件调试 (21)

5.1.2软件调试: (21)

5.2性能分析 (21)

六、心得体会 (23)

七、参考文献 (24)

八、附录 (25)

附录1、程序清单 (25)

附录2 系统硬件电路图 (35)

一、设计任务和性能指标

1.1设计任务

出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。

出租车计价器的主要功能是计价显示、时钟显示、根据白天、黑夜、途中等待来调节营运参数、计量数据查询等。要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。

1.2性能指标

1.不同情况具有不同收费标准:白天、晚上、途中等待(>10min开始收

费);

2.数据输出:单价输出、路程输出、总金额输出;

3.按键:启动计时开关、数据显示切换、白天/晚上切换、复位;

4.能手动进行修改单价,但单价设定需密码进入。

二、设计方案 2.1任务分析

出租车计价器基本功能部分是根据里程数来完成总金额的输出。实现方法有两种。

方案一:采用数字电路控制。其原理方框图如图2.1所示。采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且不能调节单价,也不能根据天气调节计费标准,电路不够实用。

移位寄存器

电路

里程传感器

金额显示

单价显示

电源电路及保护电路

图2.1 数字电路实现框图

方案二:采用单片机控制。利用单片机丰富的IO 端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。本方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。

2.2系统设计

图2.1电路系统构成框图

主控芯片使用51系列AT89C52单片机,采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。

时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302。采用DS1302作为主要计时芯片、可以做到计时准确。更重要的是,DS1302可以在很小的电流的后备电源(2.5~5.5V电源,在2.5V时耗电小于300nA)下继续计时,并可编程选择多种充电电流对后备电源进行慢速充电,可以保证后备电源基本不耗电。采用串行数据传输,与单片机硬件连接简单,如果使用时钟芯片DS12887,将采用并行数据传输,占用更多的硬件资源。因此为节省单片机端口,时钟芯片采用DS1302。

它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。霍尔器件以霍尔效应为其工作基础。霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高(可达1MHZ),耐振动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。活儿现行器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、无知重复精度高(可达Im级)。采用了各种步长和保护措施的霍尔器件的工作温度范围宽,可达-55摄氏度~150摄氏度。

数据显示模块采用的是LED数码管显示,LCD虽然也能实现显示功能,但在距屏幕1米之外就无法看清数据,不能满足要求,而且在白天其对比度也不能满足要求,因此建议采用LED数码管显示。数码管总共用了12个,其中第一行显示小时和分钟,第二行第一个显示单价,后面3个显示里程数,最后一行显示总价。

按键控制模块使用了3个脉冲开关,其中一个开关负责换位,另一个负责改

数,第三个按键负责切换至等待时间。

三系统硬件设计

3.1电源电路

因为出租车上的电压时12V,而芯片所需供电电压是5V,所以选择LM7805的经典电路电源电路完成12V转5V的目的。电源电路图如下图3.1所示:

图3.1电源电路图

3.2单片机的最小系统

单片机最小系统采用的是STC89C54芯片,STC89C54是一种低功耗、高新能CMOS 8为微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51铲平指令和引脚完全兼容。偏上FLASH允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有平桥的8为CPU何在系统可编程Flash,使得STC89C54为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

STC89C54具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16为定时器/计数器,一个6向量2级终端结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0HZ 静态逻辑操作,支持2中软件可选择节点模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、终端继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。单片机最小系统电路图如下图3.2所示:

图3.2单片机最小系统电路图

3.3 DS1302时钟电路

若采用单片机计时,一方面需要采用计数器,占用阴间资源,另一方面需要设置终端、查询等,同样耗费单片机的资源,并且使用单片机的时钟误差比较大,当长时间使用后会,会出现很大错误,而在系统中采用DS1302则能很好的解决这个问题。DS1302时钟电路图如图3.3所示:

图3.3 DS1302时钟电路图

3.4显示电路的设计

在显示模块需要对时间、单价、总价、路程、等待时间进行显示,采用的是LED数码管,数码管总共用了12个,其中第一行显示小时和分钟,第二行第一个显示单价,后面3个显示里程数,最后一行显示总价。

显示电路图(一个数码管)如下图3.4所示:

图3.4 显示电路图

3.5按键控制的设计

按键的设置是为了能够手动更改时间和单价,还有就是手动切换到等待时间的地

方,按键采用的是脉冲按键。

按键设置电路图如图3.5所示:

图3.5按键控制电路图

3.6掉电保护

掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。掉电保护的芯片较多,如AT24C02 是ATMEL 公司的2KB 字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8 脚的DIP 封装,使用方便。掉电保护电路图如下图3.6所示:

图3.6 掉电保护电路图

3.7复位电路

复位功能采用的是MAX813L芯片。MAX813L是具有监控电路的微处理芯片,它具有4个功能:1具有独立的看门狗计时器,如果看门狗输入在1.6秒内无变化,就会产生看门狗输出;2掉电或电源电压低于1.25V时,产生掉电输出;3上电时能自动产生200ms宽的复位脉冲;4具有人工复位功能,当人工复位端输入低电平时,产生复位信号输出。

复位电路如图3.7所示:

图3.7复位电路图

四、系统软件设计

4.1主程序设计

程序的难度主要就是在数码管的显示和外部脉冲的采集部分,分别采用

74LS273芯片对数码管进行段选,使数码管显示对应的数,另外使用74LS154对数码管进行位选,选择哪个数码管亮,采用的是动态显示。还有外部脉冲的收集,需要对里程数进行显示,所以必须要先进行脉冲的采集。

程序流程图如图4.1所示:

图4.1程序流程图

4.2 子程序设计

4.2.1 DS1302子程序

4.2.1 DS1302子程序流程图

显示单价、总价、路程、时间等数据,循环扫描进行显示。(如果在一分钟内没有脉冲,开启终端,显示秒分子程序。

DS1302子程序流程图如4.2.1所示:

图4.2.1 DS1302子程序流程图

4.2.2 显示子程序

void sett() //显示等待时间及单价、总价、路程子程序{TAB[0]=Read1302(0x83)/10;

TAB[1]=Read1302(0x83)%10;

TAB[7]=Read1302(0x81)/10;

TAB[6]=Read1302(0x81)%10;TAB[8]=3;

TAB[2]=Coo/100;TAB[3]=Coo/10%10;

TAB[4]=Coo%10;

if(TAB[4]<=3&&TAB[2]==0&&TAB[3]==0)

{TAB[11]=8;}

else{

TAB[11]=(8+(Coo-3)*TAB[8])%10;}

TAB[5]=TAB[2]*TAB[8]/10;

TAB[9]=Coo/100*TAB[8]+Coo%100*TAB[8]/100;

TAB[10]=(Coo/10*TAB[8]+Coo%10*TAB[8]/10)%10;}

void mmm() //显示时间子程序

{ TAB[0]=Read1302(0x85)/10;

TAB[1]=Read1302(0x85)%10;

TAB[7]=Read1302(0x83)/10;

TAB[6]=Read1302(0x83)%10;TAB[8]=3;} TAB[11]=(8+(Coo-3)*TAB[8])%10;}

TAB[5]=TAB[2]*TAB[8]/10;

TAB[9]=Coo/100*TAB[8]+Coo%100*TAB[8]/100;

TAB[10]=(Coo/10*TAB[8]+Coo%10*TAB[8]/10)%10;}

void mm() //非计价时的显示时间

{

TAB[0]=Read1302(0x85)/10;

TAB[1]=Read1302(0x85)%10;

TAB[7]=Read1302(0x83)/10;

TAB[6]=Read1302(0x83)%10;TAB[8]=3;

TAB[2]=Coo/100;TAB[3]=Coo/10%10;

TAB[4]=Coo%10;

if(TAB[4]<=3&&TAB[2]==0&&TAB[3]==0)

{TAB[11]=8;}

else{

TAB[11]=(8+(Coo-3)*TAB[8])%10;}

TAB[5]=TAB[2]*TAB[8]/10;

TAB[9]=Coo/100*TAB[8]+Coo%100*TAB[8]/100; TAB[10]=(Coo/10*TAB[8]+Coo%10*TAB[8]/10)%10;}

4.2.2 显示子程序流程图

显示子程序流程图如图4.2.2所示:

图4.2.2 显示子程序流程图

相关主题
文本预览
相关文档 最新文档