出租车计费器唐淇汶 09064024Word格式.docx
《出租车计费器唐淇汶 09064024Word格式.docx》由会员分享,可在线阅读,更多相关《出租车计费器唐淇汶 09064024Word格式.docx(33页珍藏版)》请在冰豆网上搜索。
2.2.2AT89S52引脚介绍6
2.2.3液晶(1602)简介8
3出租车计费器软件设计10
3.1单片机资源使用10
3.1.1中断子函数11
3.1.2判断键盘子函数11
3.2显示部分函数12
3.2.1LCD显示子程序12
3.2.2控制部分和显示部分总流程图13
4PROTELDXP介绍15
致谢17
参考文献17
附录:
19
出租车计价器设计
摘要:
本设计的是一个基于单片机AT89S52的出租车自动计价器设计,附有复位电路,时钟电路,键盘电路等。
复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。
时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。
在上电时字符型液晶1602显示最初的起步价,里程收费,等待时间收费三种收费,通过按键可以调整起步价,里程收费,等待时间收费。
通过按键模拟出租车的运行,暂停,停止。
在1602液晶上可以显示运行的时间,运行时暂停的时间,通过计算可以得出总共的费用和总的路程。
在这里主要是以AT89S52单片机为核心控制器,P0口接1602液晶显示模块,P1口接按键的,通过按键输入。
关键词:
单片机AT89S52、1602液晶、按键、出租车计价器;
Taximeterdesign
Abstract:
ThisdesignisabasedonSCMAT89S52taxiautomaticchargingdesign,aresetcircuit,theclockcircuit,keyboardcircuit,etc.Resetcircuitissinglechipinitializationoperation,inadditiontothenormalinitial,aforeignertogetridofthetrouble,throughtheresetcircuitcanstartagain.Clockcircuitadopts12MHZofcrystaloscillator,asasystemclocksource,hashigheraccuracy.IntheelectriccharactertypeLCD1602showsthattheinitialstartingprice,mileagecharge,waitingtimechargethreecharges,throughthekeycanadjustthestartingprice,mileagecharge,waitingtimecharge.Throughthekeysimulationtaxioperation,stop,stop.In1602LCDcandisplayoperationtime,runtimepausetime,canbeobtainedbythecomputationofatotalcostsandtotaljourney.HereisthemainAT89S52SCMasthecorecontroller,P0portafter1602liquidcrystaldisplaymodule,P1mouthpickbutton,throughthekeyinput.
Keywords:
SCMAT89S52,1602liquidcrystal,buttons,Taximeter;
引言
出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。
国内出租车计价器已经经历了4个发展阶段。
从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;
再从集成电路式到目前的单片机系统设计的出租车计价器[4]。
出租车计价器计费是否准确是乘客最关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。
因此怎样设计出一种既能准确计价又能方便司机的计价器尤为重要。
因此,本文以单片机AT89S52为核心设计一款多功能出租车计价器,此设计主要是为了再出租车行业有一个较好的收费计时计费器,此设计附有复位电路,时钟电路,键盘电路,时钟电路采用12MHz的晶振。
该计价器能实现按时间和里程综合计算车价能显示时间、里程、单价、总车价等相关信息显示。
它比市场上的一些计价器使用更方便,功能更全,还具有系统稳定性好的优点。
1出租车计价器主要功能和设计方案
1.1出租车计价器设计要求
设计一个出租车自动计价器,计价包括起步价、行车里程计费、等待时间计价三部分,用1602液晶显示总金额,运行时间,暂停时间,最大值为99.9元,起步价为5.0元,3Km之内起步价计费,超过3Km,设速度为100m/s,10s增加1.3元(即1KM增加1.3元),等待时间单价为每分钟1.5元,用液晶显示总里程,同时用液晶显示等待时间和运行花费时间。
1.1.1计费功能
费用的计算是按行驶里程收费。
设起步价为5.00元。
当里程<
3km时,按起价计算费用
当里程>
3km时,每公里按1.3元计费
等待累计时间>
2min时,按1.5元/min计费
1.1.2显示功能
1、显示行驶里程:
用四位数字显示,显示方式为“XXXX”,单位为km。
计程范围0-99km,精确到1km。
2、显示等候时间:
用两位数字显示,显示方式为“XX”,单位为min。
计时范围0-59min,精确到1min。
3、显示总费用:
用四位数字显示,显示方式为“XXX.X”,单位为元。
计价范围0-999.9元,精确到0.1元。
1.2系统的主要功能和方案
1.2.1系统的主要功能
本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价,等待时间计费单价。
同时具有运行,暂停,停止等状态,可以显示运行的时间,同时可以显示暂停的时间,具有累加功能,暂停和运行时间在暂停和运行前一次的状态上计时。
出租车停止后能够显示行驶的总费用。
1.2.2系统采用的方案
采用MCU技术,通过单片机作为主控器,利用1602字符液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节。
如图1-1:
图1-1系统模块图
本设计方案用单片机为主控芯片,设计简单,成本较低,是比较理想的设计方案。
2出租车计费器硬件设计
2.1系统各个模块电路设计
2.1.1时钟电路
单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。
通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。
这样就构成一个稳定的自激振荡器。
振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号[7]。
如图2-1:
图2-1时钟电路
2.1.2复位电路
复位操作有两种基本形式:
一种是上电复位,另一种是按键复位。
按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。
上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。
上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。
RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作[6]。
如图2-2:
图2-2复位电路图
2.1.3液晶(1602)显示电路
液晶是字符型液晶,并且带字符库的,不需要查找代码。
英文字符就可。
液晶电路使用时,如果发现液晶不亮可以调节连接液晶的点位器,改变液晶的亮度[9]。
1602的8位配置数据位与单片机P1口相连接,然后通过配置不同的数据位,完成相应的功能,如图2-3:
图2-3LCD1602与单片机连接图
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域[12]。
2.1.4键盘接口电路
独立式键盘:
独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。
I/O口内部有上拉电阻时,外部可不接上拉电阻。
本次设计用到的6个按键,分别于单片机的P2.0到P2.5相连,如图2-4:
图2-4按键接口电路
2.2出租车路程测量和各硬件介绍
2.2.1定时器模拟路程远近
出租车中需要一个能准确获得车轮转动即路量信号的装置,以得到标准的脉冲信号送入单片机的定时/计数器T1即P3.5引脚,利用单片机的T1的计数功能完成100次的计数后产生一中断来完成路程的测量。
(设车轮周长为1m,则霍尔传感器每产生100个脉冲便表示车已行行驶0.1km,为了演示方便本设计中采用按键模拟增加里程。
每按一个按键增加0.5公里的里程。
如果按两次就是1公里,以此类推不断的增加来模拟车的不断前进。
2.2.2AT89S52引脚介绍
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与80C51产品指令和引脚完全兼容。
具体引脚介绍如下:
实物图:
图2-5at89c52实物图
原理图:
图2-6
图2-5单片机引脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
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口同时为闪烁编程和编程校验接收一些控制信号。
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:
来自反向振荡器的输出[17]。
2.2.3液晶(1602)简介
线段的显示
点阵图形式液晶由M×
N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×
8=128个点组成,屏上64×
16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;
当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;
当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理[11]。
字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×
8或8×
8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可[11]。
汉字的显示
汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字[14]。
图2-7LCD1602实物图
图2-8LCD1602引脚图
LCD1602的十六个引脚对应位如下表所示,在本次设计中,8位数据位与单片机的P1口相连,RS位与P3.0,R/W位与P3.1,E位与P3.2相连。
具体参数以及对应接口信号说明如下表[15]:
表2-1字符型液晶1602主要技术参数
显示容量
16*2个字符
芯片工作电压
4.5—5.5V
工作电流
2.0mA(5.0V)
模块最佳工作电压
5.0V
字符尺寸
2.95*4.35(W*H)mm
表2-2接口信号说明
编号
符号
引脚说明
1
Vss
电源地
9
D2
DataI/O
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压信号
11
D4
4
Rs
数据/命令选择端(H/L)
12
D5
5
R/W
读/写选择端(H/L)
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
控制器接口说明(HD44780及兼容芯片)
1、基本操作时序
a读状态:
输入:
Rs=L,Rw=H,E=H输出:
D0—D7=状态字
b写指令:
Rs=L,Rw=L,D0—D7=指令码输出:
无
E=高脉冲
C读数据:
Rs=H,Rw=L,E=H输出:
D0—D7=数据
d写数据:
Rs=H,Rw=L,D0—D7=数据输出:
状态字说明:
表2-3状态字说明a
STA7
STA6
STA5
D5
STA4
D4
STA3
D3
STA2
D2
STA1
D1
STA0
D0
表2-4状态字说明b
STA0--6
当前数据地址指针的数值
读写操作使能
1:
禁止0:
允许
注:
对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0
RAM地址映射图:
控制器内部带有80*8位的RAM缓冲区,对应关系如下表:
表2-5RAM地址映射图LCD16字*2行
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
…
27
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
67
显示模式设置:
显示模式设置如下表:
表2-6显示模式设置
指令码
功能
设置16*2显示,5*7点阵,8位数据接口
显示开关及光标设置下表:
表2-7显示开关及光标设置
D
C
B
D=1开显示;
D=0关显示
C=1显示光标;
C=0不显示光标
B=1光标闪烁;
B=0光标不显示
N
S
N=1当读或写一个字符后地址指针加一,
且光标加一
N=0当读或写一个字后地址指针减一,
且光标减一
S=1当写一个字符后,整屏显示左移(N=1)
或右移(N=0),以得到光标不移动而屏
幕移动的效果
S=0当写一个字符,整屏显示不移动
数据控制:
控制器内部没有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM[8]。
3出租车计费器软件设计
3.1单片机资源使用
在本次设计中键盘用到了P2口,其中P2.0到P2.5口作为键盘的输入,其中P2.7为24C02的输入口;
P1.0到P1.7为液晶输入口;
P0.0为蜂鸣器输入口;
3.1.1中断子函数
对于中断程序,只要定时器计数满就会产生中断50ms中断一次,共计20次,秒钟加1,秒钟计满再分钟加,当分钟加到99时全部清零。
流程图如下:
图3-1中断子程序流程图
3.1.2判断键盘子函数
对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,在判键释放,最后执行键功能程序。
图3-2判断按键子函数流程图
3.2显示部分函数
3.2.1LCD显示子程序
1602液晶是字符型液晶,它的内部自带字符库,它可以写两行的字符,同时每行可以写40个字符,在写显示程序的时候,我们先写命令,再设定字符显示,最后写数据,在每写一次命令或数据都需要判断液晶是否忙。
图3-3显示子程序流程图
3.2.2控制部分和显示部分总流程图
控制部分和显示部分总流程图如图3-4:
图3-4整体程序流程图
在程序开始时,首先对定时器,1602液晶屏进行初始化操作,其初始化代码如下:
定时器初始化:
voidinit()//定时器初始化
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET0=1;
ET1=1;
EA=1;
TR0=0;
TR1=0;
}
液晶初始化:
voidlcd_init()//液晶初始化
wr_com(0x3c);
wr_com(0x06);
wr_com(0x0c);
wr_com(0x01);
在初始化完成以后,对按键进行判断,如果有按键中断,再对相应按键进行响应。
通过对响应位判断程序执行哪一个函数,如果V=1,计费器开始运行。
V=2,计费器暂停。
V=3,计费器停止运行。
当标志位jump_out=1时,液晶进行清零操作,然后执行清零函数。
计费器回到初始状态。
4PROTELDXP介绍
ProtelDXP在前版本的基础上增加了许多新的功能。
新的可定制设计环境功能包括双显示器支持,可固定、浮动以及弹出面板,强大的过滤和对象定位功能及增强的用户界面等。
ProtelDXP是第一个将所有设计工具集于一身的板级设计系统,电子设计者从最初的项目模块规划到最终形成生产数据都可以按照自己的设计方式实现。
ProtelDXP运行在优化的设计浏览器平台上,并且具备当今所有先进的设计特点,能够处理各种复杂的PCB设计过程。
通过设计输入仿真、PCB绘制编辑、拓扑自动布线、信号完整性和设计输出等技术融合,ProtelDXP提供了全面的设计解决方案。
ProtelDXP2004是Altium公司于2004年推出的最新版本的电路设计软件,该软件能实现从概念设计,顶层设计直到输出生产数据以及这之间的所有分析验证和设计