基于MCS51单片机出租车计价器的设计.docx

上传人:b****6 文档编号:7739794 上传时间:2023-01-26 格式:DOCX 页数:19 大小:684.81KB
下载 相关 举报
基于MCS51单片机出租车计价器的设计.docx_第1页
第1页 / 共19页
基于MCS51单片机出租车计价器的设计.docx_第2页
第2页 / 共19页
基于MCS51单片机出租车计价器的设计.docx_第3页
第3页 / 共19页
基于MCS51单片机出租车计价器的设计.docx_第4页
第4页 / 共19页
基于MCS51单片机出租车计价器的设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于MCS51单片机出租车计价器的设计.docx

《基于MCS51单片机出租车计价器的设计.docx》由会员分享,可在线阅读,更多相关《基于MCS51单片机出租车计价器的设计.docx(19页珍藏版)》请在冰豆网上搜索。

基于MCS51单片机出租车计价器的设计.docx

基于MCS51单片机出租车计价器的设计

 

微型计算机技术专业方向课程设计

 

任务书

 

题目名称:

基于MCS-51单片机的

出租车计价器的设计

 

专业自动化班级122班

姓名张欣学号********2

 

学校:

青岛理工大学自动化学院

*******

2014年12月9日

课程设计任务书

课程名称:

微型计算机技术

设计题目:

基于MCS-51单片机的

出租车计价器的设计

系统硬件要求:

出租车计价按4公里起步费为7元,每公里2元计费,无等待计费功能。

要求每1s采样一次,假设轮胎周长1米,使用中断完成,费用精度要求1元。

显示部分为LED动态显示设计;并有键盘设计;

硬件设计:

1)最小系统设计:

AT89C51单片机为本设计的控制器,包括外扩ROM,RAM各32M(其大小由设计者自己设计),系统时钟电路、复位电路等构成的最小系统;

2)接口电路的设计:

设计者扩展一个并行接口〔8155或8255〕,键盘设计由设计者根据需要设计键盘的数量,显示采用LED显示,显示电路也根据显示的内容设计;

3)有开机显示状态(如显示000000);

4)在完成基本设计功能同时可以增加功能。

软件设计:

1)主程序设计(包括初始化芯片,定时器,中断以及SP指针等);

2)各功能子程序设计,温度采集计

 

算子程序、键盘子程序\显示子程序设计,定时,中断程序等;)

其他要求:

1、每位同学独立完成本设计。

2、依据题目要求,提出系统设计方案。

3、设计系统电路原理图。

调试系统硬件电路、功能程序。

编制课程设计报告书并装订成册,报告书内容(按顺序)

(1)报告书封面

(2)课程设计任务书

(3)系统设计方案的提出、分析

(4)系统中典型电路的分析

(5)系统软件结构框图

(6)系统电路原理图

(7)源程序

(8)课设字数不少于2000字

成绩

评语

 

摘要

本文是以MCS-51单片机系统为基础的,通过霍尔传感器检测车轮转动,生成计数脉冲,由MCS-51单片机内部计数器进行计数,从而计算出行驶距离,以及随行驶距离变化而变化的收费金额,通过多位数码管显示出来。

由于51单片机内部ROM容量小,采用2764扩展外部ROM来存储程序。

本系统最大化地利用了单片机的内部资源,结构简单,性能稳定,操作方便。

关键词:

计价器,MCS-51,霍尔传感器,2764

 

 

第一章系统总体设计

1.1系统概述

根据课程设计要求的性能指标,本系统要满足一定精度的价格计算的基本功能,同时系统还具有动态显示当前的计费值的功能和键盘操作的功能。

1.2系统原理分析

本文以MCS-51单片机系统为基础,通过霍尔传感器对车轮转动进行检测。

车轮轴上有一个小磁钢,车轮每转动一圈,磁钢靠近一次霍尔传感器,传感器输出一个脉冲。

单片机通过T1计数器对该脉冲进行计数,并根据轮胎周长计算行程,再根据计价规则算出计费值,通过数码管显示,计费精度达到1元。

本系统设计简单,性能稳定,能够通过单片机灵活编程进行各种功能的设定和修改。

根据本课题的设计目标以及硬件的特点,本系统的总体设计框图如图所示。

设计思路:

主程序主要执行定时器、计数器、中断的初始化,以及对数码管进行扫描显示。

首先开中断,包括定时器0中断、外部中断0和1;然后配置外部中断触发模式,以及定时器初值;最后扫描显示数码管。

其中,由于计数器每次返回计数值不确定,为了准确地工作,定时器与计数器均工作在方式一模式,外部中断触发方式为下降沿触发。

晶振频率为12MHz,定时器0每次重装值为65536-5000,即每次定时器中断计时为5000*12/(12MHz)=5ms.

