出租车计费系统.docx
《出租车计费系统.docx》由会员分享,可在线阅读,更多相关《出租车计费系统.docx(14页珍藏版)》请在冰豆网上搜索。
出租车计费系统
嵌入式程序课程设计
设计题目:
出租车计费系统
指导老师:
温景国
专业班级:
通信06-01班
姓名:
学号:
一.设计题目:
出租车计费器
二.设计要求
1.设计任务
(1)外部脉冲自动计数,自动显示。
(2)设计一个255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
(3)设计一个50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
2.设计一个出租车计费系统:
起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)
三.单片机最小系统硬件资源介绍
※MCS-51单片机;
※ 6位共阳极数码管;
※ 段码驱动器74HC573,位选译码器74HC138;
※ 4路独立式按键;
※ 外部晶振电路;
※ ISP下载接口(Insystemprogram,在系统编程);
※ DC+5V电源试配器(选配);
※ ISP下载线(选配)。
单片机最小系统实训板硬件资源分布见图1元件布局图和图2电路原理图:
其中P1为外部电源输入座(DC+5V),S8为电源最小系统的电源开关,E1和C3为电源滤波,去耦电容。
D1为系统电源指示灯。
J2为ISP下载接口,S7系统复位按键。
CRY1,C1,C2为外部时针电路。
IC1为89S51(DIP-40),左上角为第一脚。
PRE1,PRE2。
为上拉排阻(阻值4.7k—10k)。
J5,J9,J6,J10分别对应单片机的P0,P1,P2,P3口。
便于二次开发。
6路共阳极数码管动态显示电路,P0口通过74HC573(起驱动和隔离作用,让电流通过74CH573流入公共地),来控制数码管的8路段码,P20-P22通过74HC138译码器(使用其中的6路)控制数码管的公共端(中间还有三极管做驱动器)。
这样设计的理由:
为了保证该单片机最小系统的二次开发的资源充足和合理性。
如果单只做一个动态显示电路,可以省去74HC573,和74HC138。
图1元件布局图
图2单片机最小系统原理图
四.设计思路
1、255计数:
255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。
然后对TL1的内容进行相应的二进制---十进制转换:
首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。
接着将相应的十进制数进行译码,并在LED数码管上显示出来。
每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。
图3255计数程序流程图
五.计数程序
ORG 0000H
SJMP0030H
ORG 0030H;主程序开始
START:
MOVTMOD,#60H ;计数器初始化,选用定时器1,模式2,计数方式
SETBTR1 ;开启定时器1
LCALLL1 ;转到读取TL1中得数并进行二到十转换
LCALLL2 ;转到显示程序进行显示
SJMPSTART ;返回主程序
L1:
MOVR0,#20H ;将20H地址送R0,用来存放百位
MOVA,TL1 ;取TL1中的数值,即脉冲数送A
MOVB,#64H ;将100送到B
DIVAB ;将脉冲数除以100取出百位
MOV@R0,A ;存百位到20H
INCR0 ;R0加1,即得存放十位的地址
MOVA,B ;将余下的十位个位送A
MOVB,#0AH ;将10送B
DIVAB ;将十位个位除以10取出十位
MOV@R0,A ;存十位到21H
INCR0 ;R0加1,即得个位地址
MOV@R0,B ;存个位到22H
RET ;显示子程序
L2:
MOVR1,#00H ;数码管显示从最低位开始
MOVDPTR,#TAB ;将译码表首地址送DPTR
L3:
MOVA,R1 ;将数码管选通信号送A
MOVP2,A ;将A中的内容送P2口,控制数码管显示
MOVA,@R0
MOVCA,@A+DPTR;查表译码
MOVP0,A ;将字符码送P0口输出显示
LCALLDIMS ;调用延时子程序
DECR0
INCR1
CJNER1,#03H,L3;循环显示控制,未显示完三位则循环,显示完则退出
RET ;延时子程序
DIMS:
MOVR2,#06H ;延时子程序
DL:
MOVR3,#0FFH
DL1:
DJNZR3,DL1
DJNZR2,DL
RET ;数码管译码表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END
*0-50000计数程序
ORG 0000H
SJMP0030H
ORG 0030H
MAIN:
MOV70H,#00H
MOV71H,#00H
MOV72H,#00H
MOV73H,#00H
MOV74H,#00H
MOVTMOD,#60H
MOVTL1,#0FFH
MOVTH1,#0FFH
SETBTR1
START:
LCALLL2
LCALLL4
SJMPSTART
L2 :
JBCTF1,L1 ;判定时器T1是否清零
L3 :
RET
L1 :
INC70H
MOVR5,70H
CJNER5,#0AH,L3 ;十位
MOV70H,#00H
INC71H
MOVR5,71H
CJNER5,#0AH,L3 ;百位
MOV71H,#00H
INC72H
MOVR5,72H
CJNER5,#0AH,L3 ;千位
MOV72H,#00H
INC73H
MOVR5,73H
CJNER5,#0AH,L3 ;万位
MOV73H,#00H
INC74H
MOVR5,74H
CJNER5,#05H,L3
MOV74H,#00H
SJMPL3
L4 :
MOVR1,#00H ;数码管显示从最低位开始
MOVDPTR,#TAB ;将译码表首地址送DPTR
MOVR0,#70H
L5:
MOVA,R1 ;将数码管选通信号送A
MOVP2,A ;将A中的内容送P2口,控制数码管显示
MOVA,@R0
MOVCA,@A+DPTR;查表译码
MOVP0,A ;将字符码送P0口输出显示
LCALLDIMS ;调用延时子程序
INCR0
INCR1
CJNER1,#05H,L5;循环显示控制,未显示完六位则循环,显示完则退出
RET ;延时子程序
DIMS:
MOVR2,#06H ;延时子程序
DL:
MOVR3,#0FFH
DL1:
DJNZR3,DL1
DJNZR2,DL
RET ;数码管译码表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END
*出租车计费显示数码管
图4出租车计费系统显示
5.6出租车计费系统程序
ORG 0000H
SJMP0030H
ORG 0030H
MAIN:
MOV70H,#00H
MOV71H,#00H
MOV72H,#00H;脉冲计数
MOV73H,#00H;每500脉冲显示个位
MOV74H,#00H;里程数十位
MOV75H,#00H;里程数百位
MOV76H,#00H;角
MOV77H,#05H;元
MOV78H,#00H;十元
MOVTMOD,#60H
MOVTL1,#0FFH
MOVTH1,#0FFH
SETBTR1
START:
LCALLL1
LCALLL9 ;转到显示程序进行显示
SJMPSTART ;计数脉冲子程序
L1 :
JBCTF1,JISHU;转到记数脉冲处
L2 :
RET
JISHU:
INC70H ;计数延时,数据显示频率
MOVR5,70H
CJNER5,#01H,L2
MOV70H,#00H
INC71H
MOVR5,71H
CJNER5,#05H,L2
MOV71H,#00H
INC72H
MOVR5,72H
CJNER5,#0AH,L2 ;里程数个位
MOV72H,#00H
INC73H
MOVR1,75H
CJNER1,#00H,L3 ;判断是否超过100公里
MOVR1,74H
CJNER1,#00H,L3 ;判断是否超过10公里
MOVR1,73H
CJNER1,#03H,L3 ;判断是否超过2公里
L3:
JCL2
LCALLMONEY
MOVR5,73H
CJNER5,#0AH,L2 ;里程数十位
MOV73H,#00H
INC74H
MOVR5,74H
CJNER5,#0AH,L2 ;里程数百位
MOV74H,#00H
INC75H
MOVR5,75H
CJNER5,#0AH,L2
MOV75H,#00H
SJMPL2 ;计费开始
MONEY:
CLRC
MOVR1,76H
MOVR7,#08H
MOVA,R7
ADDCA,R1
MOVR6,A
JCL9
L4 :
MOVA,R6
DAA
MOVR6,A
MOVR1,77H
SWAPA
ANLA,#0FH
ADDA,R1
MOV77H,A
MOVR5,A
CJNER5,#0AH,L5
SJMPL8
L5 :
MOVA,R6
ANLA,#0FH
MOV76H,A
L6 :
RET ;元加1
L7:
INC77H
MOVA,77H
MOVR5,A
CJNER5,#0AH,L4 ;十元加1
MOV77H,#00H
INC78H
MOVA,78H
CJNER5,#0AH,L6
MOV77H,#00H
SJMPL4
L8 :
MOV77H,#00H
INC78H
MOVA,78H
CJNER5,#0AH,L6
MOV77H,#00H
SJMPL5
L9:
MOVR4,#00H ;数码管显示从最低位开始
MOVR0,#73H
L10:
MOVDPTR,#TAB1;将译码表首地址送DPTR
MOVA,R4 ;将数码管选通信号送A
MOVP2,A ;将A中的内容送P2口,控制数码管显示
MOVA,@R0
CJNER4,#04H,L11
MOVDPTR,#TAB2;将译码表首地址送DPTR
L11 :
MOVCA,@A+DPTR;查表译码
MOVP0,A ;将字符码送P0口输出显示
LCALLDIMS ;调用延时子程序
INCR0
INCR4
CJNER4,#06H,L10;循环显示控制,未显示完六位则循环,显示完则退出
RET ;延时子程序
DIMS:
MOVR2,#06H ;延时3ms子程序
DL:
MOVR3,#0FFH
DL1:
DJNZR3,DL1
DJNZR2,DL
RET ;数码管译码表
TAB1:
DB 0C0H,0F9H,0A4H,0B0H,99H;字符译码
DB 92H,82H,0F8H,80H,90H
TAB2:
DB 040H,079H,024H,030H,19H;带小数点字符译码
DB 12H,02H,078H,00H,10H
END
六.结束语
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。
使之不断地战胜别人,超越前人。
同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。
于是,我坚持了下来。
当然最终,这个设计很成功,主要体现在,这一整个系统,几乎没有参考任何书,程序由自己独立完成,与用8255来制作的交通灯控制系统相比,程序简单易读,结构清楚,最重要的是成本低。
在设计一个系统,除了达到所要求的性能指标以外,成本也是很重要的一个指标。
成本的高低也决定了产品的适用性。