ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:485.92KB ,
资源ID:16898269      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16898269.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机与嵌入式系统应用出租车计价器设计Word文件下载.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、这里使用了3个按键,分别为:设置按键、键、键。当未计费时即可使用这三个键设置时间。按一下设置按键为设置小时,两下设置分钟,三下设置秒钟,第四下保存设置。设置过程中设置指示灯点亮。若在设置过程中开始计费,则设置不会被保存,且指示灯熄灭。按键分别接入P2口的高3位,由外部中断1响应。当按下按键后即触发外部中断1。由于按键时间相对于单片机响应时间来说非常长,所以此时可根据P2口的高3位判断是哪个按键按下,再在中断程序中做出相应操作。3.3.4 DS1302芯片接口电路DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信。

2、实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES复位,(2)I/O(数据线),(3)SCLK(串行时钟)。时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。DS1302是由DS1202改进而来,增加了以下的特性:双电源管脚用于主电源和备份电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器。它广泛应用于电话、传真、便携

3、式仪器以及电池供电的仪器仪表等产品领域。下面将主要的性能指标作一综合:实时时钟具有能计算2100 年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力318位暂存数据存储RAM串行I/O 口方式使得管脚数量最少宽范围工作电压:2.05.5V工作电流:2.0V时,小于300nA读/写时钟或RAM数据时,有两种传送方式:单字节传送和多字节传送(字符组方式)8脚DIP封装或可选的8脚SOIC封装(根据表面装配)简单3 线接口与TTL 兼容(Vcc=5V)可选工业级温度范围-40 度+85度与DS1202 兼容在DS1202 基础上增加的特性:对Vcc1有可选的涓流充电能力双电源管用于

4、主电源和备份电源供应备份电源管脚可由电池或大容量电容输入附加的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读取数据的子程序

5、RECEIVE、从DS1302发送数据的子程序SEND。初始化程序INIT主要功能是将各项数据赋初值、开中断。读取时间程序RDTIME则给控制字赋值,然后调用RECEIVE程序,再将返回的值分别保存到小时、分钟、秒钟。最后根据小时对单价作出调整。写入时间程序WTTIME则给控制字赋值,然后调用SEND程序分别将小时、分钟、秒钟保存到DS1302芯片中。4.3中断程序设计中断程序在整个程序中占有最重要到地位。下面分别作介绍。4.3.1 计数器T0的中断程序计数器T0的中断程序START框图如下。在该程序中,接收到第一个脉冲后开始计算里程,将金额设置为起价5元。之后每100个脉冲(50米)对里程做

6、一次加法运算。当脉冲数达到2000个(1公里)后开始对金额递增。4.3.2外部中断0的中断程序当计时开关断开后会触发外部中断0,从而调用中断程序CLEAR。该程序将各项数据复位。4.3.3外部中断1的中断程序当没有计费且按下按键时触发外部中断1。首先判断按下哪个键。若按下设置键则改变设置类型。按一次设置键,则设置小时;按两次则设置分钟;按三次设置秒钟;按四次则调用WTTIME程序将设置好的值写入DS1302芯片中。若按下键,则判断设置类型,根据设置类型分别对小时、分钟、秒钟加一。若按下键,则根据设置类型分别对小时、分钟、秒钟减一。4.3.4定时器T1的中断程序定时器T1的中断程序即为显示程序。

7、该程序每4ms显示一位。若没有处于设置时间状态,则每秒钟读取一次时间;否则不读取时间,只显示当前值,以便于对时间进行设置。显示程序轮流对12位LED进行显示,并在适当地方加上小数点。若没有计费,则不显示金额和里程。流程图见下页。5总结该设计实现了计价器的基本功能。若要进行扩展,可在以下方面进行考虑:语音功能、打印功能、防作弊功能、IC卡的使用以及其它对系统的保护功能等。通过这次设计,我对8051系列单片机的内部结构、存储空间有了更深入细致的了解,对汇编程序的编写及中断的应用更加熟练;通过对DS1302芯片、LED显示器和按键的使用,对接口技术对应用有了初步的认识。希望今后通过努力,使自己对该课