流程图:

程序代码:

IE=0X8F;//开中断

TMOD=0X51;

TH0=(65536-5000)/256;//定时器初值为60536,即5ms

TL0=(65536-5000)%256;

IT0=1;

IT1=1;//中断定时器初始化

while

(1){

while(z==1)//未检测到开始按键之前显示0

{

JG(0);

}

while(z==0)//开始之后数码管显示当前计费值q

{

JG(q);

}

}

T0作为定时器开中断,进入中断首先执行定时器初值的重装,然后判断计费器是否处于计费状态,从而决定是否向TH1和TL1取回计数值,计算总行程以及当前计费值并存入单片机。

总行程与当前计费值分别记为zong和q.计算方法根据设计要求得到,起步价为4km7元,以后2元/km,要求精度为1元,所以程序为每500m计费1元。

流程图:

程序代码:

staticnum=0;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;//定时器初值重装为60536

num++;

if(flag==0)//若flag为0,则按下了暂停键,此时每次定时器时间到计数器清零

{

TH1=0;

TL1=0;

}

if((num>=2)&&flag)//若flag为1,且定时器时间到采样时间,为了更灵敏地显

{//示计费,扫描周期设定为2个中断周期

num=0;

shu=TH1*256+TL1;

zong=zong+shu;//定时器数值存入zong

TH1=0;

TL1=0;//计数器清零

if(zong>=4000)

{

q=(zong-4000)/500+7;//若果zong大于起步公里数(4km)进行此步计算价格

}

}

外部中断0用于检测按键“开始/暂停”。

“开始”被按下表示计价器从非计费状态转为计费状态或暂停,此时计数器与定时器均为开通状态。

程序代码:

flag=!

flag;//按下一次开始,再次按下取反

z=0;

TR0=1;//定时器开通

TR1=1;//计数器开通

外部中断0用于检测按键“复位”。

“复位”被按下表示计价器从计费状态转为非计费状态或保持非计费状态,总行程(zong)与计费值(q)回到初值,关闭定时器与计数器,清空计数值。

程序代码:

z=1;//非计费状态

flag=0;

q=7;

zong=0;

TR0=0;//关闭定时器

TR1=0;//关闭计数器

TL1=0;

TH1=0;

此系统采用数码管显示,因此需要计算每一位的显示值。

这里采用多位数码管,每次只能显示一位,为了让多位数码管看起来都亮,程序必须高速扫描显示,由于人的视觉暂留效应,会看起来多位数码管都亮了。

值得注意的是,随着程序运行,同一位的显示值会变,这体现在数码管段的亮灭上,为了不使显示不清晰,下次点亮之前必须先关闭该位,即不显示。

程序代码:

sbitL1=P3^6;//千位

sbitL2=P3^4;//百位

sbitL3=P3^1;//十位

sbitL4=P3^0;//个位

#definecom1L1=1;L2=0;L3=0;L4=0

#definecom2L1=0;L2=1;L3=0;L4=0

#definecom3L1=0;L2=0;L3=1;L4=0

#definecom4L1=0;L2=0;L3=0;L4=1

#definecom0L1=0;L2=0;L3=0;L4=0//单个数码管点亮定义

P1=tab[a%10];//最低位(个位)

com4;//点亮个位

delay(10);//延时

com0;//关闭显示

P1=tab[(a/10)%10];//十位

com3;

delay(10);

com0;

P1=tab[(a/100)%10];//百位

com2;

delay(10);

com0;

P1=tab[a/1000];//千位

com1;

delay(10);

com0;

voiddelay(uintb)//延时函数

{

uintx=110;

for(x;x>0;x--)

for(b;b>0;b--);

}

 

第三章硬件部分

3.1单片机最小系统及键盘模块

80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。

80C51内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用12MHz的晶振频率。

由于80C51的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故采用来作为控制核心。

80C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

本系统包括晶振电路,复位电路,扩展外部ROM电路,键盘电路等,为了不使电路看起来过于混乱,这里采用网络标号的方法代替连线。

电路图如下:

图1

 

3.2数码管显示模块

用数码管显示价格低廉且亮度高,很适合用于计价器显示。

图中P1口(网络编号B)用于显示数码管,接数码管段选端。

P3.0、P3.1、P3.4、P3.6(网络编号C)接数码管位选端。

图2

3.3霍尔传感器模块

霍尔传感器是对磁敏感的传感元件,常用于开关信号采集的有CS3020、CS3040等,这种传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。

如图1所示是CS3020的外形图,将有字面对准自己,三根引脚从左向右分别是Vcc,地,输出。

图3

使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在车轮转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。

所以霍尔传感器测速实际上是测转轴转动频率。

在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。

这种传感器不怕灰尘、油污,在工业现场应用广泛。

