单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx

上传人:b****4 文档编号:16898269 上传时间:2022-11-27 格式:DOCX 页数:27 大小:485.92KB
下载 相关 举报
单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx_第1页
第1页 / 共27页
单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx_第2页
第2页 / 共27页
单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx_第3页
第3页 / 共27页
单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx_第4页
第4页 / 共27页
单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx

《单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。

单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx

这里使用了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,#07H

MOVSPRICE,#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点之后

DAY:

MOVPRICE,#07H;

白天

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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1