8、程知识及应用能达到熟练掌握直至精通的程度。附录1:电路图附录2:计价效果图(晚上时间21:09:10,公里数为8.4,价格为15.3)附录3:时间设置效果图(当前时间:21:24:20,设置时间:23:37:56)附录4:源代码;*出租车计价器程序05075,伍龙军2006.7.9-7.13*各项常量*PRICE EQU 1FH ;保存单价地址PULSE EQU 1EH ;保存脉冲数的地址TURN EQU 1DH ;显示轮换记录器,为12时显示小时十位,为11时显示小时个位,依次类推RDTM EQU 1CH ;读取时间计数器,0.5秒钟读一次SUMYUAN EQU 1BH ;保存金额元(BCD

9、码)地址SUMJF EQU 1AH ;保存金额角和分(BCD码)地址DISM EQU 19H ;保存路程公里数地址DISF EQU 18H ;保存路程小数地址TIMEH EQU 17H ;保存时间小时地址TIMEM EQU 16H ;保存时间分钟地址TIMES EQU 15H ;保存时间秒钟地址BITCNT EQU 14H ;保存传输位的地址CMD EQU 13H ;保存命令字的地址RCV EQU 12H ;接收数据缓冲区的地址SND EQU 11H ;发送数据缓冲区的地址SETTM EQU 10H ;设置时间SPRICE EQU 09H ;保存起价地址HOUR1 EQU 0FH ;小时十位显

10、示地址HOUR0 EQU 0EH ;小时个位显示地址MIN1 EQU 0DH ;分钟十位显示地址MIN0 EQU 0CH ;分钟个位显示地址SEC1 EQU 0BH ;秒钟十位显示地址SEC0 EQU 0AH ;秒钟个位显示地址TENY EQU 09H ;金额十元显示地址ONEY EQU 08H ;金额元显示地址TENTHY EQU 07H ;金额角显示地址TENM EQU 06H ;路程十公里显示地址ONEM EQU 05H ;路程公里显示地址TENTHM EQU 04H ;路程十分之一公里显示地址DSIO BIT P1.0 ;DS1302的数据传送总线地址DSCLK BIT P1.1 ;D

11、S1302的时钟控制总线地址DSRST BIT P1.2 ;DS1302的复位总线地址LEDNT BIT P1.7 ;夜晚指示灯LEDSET BIT P1.6 ;设置时间指示灯STTM BIT P2.5 ;设置按键口STADD BIT P2.6 ;时间增加按键口STDEC BIT P2.7 ;时间减少按键口*程序开始* ORG 0000H AJMP MAIN ORG 0003H ;外部中断0程序,清零 AJMP CLEAR ORG 000BH ;T0中断程序,计价,计里程 AJMP START ORG 0013H AJMP BUTTON ;外部中断1程序,响应按键 ORG 001BH ;T1中

12、断程序,显示 AJMP DISPMAIN: ACALL INIT AJMP $*子程序*初始化程序设置初值,开中断INIT: MOV SP,#30H ;设置堆栈到用户RAM区 MOV DPTR,#TAB MOV PRICE,#07H MOV SPRICE,#05H CLR LEDNT CLR LEDSET MOV SETTM,#4 MOV TURN,#12 MOV SUMYUAN,#0ABH ;金额为0 MOV SUMJF,#0AAH MOV DISM,#0ABH ;路程为0 MOV DISF,#0AAH MOV PULSE,#22 ACALL RDTIME ;读取时间 MOV RDTM,#2

13、50 ;读取时间计数器初值 MOV TMOD,#00011101B ;T1以方式1计时,非门控方式 ;T0以方式1计数,门控方式 SETB TR0 ;T0采用门控方式 SETB IT0 ;外部中断0为边沿触发方式 SETB IT1 ;外部中断1为边沿触发方式 CLR P3.2 MOV TH1,#0F0H ;4ms产生一次中断 MOV TL1,#060H MOV TH0,#0FFH ;第一个脉冲发生中断赋初值 MOV TL0,#0FFH SETB EA ;开CPU中断 SETB EX0 ;开外部中断0 SETB EX1 ;开外部中断1 SETB ET0 ;开T0中断 SETB ET1 ;开T1中

14、断 SETB TR1 ;T1计时开始 RETRDTIME读取时间程序从DS1302读取时间RDTIME: MOV CMD,#85H ;接收小时控制字#85H ACALL RECEIVE MOV TIMEH,RCV MOV CMD,#83H ;接收分钟控制字#83H MOV TIMEM,RCV MOV CMD,#81H ;接收秒钟控制字#81H MOV TIMES,RCV MOV A,TIMEH ;判断时间,若在6点之前或22点之后,价格改变 CJNE A,#06H,$+3 JNC SKIP6 MOV PRICE,#09H ;6点之前 MOV SPRICE,#06H SETB LEDNT AJM

