河南理工大学单片机设计.docx
《河南理工大学单片机设计.docx》由会员分享,可在线阅读,更多相关《河南理工大学单片机设计.docx(30页珍藏版)》请在冰豆网上搜索。
河南理工大学单片机设计
河南理工大学
《单片机应用与仿真训练》设计报告
基于单片机的出租车计价器的设计
姓名:
学号:
专业班级:
指导老师:
所在学院:
电气工程与自动化
2012/5/16
摘要
出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。
而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。
本设计的是一个基于单片机AT89S52的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。
复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。
时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。
在上电时LED数码管显示最初的起步价,里程收费,等待时间收费三种收费。
按暂停键,计价器可暂停计价,按查询键,在LED数码管上可以显示运行时等待的时间。
通过计算可以得出总共的费用和总的路程。
在这里主要是以AT89S52单片机为核心控制器,P0口、P2口接两片四合一数码管,P1口接按键,通过按键输入。
关键词:
单片机AT89S52;LED数码管;出租车计费器;
目录
1概述3
1.1课题简介3
1.2功能能要求3
2系统总体方案及硬件设计5
2.1系统工作原理及总体方案5
2.2单片机最小系统单元6
2.3霍尔传感器检测单元7
2.4键盘调整单元8
2.6显示单元11
3软件设计12
3.1系统主程序12
3.2按键扫描程序13
3.3中断程序14
3.4计算程序15
3.5显示程序16
4实验仿真17
4.1Proteus介绍17
4.2调试与测试17
4.3里程计价测试18
5系统调试与测试结果分析19
5.1使用的仪器仪表和工具19
5.2调试的方法19
6课程设计体会20
参考文献21
附1:
系统原理图22
附2:
源程序代码23
1概述
1.1课题简介
出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
为此,我们采用单片机系统设计了一款符合大众化的计费系统。
本方案以At89s52单片机为中心、配合LED数码管,实现对出租车计价统计。
本方案可以实现:
1.系统接收里程传感器的脉冲输入,并对脉冲进行计数,继而转换为里程。
2.采用现行出租车的计价系统的计算方法,并对行驶里程进行计费,提供友好的用户界面,并具有发光二极管指示操作状态功能。
1.2功能能要求
利用AT89s52单片机配合LED数码管,实现基本的出租车计价功能,具体设计规格如下:
1.用前4位数码管实时显示里程数,单位为公里,最后一位为小数位;用后4位数码管时时显示金额数,单位为元,最后一位为小数位。
2.规定出租车单程价格为2元/公里,往返则价格为1.5元/公里;单程/往返分别由“单程”按键和“往返”按键设定。
3.车速<5公里/小时的时间累积为总等待时间T(分钟),每5分钟等待时间相当于里程数增加1公里。
4.起步公里数为3公里,价格为5元;若实际运行大于3公里,按“设计任务2”计算价格。
5.到达目的地后,按“暂停”键,计价器可暂停计价。
6.按“清除”键,计价器能将记录数据(里程、等待时间与价格等)自动清0。
7.按“查询”键,能自动显示总等待时间T,再按下该键回到显示里程数、金额状态。
8.扩展:
空车指示、语音提示、信息存储等
2系统总体方案及硬件设计
2.1系统工作原理及总体方案
出租车计价器用于记录里程、等待时间、是否往返、起步公里数与价格的关系,它能有效地避免司机与乘客间的矛盾,保障双方的利益。
出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。
即可计算得到车轮旋转几周出租车能行驶一公里的路程。
因此,使用霍尔传感器的目的就是方便地计量车轮旋转的圈数。
可在车轮转盘上粘一个小磁钢,当转轮转动时,霍尔传感器检测到磁场及其变化,产生脉冲信号。
输出的脉冲信号被接入到AT89S52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程。
同时,根据不同的收费标准,选择相应的起步价、单价等收费标准进行计算。
再配置上键盘和数码显示,通过键盘能够实现启动、暂停计价器、切换显示当前的行驶里程和需支付的车费。
通过分析,需要实现四个主要的功能模块,分别为脉冲计数模块、定时器计时模块、按键的处理以及数码管动态扫描等功能。
定时器计时模块主要完成途中等待(即没有脉冲来时)30秒的计时。
在启动键按下后,定时器就不停的计时,只要有脉冲来就将计时的值清除为零。
如果没有脉冲来,当计时超过30秒时,相应的总金额要按照收费标准计价。
中断的管理:
尽管中断有嵌套以及优先级的功能,但是由于定时器已经使用一个了中断资源,脉冲检测不宜再采用中断方式,而是采用查询方式。
由于需要不停的要清除30秒的计时,因此,脉冲的计数不采用定时器的计数方式。
启动键触发定时器开始工作,而定时器的运行可以作为脉冲计数的标志,只要定时器计时在运行,每来一个中断都应该计数。
主程序完成键盘的扫描和按键的处理,查询脉冲产生的中断,并完成脉冲的计数。
若每个脉冲代表1米,则当计数到1000时表示1千米的距离,相应的总金额要按照收费标准计价。
采用MCS51系列单片机AT89S51作为主控制器,外围电路器件包括数码管、独立式键盘、复位电路等。
模拟出租车计价器能根据总里程数、总等待时间长短、是否往返、起步公里数的情况作出相应报价等。
当然实际的出租车计价器还具有打印票据,显示是否空车等功能。
总体模块如图2.1所示。
图2.1电路的组成部分
2.2单片机最小系统单元
主控机系统采用了Atmel公司生产的AT89S52单片机,它含有256字节数据存储器,内置8K的电可擦除FLASHROM,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。
复位电路和晶振电路是AT89S52工作所需的最简外围电路。
单片机最小系统电路图如图2.2所示。
图2.2单片机最小系统图
在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M晶振和两个30pF电容组成系统的内部时钟电路
2.3霍尔传感器检测单元
Us1881属于开关型的霍尔器件,其工作电压范围比较宽(3.5~24V),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ。
Us1881集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点(即Bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍尔开关完成了一次开关动作。
图2.3霍尔开关集成传感器原理图及其输出特性
里程计算是通过安装在车轮上的霍尔元件检测到的信号,送到单片机,经过处理计算,送给显示显示单元的。
霍尔传感器是一种磁传感器。
用它可以检测磁场及其变化,可在各种与磁场有关的场合中使用。
霍尔传感器以霍尔效应为其工作基础,是由霍尔元件和它的附属电路组成的集成传感器。
霍尔传感器分为线性型霍尔传感器和开关型霍尔传感器两种。
我们所用的是开关型霍尔传感器。
其原理图如图2.4所示:
图2.4传感器测距示意图
我们选择P3.2口作为信号输入端,车轮每转一圈(假设车轮周长为1米),霍尔开关就检测并输出信号,引起单片机中断,对脉冲计数,当计数达到一千次时,也就是1公里,单片机就控制金额自动增加。
2.4键盘调整单元
独立式键盘:
独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。
I/O口内部有上拉电阻时,外部可不接上拉电阻。
键盘接口电路如图2.5所示:
图2.5键盘接口电路
S1:
接P1.0口,对上一次的计费进行清零,为下次载客准备。
S2:
接P1.1口,能自动显示总等待时间T,再按下该键回到显示里程数、金额状态。
S3:
接P1.2口,选择是按单程计费还是双程计费。
S4:
接P1.3口,可以暂停计费,方便乘客结账。
2.5单片机各引脚功能说明
AT89S52电路图如图2-6所示:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行图2-6
校验时,P0输出原码,此时P0外部必须被拉高。
图2-6AT89S52
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。
P3口也可作为AT89C51的一些特殊功能口,如表3-1所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.6显示单元
对于现实电路我们可以采用数码管,也可以采用液晶显示。
LED数码管特点有:
寿命长、成本低、亮度高、故障少、视角大、可视距离远等,但其显示内容有限。
液晶显示的特点有:
显示内容丰富等,但其驱动复杂,成本高;外部光线强时,可视距离近。
综合考虑,本次设计采用LED数码管。
显示电路如图2.6所示:
图2.6显示电路
3软件设计
软件是单片机系统的灵魂,根据设计的要求,在本系统中本系统软件中包括下面程序模块:
主程序:
初始化系统涉及到的硬件模块,扫描键盘,根据按键启动/停止里程测量,实时更新单价、里程、等待时间、费用等信息显示。
按键扫描程序:
扫描按键,返回扫描结果。
计算程序:
将传感器发出脉冲数转换为公里数,并根据规则计算对应的费用。
显示子程序:
将计算程序得到的数据反映到数码显示管上。
中断程序:
监测行驶速度,统计等待时间。
现在应用更广泛的是单片机C语言,因其简单明了,故此次课程设计采用单片机C语言编程。
3.1系统主程序
在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化以及中断、计算、循环等工作。
当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。
若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价、往返价格送数码管显示出来。
程序流程如图3.1所示:
图3.1主程序流程
3.2按键扫描程序
键盘实质上是一组按键开关的集合,均利用机械触点的合、断作用。
按键在闭合及断开的瞬间均伴随有一连串的抖动,抖动反应在电压上就是呈现出高电平或低电平,为了确保CPU对一次按键动作只确认一次,必须消除抖动的影响。
去抖通常有硬件去抖和软件去抖两种方法,本程序使用软件延时去抖。
图3.2按键抖动波形
对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,再判键释放,最后执行键功能程序。
判键子函数的流程框图如图3.3所示:
图3.3判键子程序流程图
3.3中断程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1500次时,进入里程计数中断服务程序中,里程变量加一。
主函数中总金额也相应地变化。
在中途等待中断程序中,每1ms产生一次中断,将由当前里程计算出速度值送入某个缓存变量。
把当前速度值与预先设定的速度值相
比较,当小于设定的车速时,进入等待计时。
等待时间5分钟相当于里程增加一公里。
流程如图3.4所示:
图3.4中断流程
3.4计算程序
计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:
总金额=起步价+(里程-3)*单价;否则,执行公式:
总金额=起步价。
程序流程如3.5所示:
图3.5计算程序流程
3.5显示程序
程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。
{0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表示0-9
图3.6显示子程序流程
4实验仿真
4.1Proteus介绍
Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。
支持许多通用的微控制器,如PIC,AVR,HC11以及8051。
最新支持ARM。
交互的装置模型包括:
LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。
强大的调试工具,包括寄存器和存储器,断点和单步模式。
IARC-SPY和KeiluVision2等开发工具的源层调试。
应用特殊模型的DLL界面-提供有关元件库的全部文件。
4.2调试与测试
采用KeilC51编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作。
硬件电路制作完毕,用万用表检测有无短路开路等现象,确定硬件电路没有问题后,用仿真头与硬件电路相连,运行程序进行调试。
若调试不成功,则可再单独调试程序和硬件电路。
程序用软件仿真运行,硬件电路再次检查有无焊错,或者元件与插座接触不良等方面问题;确认均无问题后,再次把软件和硬件联机调试,直至功能正常。
把程序烧录进单片机STC89C52结束调试。
为基础,通过计费程序完成中金额的计算。
表4.1的测试条件是:
假设单程的单价是2元,起步价为5元(包含3公里),分别不公里程测试得数据如表:
4.3里程计价测试
由于实验条件的限制,我们采用霍尔传感器产生外部中断,设定中断间隔为10ms,假定1500个脉冲为1公里,则此时车速为1km/h=5圈/S。
整个系统以此为基础,通过计费程序完成中金额的计算。
表4.1的测试条件是:
假设单程的单价是2元,起步价为5元(包含3公里),分别不公里程测试得数据如表:
4km
6km
7km
9km
总
金
额
理论
7元
11元
13元
17元
实际
7元
11元
13元
17元
行驶
里程
理论
4km
6km
7km
9km
实际
4km
6km
7km
9km
表4.1实际金额和里程数
表4.2的测试条件是:
假设在单程运行中的单价2元的情况下行驶了6km,进行中途等待,分别等待不同的时间(每5分钟相当于增加1公里),起步价为5元(包含3km)。
5min
10min
15min
20min
总
金
额
理论
13元
15元
17元
19元
实际
13元
15元
17元
19元
表4.2总金额对比
5系统调试与测试结果分析
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
测试包括里程计价测试、掉电存储测试测试。
5.1使用的仪器仪表和工具
数字万用表 DT9203
单片机仿真器 Proteus
双踪稳压稳流电源 DH1718E-5
电烙铁
单片机实验板
5.2调试的方法
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试。
6课程设计体会
出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能并能够通过数码管显示车费数目。
本款出租车计价器包括单价输出、单价调整、显示当前的行驶里程等功能。
另外,多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。
一个月来,经过自己努力,基本上完成了设计要求的内容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。
经过这一个月的学习,我觉得自己不论是在理论知识方面还是在动手能力方面都有了不小的进步,自己从中受益匪浅。
这次设计很好的把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。
通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。
经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。
通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。
这在以前的学习过程中是不曾学到的。
并且这次设计还使我认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。
通常在不同的方式,不同的情况下都会有不同的收费标准;单程、白天和中途等待,考虑后首选用开关来实现这些切换功能,简单方便,同时显示器会显示相应的指示。
最大的方便了司机的计费控制。
并且能根据市场经济的变化而发生相应的跳动计价。
但是在设计和调试的过程中,也发现了一些问题,譬如计价的金额数有限,实际的里程可能会很远,会超出实际的显示范围;计价过程出现突然断电时如何处理这些问题,因此对此方案还可以进行进一步改进,如:
实现白天、晚上计费自动切换和具有记忆功能,也可以加上语音提示功能,防作弊功能等,这样可能会更让乘客放心乘坐出租车,并得到广泛的应用。
参考文献
[1]谭浩强著.C程序设计[M].北京:
清华大学出版社,2005
[2]余发山、王福忠编著.单片机原理及应用技术[M].中国矿业大学出版社,2008.6
[3]贾宗璞、许合利.C语言程序设计[M].中国矿业大学出版社,2007.2
[4]孙余凯.传感器应用电路300例[M].北京:
电子工业出版社,2008.
[5]田立.51单片机C语言程序设计快速入门[M].北京:
人民邮电出版社,2007
[6]霍尔传感器原理及其应用
[7]Proteus与Keil的使用及联调
附1:
系统原理图
附2:
源程序代码
#include
#defineucharunsignedchar
#defin