出租车计价器设计资料文档格式.docx
《出租车计价器设计资料文档格式.docx》由会员分享,可在线阅读,更多相关《出租车计价器设计资料文档格式.docx(29页珍藏版)》请在冰点文库上搜索。
![出租车计价器设计资料文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/ea39b752-1037-4f12-aa96-41373d80d724/ea39b752-1037-4f12-aa96-41373d80d7241.gif)
参考文献……………………………………………………………………………14
附1:
源程序代码…………………………………………………………………15
附2:
系统原理图…………………………………………………………………23
1.1引言
单片机课程设计是单片机技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。
出租车保证乘客快速、轻松地到达目的地,已经成为城市交通的重要组成部分。
从加强行业管理以及减少司机与乘客纠纷的角度考虑,一台性能良好的计价器是很有必要的。
采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件较多,故障率较高,因此在实现上有一定的困难。
而采用单片机作为核心的设计,相对来说容易实现并且功能强大。
要将出租车计价计价系统产品化,应该根据客户不同的需求进行不同的设计,以便根据实际情况改变计价模式。
1.2功能要求(宋体、小四,固定值22磅。
以下相同要求)
1.3设计目的与意义
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有应用价值的。
2.1系统原理
出租车计价器的计价结果是乘客的乘坐方式与行驶路程共同决定的。
例如单程乘坐与往返乘坐的价格是不同的,这可在软件上设置不同的参数实现。
而行驶路程可通过出租车的车轮周长与一段时间内的车轮旋转圈数相乘得出。
现利用电机的转片的旋转来模拟车轮的转动,霍尔传感器可感应出附着小磁铁的旋转圈数并将该信号传至STC89C52单片机中处理后便可计算出当前的行驶路与速度(低于5KM/H)时进入等待模式。
键盘通过扫描方式实现计价模式切换、暂停/启动、显示模式切换等功能。
作品主要由四部分构成,分别是主控模块、数据采集模块、显示模块和按键模块。
图1
2.2单片机介绍
课程设计中采用的主控芯片STC89C52型单片机,它具有如下优点:
(1)拥有完善的外部扩展总线,通过这些总线可方便地扩展外围单元、外围接口等。
图2
(2)该单片机内部拥有4K字节的FLASHROM程序存储器空间和256字节的RAM数据存储空间,完全可以满足程序的要求。
由于该芯片可以擦写,故可重复使用。
如果更改程序内容,可将芯片拿下重新烧写。
(3)该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。
2.3最小系统
本系统主要由STC89C52单片机,振荡电路,复位电路等组成,作为核心来控制整个系统的正常运作。
图3
2.4数据采集模块
霍尔传感器以霍尔效应为工作机理,作为一种磁感应传感器,可灵敏地检测到磁场及其变化,因而经常在与磁场有关的场合用到它。
霍尔传感器有着众多优点,如结构牢固、重量轻、体积小、寿命长、功耗小、频率高、耐震动、安装方便、不易腐蚀等。
数据采集模块便是将霍尔传感器的集成电路安装在车轮上方的铁板上,将磁铁安装在车轮上,旋转的车轮将磁铁对准集成电路时,霍尔传感器会输出一个脉冲信号,送至单片机,经过单片机的计算处理,将行驶路程送到显示模块显示出来。
其原理示意图如图所示。
霍尔传感器
图4
2.5显示模块
本设计显示模块使用的是四位八段共阴极数码管
图5
2.6按键模块
本设计采用2*3按键组,共6个按键。
其功能分别为:
Key1:
清零键
Key2:
程切换显示等待时间和里程
Key3:
往返计费方式
Key4:
暂停键
Key5:
切换显示金额与里程
其原理图如图所示:
图6
3.1总体流程
系统的流程图如图所示
图7
3.2数据计算部分
计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:
总金额=起步价+(里程-3)*单价+等待时间*等待单价;
否则,执行公式:
总金额=起步价+等待时间*等待单价。
对于里程数采用外部中断零来记录,车轮没转一周,霍尔传感器发一个脉冲然后进入中断子程序,对相应的变量进行更新。
子程序如下:
voidjisuan()
{
distance=round/10+wait_ten_ms/3000;
//车轮转57圈为100m,等待时间30s为100m
if(distance<
=30)
cost=50;
price=20;
//单程价格
if(key2_flag)price=15;
//往返价格
if(distance>
30)
cost=price*(distance-30)/10+50;
wait=minute*100+second;
}
3.3键盘扫描部分
键盘扫描才用查询方式,当有按键按下时就对相应的标志进行取反,或调用其他子函数,在消抖过程中,这里将数码管显示程序潜入以保证显示的稳定。
voidkeyscan()
{
H1=0;
H2=1;
if(L1==0)
{delay(5);
{key0=0;
initial_data();
key0=1;
}}
if(L2==0)
if(L2==0)
{key1=0;
key1_flag=!
key1_flag;
key1=1;
}}
if(L3==0)
{
delay(5);
{key2=0;
key2_flag=!
key2_flag;
key2=1;
}
H1=1;
H2=0;
{key3=0;
zanting();
key3=1;
key4_flag=!
key4_flag;
led1=!
//指示,单程还是往返,灯低电平点亮;
往返亮;
led2=key3_flag;
//指示,暂停时亮;
led3=flag;
//指示是否等待;
led4=key1_flag;
//切换指示,显示路程还是等待时间;
led6=key4_flag;
//切换指示,熄灭代表金额
delay1();
}
3.4显示部分
显示程序利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。
本设计采用两个四个一组的八位数码管来显示,一组显示金额,另一组显示路程与等待时间配合按键来切换。
数据端都用单片机P1口,片选端分别接在P2口的高四位和低四位。
voidled_show()
//-----显示路程或者等待时间----
if(!
key4_flag)
{if(key1_flag)
fenli(distance);
else
fenli(wait);
P0=0xf7;
P1=dul[gewei];
delay1();
P0=0xfb;
if(key1_flag)
P1=dul[shiwei]|0x80;
//如果是路程,点亮小数点儿
P1=dul[shiwei];
//如果是时间,不需要点亮小数点儿
P0=0xfd;
if(key1_flag)P1=dul[baiwei];
elseP1=dul[baiwei]|0x80;
P0=0xfe;
P1=dul[qianwei];
P0=0xff;
}
//-----显示价格----
if(key4_flag)
{fenli(cost);
P0=0xfd;
P1=dul[baiwei];
P0=0xfe;
}
4Proteus软件仿真
4.1Proteus软件介绍
Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
4.2调试与测试
利用软件画出整体电路图如下图所示。
通过调试,我们很好地实现了对整个系统的模拟,同时,我们做了一些测试,来检验本设计的精确程度。
假定乘客的乘车方式为单程,没有等待时间,则理论与实际的乘车费用对比如下表所示。
2KM
4KM
6KM
8KM
10KM
理论(元)
5
7
11
15
19
实际(元)
设置乘车方式为双程时,没有等待时间,理论与实际乘车费用对比如下表所示。
6.5
9.5
12.5
15.5
下面设置乘车方式为单程,假设汽车行驶5KM后进入等待,之后的理论与实际乘车费用之比如下表所示。
3Min
5Min
7Min
9Min
9
10.2
经过以上三个表的对比,可以看出,本设计准确可靠,很好地实现了实验的功能要求。
5课程设计体会
作为电气工程及其自动化专业的大三学生,我们觉得做单片机课程设计是十分有必要的。
在已度过的大学时间里,我们大部分是仅仅学习了专业课的理论知识,但实践能力却没有什么提高。
如何把专业课理论知识运用到实践中去呢?
课程设计为我们提供了良好的实践平台。
在做本次课程设计的过程中,为了让设计完善,我们查阅了大量的已有设计资料了。
我们发现,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;
要有一个清晰的思路和一个完整的的软件流程图;
在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路。
在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们在小组中互相讨论,交流经验,遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大,这也激发了我今后努力学习的兴趣,我想这将对我们以后的学习产生积极的影响!
参考文献
1.何希才,《传感器及其应用电路》,北京,电子工业出版社
2.邱关源,《电路》,北京,高等教育出版社
3.孙余凯,《传感器应用电路300例》,北京,电子工业出版社
4.余发山、王福忠,《单片机原理及应用系统》,徐州。
中国矿大出版社
附1源程序代码
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharqianwei,baiwei,shiwei,gewei;
unsignedcharcodedul[10]={
0x3f,0x06,0x5b,0x4f,//0~3
0x66,0x6d,0x7d,0x07,//4~7
0x7f,0x6f};
//段码表示0-9
uinttt,aa,round,distance,cost,price,wait;
//定义路程、价钱、等待时间及一些全局的变量等;
uchardengdai,second,minute;
unsignedlongwait_ten_ms;
//记录等待时间多少个10ms
//按键的定义,所有按键按下去为低电平
sbitkey0=P2^4;
//清零
sbitkey1=P2^5;
//切换路程与等待时间
sbitkey2=P2^6;
//单程还是往返设置
sbitkey3=P3^4;
//暂停按钮
sbitkey4=P2^4;
sbitled1=P2^0;
//双程
sbitled2=P2^1;
//暂停
sbitled3=P2^2;
//堵车
sbitled4=P2^3;
sbitled6=P2^5;
//切换
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;
bitkey1_flag;
//由于按键会自动复位,这个为标志位
bitkey2_flag;
bitkey3_flag;
bitkey4_flag;
bitflag;
//初始化函数
voidinitial_data(void)
P2=0XFF;
P0=0XFF;
distance=0;
cost=0;
second=0;
minute=0;
wait_ten_ms=0;
key1_flag=1;
key2_flag=0;
//单程or往返,接指示灯;
key3_flag=1;
//暂停,接指示灯;
key4_flag=0;
flag=0;
round=0;
dengdai=0;
led1=1;
//双程指示
led2=1;
//暂停指示
led3=1;
//堵车指示
led4=1;
//等待时间切换标志
//暂停程序
voidzanting(void)
if(key3_flag)
{
EX0=1;
//关闭中断和定时器
TR0=1;
else
EX0=0;
TR0=0;
key3_flag=!
key3_flag;
//计算数据处理
//显示的辅助程序,分离一个数的各个数字
voidfenli(uinttemp)//数据的分离处理
if(temp>
9999)temp=9999;
qianwei=temp/1000;
baiwei=temp/100%10;
shiwei=temp%100/10;
gewei=temp%10;
//延时约1ms,数码管显示时使用
voiddelay1(void)
uinti;
for(i=0;
i<
290;
i++);
//显示程序;
//延时时基为1ms
voiddelay(uintx)
inti,j;
for(i=x;
i>
0;
i--)
for(j=340;
j>
j--);
//键盘的扫描
voidkeyscan()
led2