《51单片机-出租车计价器课程设计(共20页).doc》由会员分享,可在线阅读,更多相关《51单片机-出租车计价器课程设计(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上第一章 出租车计价系统的设计要求与设计方案1.1 出租车计价器设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用七段数码管显示总金额,单价,运行里程,起步价为6元,超过6元,每一公里增加1元或2元,等待时间单价为每30秒钟1元,计费功能:费用的计算是按行驶里程收费。设起步价为6元。1、当总金额6元时,每公里按1元或2元计费3、等待累计时间30s时,按1元/30s计费4、S1为启动按钮、S2转换单价按钮、S3复位按钮。显示功能:1、显示行驶里程:用三位数字显示,显示方式为“XX.X”,单位为km。计程范围0-99.9km,精确到0.1
2、km。2、显示单价:用两位数字显示,显示方式为“X.X”,单位为元。3、显示总费用:用三位数字显示,显示方式为“XX.X”,单位为元。计价范围0-99.9元,精确到0.1元。1.2 系统主要功能本出租车自动计费,上电后显示最初的起步价,里程计费单价。同时具有运行,复位,转换等状态,可以切换白天与晚上不同计费单价,可以实现每等待30s收1元功能。出租车显示行驶的总费用,里程,单价。1.3 方案论证与比较方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管
3、显示,一下是该方案的流程框图,方案一如图1-1所示:图1-1方案一方案二:采用EDA技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块 计量模块、译码和动态扫描显示模块,其系统框图如图1-2所示:图1-2方案二方案三:采用MCU技术,通过单片机作为主控器,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方案图如图1-3所示:图1-3方案三方案总结:通过各个方案的比较,本次采用方案三,不但控制简单,而且成本低廉,设计电路简单。第二章 出租车计价系统的硬件设计2.1 AT89C51单片机介绍AT89C51
4、是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集合输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控器,为很多嵌入式控制系统提供了一种灵活性且廉价的方案单片机各引脚功能说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口
5、作为原码输入口,当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口当用于外部程序存储器或
6、16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个
7、机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间选择外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.2 里程计算、计价单元的设计里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显
8、示单元的。其原理如图2-1所示 图2-1由于A44E 属于开关型的霍尔器件,其工作电压范围比较宽(4.518V),其输出的信号符合TTL 电平标准,可以直接接到单片机的I/O 端口上,而且其最高检测频率可达到1MHZ。如图2-2,A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D 和OC 门输出E 五个基本部分组成。 图2-2 路程测量电路在输入端输入电压CC V ,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差H V 输出,该H V 信号经放大器
9、放大后送至施密特触发器整形,使其成为方波输送到OC 门输出。当施加的磁场达到工作点(即OP B )时,触发器输出高电压(相对于地电位),使三极管导通,此时OC 门输出端输出低电压,通常称这种状态为开。当施加的磁场达到释放点(即rP B )时,触发器输出低电压,三极管截止,使OC 门输出高电压,这种状态为关。这样两次电压变换,使霍耳开关完成了一次开关动作。我们选择了P3.5 口作为信号的输入端,内部采用计数的方式,车轮每转一圈(我们设车轮的周长是10米),霍尔开关就检测并输出信号,引起单片机对脉冲计数,当计数达到10次时,也就是0.1 公里,单片机就控制将金额自动的加增加,其计算公式:当前单价
10、公里数=金额。2.3 数据显示单元的设计由于设计要求有单价(2 位)、路程(3位)、总金额(3位)显示输出,我们采用8个7段数码管动态显示。如图2-3:图2-3 数据显示硬件电路图2.4 按键单元的设计电路共采用了四个按键,S1、S2、S3、S4,其功能分别是:S1 启动计价开关、S2 白天/晚上转换开关、S3 数据复位清零开关、 S4闭合表示出租车正常运行,计价器也正常计价;若打开S4则表示出租车在暂停,转入判断是否收费程序,闭合超过30秒,开始计价。如图2-4: 图2-4 按键单元电路图2.5 振荡电路单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL
11、2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。 振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2-5所示: 图2-5 振荡电路2.6 复位电路复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RE
12、RST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2-6所示。 图2-6 复位电路总电路图第三章 出租车计价系统的软件设计3.1主程序流程图记描述 由于用到了外部中断0,所以,按中断系统的编程结构在0000H处放置一条长跳转指令LJMP START跳转到主程序入口,在外部中断0的中断入口地址0003H处放置一条长跳转指令LJMP EXT0跳转到外部中断0服务程序处。主程序进行程序中用到的一些存储单元的初始化,T0,T1的初始化。首先,进行存储器单元初始化,将71H-79H单元赋值。然后进行定时器的设置。设置T1
13、的工作方式为模式2,计数状态,自启动。T0的工作方式,模式1,定时状态,自启动,对输入的脉冲进行计数,给T0、T1赋初值。之后调用计数脉冲子程序,及等待子程序,数码管动态显示子程序,最后进入键盘扫描子程序进行扫描。主程序不断进行调用数码管显示子程序及键盘扫描子程序循环操作,等待中断。如图3-1: 图3-1 主程序流程图3.2计费子程序流程图72H存储总金额小数位,73H存储器总金额个位,78H存储器总金额十位,77H存储单价元。将72H中值放入A中,再将A与77H相加,即小数位与单价相加,结果存入A,再进行十进制调整,将结果存于R6,将高四位与低四位交换并屏蔽高四位,保留低四位与个位相加得到总
14、金额个位。若总金额超过10则清零,并且总金额十位加1。将R6中数值取出,屏蔽高四位,输出总金额小数位。如图3-2: 图3-2 计费子程序流程图3.3 等待是否收费子程序在出租车的计价系统中,出租车在等待的时候也要计价,本设计体现了这点。程序判断了出租车是否停止,若停止30秒以上是,开始计价。55H中赋初值20,56H中赋初值10,总共30秒延时。超过30秒时,调用计费子程序。如图3-3 图3-3 等待是否收费子程序流程图3.4 按键子程序流程图 图3-4 等待收费子程序流程图3.5 外部中断0流程图 图3-5 外部中断0子程序流程图程序ORG 0000H LJMP MAIN ORG 0003H
15、 ;外部中断入口地址 LJMP REST ORG 030H MAIN: MOV 71H,#00H ;脉冲计数每10个脉冲里程数加0.1显示缓冲单元 MOV 72H,#00H ;存储总金额小数位 MOV 73H,#00H ;存储总金额个位 MOV 74H,#00H ;存储里程数小数位 MOV 75H,#00H ;存储里程数个位 MOV 76H,#00H ;存储单价角位 MOV 77H,#01H ;存储单价元位 MOV 78H,#00H ;存储总金额十位 MOV 79H,#00H ;存储里程数十位 MOV 55H,#20 ;给定等待初值20*50ms MOV 56H,#10 ;10秒等待时间初值
16、SETB EA ;开总中断 SETB EX0 ;开外部中断0 MOV TCON,#04H ;外部中断0低电平 MOV TMOD,#61H ;设置使用定时器1,模式2,计数状态,自启动,定时器0,模式1,定时状态,自启动 MOV TL0,#0B0H ;50ms初值设定C350H MOV TH0,#03CH MOV TL1,#0FFH ;设置定时器低八位初值为FFH,即有一脉冲输入就溢出 MOV TH1,#0FFH ;设置定时器高八位初值为FFH,用于重装低八位START: LCALL PULSE ;调用计数脉冲子程序 LCALL WAIT ;调用等待子程序 LCALL DISPLAY;调用显示程
17、序进行显示 LCALL KEY ;调用键盘扫描程序 SJMP START ;返回START处继续循环执行REST: PUSH ACC MOV 71H,#00H ;脉冲计数每10个脉冲里程数加1显示缓存单元 MOV 72H,#00H ;存储总金额个位 MOV 73H,#00H ;存储总金额十位 MOV 74H,#00H ;存储里程数个位 MOV 75H,#00H ;存储里程数十位 MOV 78H,#00H ;存储总金额百位 MOV 79H,#00H ;存储里程数百位 MOV 55H,#20 MOV 56H,#10 POP ACC RETIPULSE: JBC TF1,PTO1 ;TF1为1则转P
18、T01 LJMP PSOUTPTO1: MOV 55H,#20 MOV 56H,#10 INC 71H MOV R1,71H CJNE R1,#0AH,PSOUT ;脉冲调整,改变立即数即可;里程数个位74H,R1不等于0AH则转PSOUT MOV 71H,#00H INC 74H LCALL MONEY MOV R1,74H CJNE R1,#0AH,PSOUT ;里程数十位75H MOV 74H,#00H INC 75H MOV R1,75H CJNE R1,#0AH,PSOUT MOV 75H,#00H INC 79H MOV R1,79H CJNE R1,#0AH,PSOUT MOV
19、79H,#00HPSOUT:RETWAIT: JBC TF0,PTO2 LJMP CHU0PTO2:MOV TL0,#0B0H MOV TH0,#03CH DJNZ 55H,CHU0 ;不为0则转 MOV 55H,#20 DJNZ 56H,CHU0 MOV 56H,#10 ;30秒等待计时 INC 72H MOV A,72H LCALL MONEY1CHU0:RETMONEY: MOV A,72H ADD A,77HMONEY1:DA A MOV R6,A SWAP A ANL A,#0FH ADD A,73H MOV 73H,A CJNE A,#0AH,MONEY2 MOV 73H,#00H
20、 INC 78H MOV A,78H CJNE A,#0AH,MONEY2 MOV 78H,#00HMONEY2:MOV A,R6 ANL A,#0FH MOV 72H,A RETDISPLAY:MOV A,78H CJNE A,#00H,L2 MOV A,73H CJNE A,#06H,L1 L1:JNC L2 MOV A,#82H ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0
21、,A MOV P2,#40H LCALL DELAY MOV P2,#00H LJMP L3 L2:MOV A,73H MOV DPTR,#TAB MOVC A,A+DPTR ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,72H MOVC A,A+DPTR MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,78H MOVC A,A+DPTR MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H L3:MOV A,75H MOV D
22、PTR,#TAB MOVC A,A+DPTR ADD A,#80H MOV P0,A MOV P2,#08H LCALL DELAY MOV P2,#00H MOV A,74H MOVC A,A+DPTR MOV P0,A MOV P2,#04H LCALL DELAY MOV P2,#00H MOV A,77H MOVC A,A+DPTR ADD A,#80H MOV P0,A MOV P2,#20H LCALL DELAY MOV P2,#00H MOV A,76H MOVC A,A+DPTR MOV P0,A MOV P2,#10H LCALL DELAY MOV P2,#00H MOV
23、 A,79H MOVC A,A+DPTR MOV P0,A MOV P2,#80H LCALL DELAY MOV P2,#00H RETKEY: MOV A,#0FH MOV P3,A MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY1 LCALL DELAY SJMP EKEOUTKEY1: LCALL DELAY MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY2 SJMP EKEOUTKEY2: MOV R1,AKEY3: MOV A,P3 ORL A,#0FCH CJNE A,#0FFH,KEY3 MOV A,R1 JNB ACC.0,RUN JNB ACC.1,CHANGE SJMP EKEOUTRUN: SETB TR0 SETB TR1 SETB EA SJMP EKEOUTEKEOUT:RETCHANGE: PUSH ACC MOV A,77H CJNE A,#02H,NIGHT MOV 77H,#01H SJMP CHOUTNIGHT: MOV 77H,#02HCHOUT: POP ACC RETDELAY: MOV R7,#100 DJNZ R7,$ RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END专心-专注-专业