霍尔传感器测速电路原理图如下:

 

图4

在仿真电路中,为了更清晰明了地展示计价器的工作,霍尔传感器采样的部分用一个模拟脉冲发生器代替了(见图1),接P3.5/T1计数器计数通道。

3.4外部存储器模块

本系统扩展8KROM,用了一片2764以及一片地址锁存器74LS373,其中使用地址线P0.0~P0.7及P2.0~P2.4,P0.0~P0.7复用为数据线。

单片机EA脚接地,程序存储地址均为外部ROM.地址范围为:

0000H~1FFFH

扩展原理图如下:

图5

第四章辅助调试工具

使用proteus辅助调试,可以直观地看到程序及硬件电路的实现效果,设计者可以很方便地根据效果分析系统存在的问题,并找出解决方法,而且可以通过模拟测量仪器对电路进行实时监控。

如图所示:

图6

图7

总结

出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。

所以,我们小组进行了出租车计价器的设计。

经过一段时间的学习设计,出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能并能够通过数码管显示车费数目。

即使这样,在设计调试仍然存在一些问题,可能无法做到真正的实践使用,还需要一些调整改正。

这一段时间,经过小组成员的努力,我们基本完成了初始设计目的,但在这个过程中我发现自己存在一些问题,那就是我平时学习积累远远不够,在参与设计的过程中,有许多力不能及的地方,都是在上网学习后者组员帮助下才能完成。

这说明了一点,书本上的东西真要实践起来是完全不一样的,在这方面我有很大的不足,实践方面的能力远远不够。

虽然在这次设计中我有很多的不足,但正是在这次设计中我学到了很多东西,通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。

经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。

通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。

这在以前的学习过程中是不曾学到的。

并且这次设计还使我认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。

参考文献:

《单片机原理及其接口技术》(第三版)胡汉才主编

《数字电子技术基础》(第五版)清华大学电子学教研室组编阎石主编

《自动检测技术及仪表控制系统》(第三版)张毅张宝芬曹丽彭黎辉编

附录一程序代码

#include

typedefunsignedintuint;

typedefunsignedcharuchar;

voiddelay(uintb);//延时函数声明

voidJG(uinta);//价格数值拆分及显示函数

sbitL1=P3^6;

sbitL2=P3^4;

sbitL3=P3^1;

sbitL4=P3^0;

#definecom1L1=1;L2=0;L3=0;L4=0

#definecom2L1=0;L2=1;L3=0;L4=0

#definecom3L1=0;L2=0;L3=1;L4=0

#definecom4L1=0;L2=0;L3=0;L4=1

#definecom0L1=0;L2=0;L3=0;L4=0//单个数码管点亮定义

ucharcodetab[]={

0xC0,0xF9,0xA4,0xB0,0x99,

0x92,0x82,0x0F8,0x80,0x90

};

ucharz=1,flag=0;

uintq=7,zong=0,shu=0;

voidmain()

{

IE=0X8F;

TMOD=0X51;

TL0=(65536-5000)%256;

TH0=(65536-5000)/256;

IT0=1;

IT1=1;//中断定时器初始化

while(z==1)//未检测到开始按键之前显示0

{

JG(0);

}

while(z==0)//开始之后数码管显示

{

JG(q);

}

}

voidTT0(void)interrupt1//定时器中断

{

staticnum=0;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

num++;

if(flag==0)//若flag为0,则按下了暂停键,此时每次定时器时间到计数器清零

{

TH1=0;

TL0=0;

}

if((num>=2)&&flag)//若flag为1,且定时器时间到扫描时间

{

num=0;

shu=TH1*256+TL1;

zong=zong+shu;//定时器数值存入zong

TH1=0;

TL1=0;//计数器清零

if(zong>=1000)

{

q=(zong-500)/500+7;//若果zong大于起步公里数进行此步计算价格

}

}

}

voidTT1(void)interrupt3

{

}

voidkaishi0(void)interrupt0//开始暂停按键检测

{

flag=!

flag;//按下一次开始,再次按下取反

z=0;

TR0=1;

TR1=1;

}

voidfuwei(void)interrupt2//复位按键检测

{

z=1;

flag=0;

q=7;

zong=0;

TR0=0;

TR1=0;

TL1=0;

TH1=0;

}

voidJG(uinta)//价格数值拆分及显示函数

{

P1=tab[a%10];

com4;

delay(10);

com0;

P1=tab[(a/10)%10];

com3;

delay(10);

com0;

P1=tab[(a/100)%10];

com2;

delay(10);

com0;

P1=tab[a/1000];

com1;

delay(10);

com0;

}

voiddelay(uintb)//延时函数

{

uintx=110;

for(x;x>0;x--)

for(b;b>0;b--);

}

附录二硬件电路图

附录三PCB图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1