s08课程设计报告Word格式文档下载.docx
《s08课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《s08课程设计报告Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
![s08课程设计报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/12/99d3d276-248b-4ae2-8661-b88ceb36dbb4/99d3d276-248b-4ae2-8661-b88ceb36dbb41.gif)
周秋峰
专业班级
自动化1004
学号
201046820922
题目
基于89C51的出租车计价器设计
课题性质
工程设计
课题来源
自拟
指导教师
臧海河
主要内容
(参数)
利用89C51设计出租车计价系统,实现以下功能:
1.设置白天/晚上收费标准的转换开关,使白天和晚上这两种不同情况具有不同的收费标准。
2.设置数据的清零开关。
3.具有等待红灯收费功能。
4.设置显示液晶页面,使司机与顾客能够清楚的看到液晶所显示等待红灯时间以及路程、总金额和单价。
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
软件设计,编写程序。
第7-8天:
实验室调试。
第9-10天:
撰写课程设计报告。
要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅不少于6000字。
主要参考
资料
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:
国防工业出版社,2004
[2]阎石.数字电路技术基础(第五版).北京:
高等教育出版社,2006
[3]康华光.电子技术基础模拟部分(第五版).北京;
[4]郭天祥.新概念51单片机C语言教程-入门、提高、开发、拓展全攻略.北京;
电子工业出版社,2009
审查意见
系(教研室)主任签字:
年月日
1引言
出租车是现代城市内部主要交通工具之一,它给我们的出行带来了方便与舒适。
一个好的出租车计价器在整个出租车系统中是不可或缺的,他让我们的出行费用,车辆行驶距离有了明确的体现,让司机与乘客的利益的到平衡,让出租车市场更加规范。
如今的出租车计价器五花八样,功能各异,但主要功能都基本相同,以行驶距离为标准计价,有些加上的等待计价,有些更智能,可以为乘客提供拼车计价,本设计提供了基本的一距离为主要标准计价,附加等待红灯计价。
介于出租车计价器不需要太多的功能,而单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。
以8051为内核AT89S52单片机足可以实现计价功能,以1602液晶显示信息。
AT89S52单片机价格便宜,工作稳定,性能良好,易学易用,操作使用方便,ISP写入程序,方便快捷。
8051系列单片机也是我们课程所学的主要单片机,更利于我们学习实践。
而如今较为流行的AVR单片机和以cortex为内核的单片机比较流行,但他们的价格相对于AT89S52较贵,功能较多,控制复杂,程序编写较难,且大多为LQFP封装,不利于我们实验练习,而使用51系列单片机足矣完成出租车计价功能,是比较理想的选择。
2总体方案设计
2.1硬件组成
整个系统硬件有控制器,距离检测系统,速度检测系统,信号处理模块,人机交换界面组成:
(1)控制器。
作为控制系统的核心,它在整个系统中接受由光电码盘传来的数据,经过内部处理,按照事先约定将数据传到显示部分。
(2)距离速度检测系统。
它由传感器实现,由机械机构连接传感器,再由传感器输出信号,输入控制器。
(3)信号处理模块,有传感器输入的信号进行处理,处理后的信号为可以直接输入控制器的信号。
(4)人机交互界面;
需要一个显示器显示控制器输出的信息,显示出租车行驶的距离,等待时间,定价和最后总价。
硬件方框图如图2.1所示。
图2.1硬件方框图
2.2方案论证
(1)控制器
控制器的选择是确定整个系统硬件方案的关键,它关系到其它几个部分方案的确定,对于出租车计价器,控制器一般使用MCU,MCU有许多种,可选的单片机有以下几种:
<
1>
8051系列单片机。
8051单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。
单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。
80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。
。
2>
AVR单片机。
AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(ReducedInstructionSetCPU)精简指令集高速8位单片机。
AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。
1997年,由Atmel公司挪威设计中心的A先生和V先生,利用Atmel公司的Flash新技术,共同研发出RISC精简指令集高速8位单片机,简称AVR。
AVR单片机功能较完善,自带A/D转换。
但开发编程使用相比于8051系列有些复杂。
需要一定的学习。
3>
Cortex系列单片机。
ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。
Cortex系列属于ARMv7架构,这是ARM公司最新的指令集架构。
ARMv7架构定义了三大分工明确的系列:
“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;
“R”系列针对实时系统;
“M”系列对微控制器。
由于应用领域不同,基于v7架构的Cortex处理器系列所采用的技术也不相同,基于v7A的称为Cortex-A系列,基于v7R的称为Cortex-R系列,基于v7M的称为Cortex-M系列。
但Cortex系列单片机开发复杂,需要深入学习,当然其功能也强大,不过价格也相对8051贵一些。
出租车计价器作为一种简单的设备,本身价值不高,更要求控制系统具有较好的性价比,控制系统部需要有强大的控制能力,而且要考虑安装方便,计价器体积受限,经上述分析比较,确定采用8051系列MCU作为控制器。
(2)速度里程传感器
传感器可选择的较多,有模拟信号输出的,有数字信号输出的,由于模拟信号输出的传感器需要信号放大和A/D转换模块,信号放大比较难调,信号容易失真,而A/D转换模块需要另外添加,有些单片机不具有A/D转换功能,且增加模块会增加整个产品的成本,对于简单低成本的出租车计价器是很不适合的。
为了简单实用,可采用数字信号输出的传感器,由于大量数据传入单片机会增加处理器负担,可采用产生脉冲的传感器,例如霍尔传感器,光电码盘等等。
这类长安器相对来说价格便宜,性能稳定,简单实用,传感器产生的脉冲可直接输入单片机,也可整形后输入单片机,防止数据丢失,也可实用达林顿管和光耦等元件对信号做进一步处理。
(3)信号处理模块
传感器输出的脉冲信号可以整形放大后输入单片机,但单片机可以直接处理脉冲信号,即使脉冲有些不稳定,脉冲强度有些变化,也可以直接处理,单片机只是查脉冲的数目和一定时间内脉冲的数目,脉冲的强度变化只要在可处理范围之内是没有问题的,经试验证实,传感器输出的信号时比较稳定的,示波器显示波形很好,脉冲丢失比较少,而单片机能够完美的处理这些脉冲,几乎没有出错。
(4)人机交互界面
人机交互界面主要有以下几种形式:
①CRT显示器及标准键盘:
显示信息量大,操作方便,显示界面友好,但价格高,适用于采用工控机作控制器的场合。
②工业人机界面(触摸屏):
和CRT显示器一样,具有显示信息量大,操作方便,显示界面友好,适合恶劣的工业环境使用等特点,但价格更高,一般与PLC配套使用。
③LED或LCD数码显示器及自行设计的小键盘:
价格低廉、体积小是其最大优点,应用于以MCU为控制器的系统中较合适。
考虑价格及系统构成等因素,人机交互界面采用LCD显示和薄码开关选择一些单片机需要处理的一些状态。
2.3总体方案
按照上述方案论证的结果,出租车计价器的总体方案框图如图2.2所示。
图2.2中,传感器输出的脉冲信号直接连接单片机的外部中断引脚,该脉冲信号输入到MCU后。
MCU对输入的一定频率的脉冲信号进行处理,经运算后得到数据,送LCD显示器显示,输出数据供司机和乘客浏览。
图2.3总体方案框图
拨码开关可选择白天模式和晚上模式,也可选择是否等红灯收费。
3硬件电路设计
3.1单片机及其外围电路
微控制器采用AT89S52单片机。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用.
AT89S52的内部资源主要包括:
1、与MCS-51单片机产品兼容;
2、8K字节在系统可编程Flash存储器;
3、1000次擦写周期;
4、全静态操作:
0Hz-33MHz;
5、三级加密程序存储器;
6、32个可编程I/O口线;
7、三个16位定时器/计数器;
8、六个中断源;
9、全双工UART串行通道;
10、低功耗空闲和掉电模式;
11、掉电后中断可唤醒;
12、看门狗定时器;
13、双数据指针;
14、掉电标识符。
AT89S52的外围电路主要包括时钟电路、复位电路。
如图3.1所示。
图3.1AT89S52的接口电路
3.2光电传感器与信号调理电路
光码盘即光栅码盘,在上面刻有许多同心码道,每个码道上都有按一定规律排列的透光和不透光部分。
本系统光码盘采用如今比较流行的金属光码盘,如图3.2.1所示。
图3.2.1光码盘实物
工作原理如图3.2.2所示
图3.2.2光码盘工作原理
工作时,车轮转动通过机械机构连接到管吗盘上,光投射在码盘上,码盘随运动物体一起旋转,透过亮区的光经过狭缝后由光敏元件接受,光敏元件的排列与码道一一对应,对于亮区和暗区的光敏元件输出的信号,前者为“1”,后者为“0”,当码盘旋转在不同位置时,光敏元件输出信号的组合反映出一定规律的数字量,代表了码盘轴的角位移。
本系统光码盘有两种输出,一种是每个脉冲输出一个脉冲,另一种是每转一圈输出一个脉冲,为了信号稳定和减少单片机处理数据的负担,使用每圈输出一个脉冲,经测试,精度以足够使用。
3.3显示及键盘接口电路
(1)显示器接口电路
出租车计价器运行过程中需要显示的信息包括:
价格设定,等待时间显示,行驶距离显示,最终价格显示。
由于显示的都可以用字符显示,可用液晶1602显示,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
编辑本段1602LCD的特性 +3.3V电压,对比度可调
内含复位电路 提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM
内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM。
1602LCD特征及应用 微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。
由此按照图3.3.1连接
图3.3.11602液晶接口
1602液晶数据口接单片机I/O口P2口,RS接P07,RW接P06,E接P05,其它接口如图所示,VL接口可调节液晶对比度。
(2)键盘接口电路
本系统没有使用复杂按键,只用了两位简单的拨码开关一位选择白天模式还是夜间模式,另一位选择是否启动红灯等待功能。
3.4电源电路
电源直接由+5V输入即可,只需要一种电源,简单易得,车载充电器即可实现+5V电源,无需另加电源模块。
4系统软件设计
系统软件分为主程序、中断服务程序和子程序三部分。
4.1主程序设计
主程序是系统上电或复位后首先要执行的程序,主程序主要完成系统的初始化、扫描显示、扫描键盘等工作。
本系统上电或复位时,根据两个拨码开关状态可分为两种模式,每种模式两种状态,
图4.1主程序流程图
系统上电后,单片机CPU自动查询拨码开关,若选择白天模式是,实行白天计费标准,若选择夜间模式是时,进入夜间计费标准,程序执行过程中会查询拨码开关是否开启红灯等待计费功能,如果是,则执行红灯等待计费程序,然后执行总计价程序,如果否,则不执行红灯等待计费程序,直接执行总计价程序,得出最终价格。
按照上述分析,主程序流程图如图4.1所示。
4.2中断服务程序设计
从主程序的设计可以知道:
定时器T0定义为方式1外部计数方式,用于产生5ms的时钟周期,在主程序中累加1000次产生5s的时间,每隔5s执行程序计算出租车行驶距离,判断是否为等红灯。
外部中断0为接受光码盘传感器传来的脉冲信号,每来一个脉冲产生一个中断,计数加一,由此查看计数的数值就可以指导出租车行驶的距离。
外部中断流程图如图4.2.1所示。
图4.2.1外部中断服务程序流程图
T0定时器中断流程图如图4.2.2所示。
图4.2.2T0定时器中断服务程序流程图
在执行外部中断时会暂停定时器中断,虽然会有微小误差,但可避免计数出错。
4.3部分主要子程序的设计
系统主要子程序包括距离显示子程序、金额显示子程序,等待时间显示子程序等。
(1)距离显示字程序
距离显示子程序是输入一个浮点型数据,将数据拆开为千位,百位,十位,个位,小数点,十分位,然后再写入地址,在每一位的地址写入对应数据,此时数据已经为字符型。
(2)金额显示子程序
金额显示子程序是输入一个浮点型数据,将数据拆开为千位,百位,十位,个位,小数点,十分位,然后再写入地址,在每一位的地址写入对应数据,此时数据已经为字符型。
当不足2公里时显示起步价,当超过3公里时,按照计算公式显示,计算公式为:
总价=起步价+0.1*每公里单价*((行驶距离-3000)/100+1)。
(3)等待时间显示子程序
等待时间显示子程序是输入一个整型数据,将数据拆开为千位,百位,十位,个位,然后再写入地址,在每一位的地址写入对应数据,此时数据已经为字符型。
总程序流程图如图4.2.3所示。
图4.2.3总流程图
5系统调试与总结
系统研制完成后,在实验室进行了系统功能测试和技术指标测试。
测试结果符合系统技术指标规定。
5.1系统调试
1.白天夜间模式选择调试
当拨码开关选择白天模式时,即P11为1时,即为白天模式,起步价显示为08Y(元),初始价显示为08+1.5*SY(元),如图5.1.1.1。
当拨码开关选择夜间模式时,即为P11为0,即为夜间模式,起步价显示为10Y,初始价显示为10+1.5*SY,如图5.1.1.2.
图5.1.1.1白天模式选择显示
图5.1.1.2夜间模式选择显示
2.是否开启红灯等待功能调试
当拨码开关选择开启红灯等待计费功能时,即P10为0时,等待红灯时会计费,当没有脉冲输入时,即为等待红灯,当一开始就没有脉冲输入时,只按等待时间计费,而不按行程计费。
计费图如图5.1.2.
图5.1.2等待红灯计费显示
3.行程计费
当行驶距离小于3000米时,只收起步价,如图5.1.3.1。
当行驶距离大于3000米时,
按计算公式是收费,如图5.1.3.2
图5.1.3.1只收起步价
图5.1.3.2按计算公式收费
5.2总结
MCU具有体积小、重量轻、价格低廉的特点,应用于自动控制系统中可以有效降低系统的成本。
针对不同工业现场的情况,采取相应的抗干扰措施,可以在环境恶劣的工业现场可靠地运行。
数据采集用光码盘,具有转换精度高、抗工频干扰能力强、易于实现光电隔离以及价格低廉等特点,显示采用1602液晶显示,实用简单,操作方便,显示清晰明了。
合理确定外围元件的参数是保证数据采集精度的关键。
拨码开关可自由选择模式和状态,使用方便灵活。
参考文献
附录A系统原理图
附录B源程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P0^7;
//数据命令选择
sbitlcden=P0^5;
//lcd使能
sbitrw=P0^6;
//lcd读写控制
sbitday=P1^1;
//白天夜晚选择
sbitdeng=P1^0;
//是否开启红灯等待计费
//sbitv4=P0^0;
//调试时产生速度
ucharday_price=8,night_price=10,i;
floatdanjia=1.5;
uintn=0,k=0,stopnum=0;
unsignedlonginttemp=0;
ucharcodetabled[]="
s08+1.5*SY"
;
ucharcodetablen[]="
s10+1.5*SY"
ucharcodetabledp[]="
000.0km0008.0Y"
ucharcodetablenp[]="
000.0km0010.0Y"
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidwrite_com(ucharcom)
{//写液晶命令函数
rs=0;
lcden=0;
P2=com;
delay(3);
lcden=1;
voidwrite_date(uchardate)
{//写液晶数据函数
rs=1;
P2=date;
voidwrite_km(unsignedlongintdate)
{//第一行写距离,写5占7
ucharbai,shi,ge,shifen;
shifen=(int)((date/100))%10;
ge=date/1000%10;
if(date>
=10000)
{
shi=date/10000%10;
if(date>
=100000)
{
bai=date/100000%10;
}
else
bai=0;
}
else
shi=0;
}
write_com(0x80);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
write_date('
.'
);
write_date(0x30+shifen);
voidwrite_stoptime(intnum)
{//写等待时间
charqian,bai,shi,ge;
inttime;
time=num*5;
ge=time%10;
shi=time/10%10;
bai=time/100%10;
qian=time/1000%10;
write_com(0x80+0x40);
write_date(0x30+qian);
voidwrite_price(floatdate)
{//第一行显示价格,10开始,写6占7满
charqian,bai,shi,yuan,jiao;
jiao=(int)(date*10)%10;
yuan=(int)date%10;
shi=(int)(date/10)%10;
bai=(int)(date/100)%10;
qian=(int)(date/1000)%10;
write_com(0x80+8);
write_date(0x30+yuan);
write_dat