出租车计价系统设计 出租车计费系统设计大学论文Word格式.docx
- 文档编号:21836336
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:27
- 大小:493.55KB
出租车计价系统设计 出租车计费系统设计大学论文Word格式.docx
《出租车计价系统设计 出租车计费系统设计大学论文Word格式.docx》由会员分享,可在线阅读,更多相关《出租车计价系统设计 出租车计费系统设计大学论文Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
这里使用了3个按键,分别为:
设置按键、+键、-键。
当未计费时即可使用这三个键设置时间。
按一下设置按键为设置小时,两下设置分钟,三下设置秒钟,第四下保存设置。
设置过程中设置指示灯点亮。
若在设置过程中开始计费,则设置不会被保存,且指示灯熄灭。
按键分别接入P2口的高3位,由外部中断1响应。
当按下按键后即触发外部中断1。
由于按键时间相对于单片机响应时间来说非常长,所以此时可根据P2口的高3位判断是哪个按键按下,再在中断程序中做出相应操作。
3.3.4DS1302芯片接口电路
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信。
实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。
DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:
(1)RES复位,
(2)I/O(数据线),(3)SCLK(串行时钟)。
时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。
DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。
DS1302是由DS1202改进而来,增加了以下的特性:
双电源管脚用于主电源和备份电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器。
它广泛应用于电话、传真、便携式仪器以及电池供电的仪器仪表等产品领域。
下面将主要的性能指标作一综合:
实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力
◆31×
8位暂存数据存储RAM
◆串行I/O口方式使得管脚数量最少
◆宽范围工作电压:
2.0~5.5V
◆工作电流:
2.0V时,小于300nA
◆读/写时钟或RAM数据时,有两种传送方式:
单字节传送和多字节传送(字符组方式)
◆
8脚DIP封装或可选的8脚SOIC封装(根据表面装配)
◆简单3线接口
◆与TTL兼容(Vcc=5V)
◆可选工业级温度范围-40度~+85度
◆与DS1202兼容
◆在DS1202基础上增加的特性:
−对Vcc1有可选的涓流充电能力
−双电源管用于主电源和备份电源供应
−备份电源管脚可由电池或大容量电容输入
−附加的7字节暂存存储器
DS1302的管脚排列及描述如下图及表所示
管脚描述:
X1,X2--32.768KHz晶振管脚
GND--地
RST--复位脚
I/O--数据输入/输出引脚
SCLK--串行时钟
Vcc1,Vcc2--电源供电管脚
该电路通过从DS1302芯片接收数据获取时间。
若时间为夜间(22:
00前),则点亮夜间指示灯,并改变价格。
4程序设计
4.1总体程序框图
如图所示为总体程序框图
4.2子程序设计
子程序主要包括:
初始化程序INIT、读取时间程序RDTIME、写入时间程序WTTIME。
两个时间程序还需调用:
从DS1302读取数据的子程序RECEIVE、从DS1302发送数据的子程序SEND。
初始化程序INIT主要功能是将各项数据赋初值、开中断。
读取时间程序RDTIME则给控制字赋值,然后调用RECEIVE程序,再将返回的值分别保存到小时、分钟、秒钟。
最后根据小时对单价作出调整。
写入时间程序WTTIME则给控制字赋值,然后调用SEND程序分别将小时、分钟、秒钟保存到DS1302芯片中。
4.3中断程序设计
中断程序在整个程序中占有最重要到地位。
下面分别作介绍。
4.3.1计数器T0的中断程序
计数器T0的中断程序START框图如下。
在该程序中,接收到第一个脉冲后开始计算里程,将金额设置为起价5元。
之后每100个脉冲(50米)对里程做一次加法运算。
当脉冲数达到2000个(1公里)后开始对金额递增。
4.3.2外部中断0的中断程序
当计时开关断开后会触发外部中断0,从而调用中断程序CLEAR。
该程序将各项数据复位。
4.3.3外部中断1的中断程序
当没有计费且按下按键时触发外部中断1。
首先判断按下哪个键。
若按下设置键则改变设置类型。
按一次设置键,则设置小时;
按两次则设置分钟;
按三次设置秒钟;
按四次则调用WTTIME程序将设置好的值写入DS1302芯片中。
若按下+键,则判断设置类型,根据设置类型分别对小时、分钟、秒钟加一。
若按下-键,则根据设置类型分别对小时、分钟、秒钟减一。
4.3.4定时器T1的中断程序
定时器T1的中断程序即为显示程序。
该程序每4ms显示一位。
若没有处于设置时间状态,则每秒钟读取一次时间;
否则不读取时间,只显示当前值,以便于对时间进行设置。
显示程序轮流对12位LED进行显示,并在适当地方加上小数点。
若没有计费,则不显示金额和里程。
流程图见下页。
5总结
该设计实现了计价器的基本功能。
若要进行扩展,可在以下方面进行考虑:
语音功能、打印功能、防作弊功能、IC卡的使用以及其它对系统的保护功能等。
通过这次设计,我对8051系列单片机的内部结构、存储空间有了更深入细致的了解,对汇编程序的编写及中断的应用更加熟练;
通过对DS1302芯片、LED显示器和按键的使用,对接口技术对应用有了初步的认识。
希望今后通过努力,使自己对该课程知识及应用能达到熟练掌握直至精通的程度。
附录1:
电路图
附录2:
计价效果图(晚上时间21:
09:
10,公里数为8.4,价格为15.3)
附录3:
时间设置效果图(当前时间:
21:
24:
20,设置时间:
23:
37:
56)
附录4:
源代码
;
*************************************
出租车计价器程序
05075,伍龙军
2006.7.9-7.13
************************************
各项常量
**********************************
PRICEEQU1FH;
保存单价地址
PULSEEQU1EH;
保存脉冲数的地址
TURNEQU1DH;
显示轮换记录器,为12时显示小时十位,为11时显示小时个位,依次类推
RDTMEQU1CH;
读取时间计数器,0.5秒钟读一次
SUMYUANEQU1BH;
保存金额元(BCD码)地址
SUMJFEQU1AH;
保存金额角和分(BCD码)地址
DISMEQU19H;
保存路程公里数地址
DISFEQU18H;
保存路程小数地址
TIMEHEQU17H;
保存时间小时地址
TIMEMEQU16H;
保存时间分钟地址
TIMESEQU15H;
保存时间秒钟地址
BITCNTEQU14H;
保存传输位的地址
CMDEQU13H;
保存命令字的地址
RCVEQU12H;
接收数据缓冲区的地址
SNDEQU11H;
发送数据缓冲区的地址
SETTMEQU10H;
设置时间
SPRICEEQU09H;
保存起价地址
HOUR1EQU0FH;
小时十位显示地址
HOUR0EQU0EH;
小时个位显示地址
MIN1EQU0DH;
分钟十位显示地址
MIN0EQU0CH;
分钟个位显示地址
SEC1EQU0BH;
秒钟十位显示地址
SEC0EQU0AH;
秒钟个位显示地址
TENYEQU09H;
金额十元显示地址
ONEYEQU08H;
金额元显示地址
TENTHYEQU07H;
金额角显示地址
TENMEQU06H;
路程十公里显示地址
ONEMEQU05H;
路程公里显示地址
TENTHMEQU04H;
路程十分之一公里显示地址
DSIOBITP1.0;
DS1302的数据传送总线地址
DSCLKBITP1.1;
DS1302的时钟控制总线地址
DSRSTBITP1.2;
DS1302的复位总线地址
LEDNTBITP1.7;
夜晚指示灯
LEDSETBITP1.6;
设置时间指示灯
STTMBITP2.5;
设置按键口
STADDBITP2.6;
时间增加按键口
STDECBITP2.7;
时间减少按键口
*********************************
程序开始
********************************
ORG0000H
AJMPMAIN
ORG0003H;
外部中断0程序,清零
AJMPCLEAR
ORG000BH;
T0中断程序,计价,计里程
AJMPSTART
ORG0013H
AJMPBUTTON;
外部中断1程序,响应按键
ORG001BH;
T1中断程序,显示
AJMPDISP
MAIN:
ACALLINIT
AJMP$
**************************************************************************
子程序
******************************
初始化程序
设置初值,开中断
INIT:
MOVSP,#30H;
设置堆栈到用户RAM区
MOVDPTR,#TAB
MOVPRICE,#07HMOVSPRICE,#05H
CLRLEDNT
CLRLEDSET
MOVSETTM,#4
MOVTURN,#12
MOVSUMYUAN,#0ABH;
金额为0
MOVSUMJF,#0AAH
MOVDISM,#0ABH;
路程为0
MOVDISF,#0AAH
MOVPULSE,#22
ACALLRDTIME;
读取时间
MOVRDTM,#250;
读取时间计数器初值
MOVTMOD,#00011101B;
T1以方式1计时,非门控方式
;
T0以方式1计数,门控方式
SETBTR0;
T0采用门控方式
SETBIT0;
外部中断0为边沿触发方式
SETBIT1;
外部中断1为边沿触发方式
CLRP3.2
MOVTH1,#0F0H;
4ms产生一次中断
MOVTL1,#060H
MOVTH0,#0FFH;
第一个脉冲发生中断赋初值
MOVTL0,#0FFH
SETBEA;
开CPU中断
SETBEX0;
开外部中断0
SETBEX1;
开外部中断1
SETBET0;
开T0中断
SETBET1;
开T1中断
SETBTR1;
T1计时开始
RET
RDTIME读取时间程序
从DS1302读取时间
RDTIME:
MOVCMD,#85H;
接收小时控制字#85H
ACALLRECEIVE
MOVTIMEH,RCV
MOVCMD,#83H;
接收分钟控制字#83H
MOVTIMEM,RCV
MOVCMD,#81H;
接收秒钟控制字#81H
MOVTIMES,RCV
MOVA,TIMEH;
判断时间,
若在6点之前或22点之后,价格改变
CJNEA,#06H,$+3
JNCSKIP6
MOVPRICE,#09H;
6点之前MOVSPRICE,#06H
SETBLEDNT
AJMPNIGHT
SKIP6:
CJNEA,#22H,$+3
JCDAY
22点之后MOVSPRICE,#06H
DAY:
MOVPRICE,#07H;
白天MOVSPRICE,#05H
NIGHT:
WTTIME写入时间程序
将调整的时间输入DS1302
*******************************
WTTIME:
MOVCMD,#84H;
发送小时控制字#84H
MOVSND,TIMEH
ACALLSEND
MOVCMD,#82H;
发送分钟控制字#82H
MOVSND,TIMEM
MOVCMD,#80H;
发送秒钟控制字#80H
MOVSND,TIMES
从DS1302读出数据的程序
RECEIVE:
CLRDSRST;
复位引脚为低电平,所有数据传送终止
NOP
CLRDSCLK;
清时钟总线
SETBDSRST;
复位引脚为高电平,逻辑控制有效
MOVA,CMD;
准备发送命令字节
MOVBITCNT,#8;
命令字节为8位
RB0:
RRCA;
将最低位传送给进位位C
MOVDSIO,C;
位传送至数据总线
SETBDSCLK;
时钟上升沿,发送数据有效
DJNZBITCNT,RB0;
位传送未完毕则继续
NOP;
准备接收数据
CLRA;
清累加器
CLRC;
清进位位C
接收位数为8位
RB1:
MOVC,DSIO;
数据总线上的数据传送给C
从最低位接收数据
时钟总线置高
时钟下降沿接收数据有效
DJNZBITCNT,RB1;
接收未完成则继续
逻辑操作完毕,清RST
MOVRCV,A;
接收到的完整数据字节
放入接收数据缓冲区
向DS1302写入数据的程序
SEND:
MOVBITCNT,#8
SB0:
RRCA
MOVDSIO,C
SETBDSCLK
CLRDSCLK
DJNZBITCNT,SB0
MOVA,SND;
准备发送数据,过程与上面相同
SB1:
DJNZBITCNT,SB1
CLRDSRST
************************************************************************
以下为中断程序
T0的中断程序
来一个脉冲记一次数
START:
每100个脉冲(50米)计一次
MOVTL0,#09CH
MOVA,PULSE
CJNEA,#22,NEXT;
价格初始化MOVSUMYUAN,SPRICE;
起价
MOVSUMJF,#00H
MOVDISM,#00H;
MOVDISF,#00H
MOVPULSE,#21
AJMPSKIPCT
NEXT:
MOVA,DISF;
每100个脉冲增加50米
ADDA,#5
DAA
MOVDISF,A
MOVA,DISM
ADDCA,#0
MOVDISM,A
DJNZPULSE,SKIPCT;
未到1公里(20*100个脉冲)不计费
MOVA,SUMJF;
计算角和分
ADDA,PRICE;
加7分钱,夜间加9分
DAA;
调整为BCD码
MOVSUMJF,A;
保存
MOVA,SUMYUAN;
计算元
ADDCA,#0;
加进位
调整
MOVSUMYUAN,A;
MOVPULSE,#1
SKIPCT:
RETI
外部中断0中断程序
将金额和路程清零
CLEAR:
MOVSUMYUAN,#0ABH
MOVDISM,#0ABH
外部中断1程序BUTTON
按键程序,判断是哪一个按键按下,并作出相应设置
BUTTON:
MOVA,P2
ANLA,#0E0H;
取P2的最高三位
CJNEA,#0C0H,SETAD;
第5位为0时为设置键
DJNZSETTM,ST;
若按到第4为设置时间成功
CLRLEDSET;
设置灯熄灭
ACALLWTTIME;
AJMPSKIPST
ST:
SETBLEDSET;
按1次为小时设置,2次为分钟设置,
3次为秒钟设置
SETAD:
CJNEA,#0A0H,SETDE;
第6位为0时为增加键
MOVA,SETTM
CJNEA,#3,ADDM;
为3时设置小时
MOVA,TIMEH
INCA
CJNEA,#24H,HLT24
MOVA,#0
HLT24:
MOVTIMEH,A
ADDM:
CJNEA,#2,ADDS;
为2时设置分钟
MOVA,TIMEM
CJNEA,#60H,MLT60
MLT60:
MOVTIMEM,A
ADDS:
CJNEA,#1,SKIPST;
为1时设置秒钟
MOVA,TIMES
CJNEA,#60H,SLT60
SLT60:
MOVTIMES,A
SETDE:
MOVA,SETTM;
第7位为0时为减少键
CJNEA,#3,DECM
MOVA,#99H
ADDA,TIMEH
CJNEA,#99H,HGT0
MOVA,#23H
HGT0:
DECM:
CJNEA,#2,DECS
ADDA,TIMEM
CJNEA,#99H,MGT0
MOVA,#59H
MGT0:
DECS:
CJNEA,#1,SKIPST
ADDA,TIMES
CJNEA,#99H,SGT0
SGT0:
SKIPST:
T1的中断程序
轮流显示LED每一位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 出租车计价系统设计 出租车计费系统设计大学论文 出租车 计价 系统 设计 计费 大学 论文