15、P NIGHTSKIP6: CJNE A,#22H,$+3 JC DAY22点之后DAY: MOV PRICE,#07H ;白天NIGHT:WTTIME写入时间程序将调整的时间输入DS1302*WTTIME: MOV CMD,#84H ;发送小时控制字#84H MOV SND,TIMEH ACALL SEND MOV CMD,#82H ;发送分钟控制字#82H MOV SND,TIMEM MOV CMD,#80H ;发送秒钟控制字#80H MOV SND,TIMES从DS1302读出数据的程序RECEIVE: CLR DSRST ;复位引脚为低电平,所有数据传送终止 NOP CLR DSCLK

16、 ;清时钟总线 SETB DSRST ;复位引脚为高电平,逻辑控制有效 MOV A,CMD ;准备发送命令字节 MOV BITCNT,#8 ;命令字节为8位RB0: RRC A ;将最低位传送给进位位C MOV DSIO,C ;位传送至数据总线 SETB DSCLK ;时钟上升沿,发送数据有效 DJNZ BITCNT,RB0 ;位传送未完毕则继续 NOP ;准备接收数据 CLR A ;清累加器 CLR C ;清进位位C接收位数为8位RB1: MOV C,DSIO ;数据总线上的数据传送给C从最低位接收数据时钟总线置高时钟下降沿接收数据有效 DJNZ BITCNT,RB1 ;接收未完成则继续逻辑

17、操作完毕,清RST MOV RCV,A ;接收到的完整数据字节放入接收数据缓冲区向DS1302写入数据的程序SEND: MOV BITCNT,#8SB0: RRC A MOV DSIO,C SETB DSCLK CLR DSCLK DJNZ BITCNT,SB0 MOV A,SND ;准备发送数据,过程与上面相同SB1: DJNZ BITCNT,SB1 CLR DSRST*以下为中断程序T0的中断程序来一个脉冲记一次数START:每100个脉冲(50米)计一次 MOV TL0,#09CH MOV A,PULSE CJNE A,#22,NEXT ;价格初始化 MOV SUMYUAN,SPRICE

18、 ;起价 MOV SUMJF,#00H MOV DISM,#00H ; MOV DISF,#00H MOV PULSE,#21 AJMP SKIPCTNEXT: MOV A,DISF ;每100个脉冲增加50米 ADD A,#5 DA A MOV DISF,A MOV A,DISM ADDC A,#0 MOV DISM,A DJNZ PULSE,SKIPCT ;未到1公里(20*100个脉冲)不计费 MOV A,SUMJF ;计算角和分 ADD A,PRICE ;加7分钱,夜间加9分 DA A ;调整为BCD码 MOV SUMJF,A ;保存 MOV A,SUMYUAN ;计算元 ADDC A

19、,#0 ;加进位调整 MOV SUMYUAN,A ; MOV PULSE,#1SKIPCT: RETI外部中断0中断程序将金额和路程清零CLEAR: MOV SUMYUAN,#0ABH MOV DISM,#0ABH外部中断1程序BUTTON按键程序,判断是哪一个按键按下,并作出相应设置BUTTON: MOV A,P2 ANL A,#0E0H ;取P2的最高三位 CJNE A,#0C0H,SETAD ;第5位为0时为设置键 DJNZ SETTM,ST ;若按到第4为设置时间成功 CLR LEDSET ;设置灯熄灭 ACALL WTTIME ; AJMP SKIPSTST: SETB LEDSET

20、 ;按1次为小时设置,2次为分钟设置,3次为秒钟设置SETAD: CJNE A,#0A0H,SETDE ;第6位为0时为增加键 MOV A,SETTM CJNE A,#3,ADDM ;为3时设置小时 MOV A,TIMEH INC A CJNE A,#24H,HLT24 MOV A,#0HLT24: MOV TIMEH,AADDM: CJNE A,#2,ADDS ;为2时设置分钟 MOV A,TIMEM CJNE A,#60H,MLT60MLT60: MOV TIMEM,AADDS: CJNE A,#1,SKIPST ;为1时设置秒钟 MOV A,TIMES CJNE A,#60H,SLT60SLT60: MOV TIMES,ASETDE: MOV A,SETTM ;第7位为0时为减少键 CJNE A,#3,DECM MOV A,#99H ADD A,TIMEH CJNE A,#99H,HGT0 MOV A,#23HHGT0:DECM: CJNE A,#2,DECS ADD A,TIMEM CJNE A,#99H,MGT0 MOV A,#59HMGT0:DECS: CJNE A,#1,SKIPST ADD A,TIMES CJNE A,#99H,SGT0SGT0:SKIPST:T1的中断程序轮流显示LED每一位*

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

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