您好,欢迎来到尚佳旅游分享网。
搜索
您的当前位置:首页单片机课程设计-- 出租车计费系统

单片机课程设计-- 出租车计费系统

来源:尚佳旅游分享网


课 程 设 计

资 料 袋

题 目 出租车计费系统 成 绩 起止日期 2013 年 11 月 11 日~ 2013 年 11 月 22 日

目 录 清 单

序号 1 2 3 4 5 11

材 料 名 称 课程设计任务书 课程设计说明书 课程设计图纸 资料数量 1 1 1 备 注 张

1

课程设计任务书

2013—2014学年第一学期

电气与信息工程 学院(系、部) 自动化 专业 1102班 班级

课程名称: 单片机应用系统 设计题目: 出租车计费系统 完成期限:自 2013 年 11 月 11 日至 2013 年 11 月 22 日共 2 周

1.1 外部脉冲自动计数,自动显示。 内 容 及 任 务 1.1.1设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。 1.1.2设计一个50000计数器:0-50000计数,计满后自动清0,重新计数(在数码管中显示)。 1.2 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前四位显示数码管显示里程数,后四位数码管显示价钱(角,元,十元,百元) 进 度 安 排 主 要 参 考 资 料 起止日期 2013.11.11-2013.11.12 2013.11.12-2013.11.19 2013.11.20-2013.11.22 讲述设计内容及基本原理 进行系统的设计 进行系统的调试 工作内容 [1] 刘苗生、潘宗预. 单片机测控系统设计. 中国物质出版社,2006年 [2] 欧伟明、何静、等,单片机原理与应用系统设计,电子工业出版社,2009年 指导教师(签字): 年 月 日 系(教研室)主任(签字): 年 月 日

2

摘 要

单片机是单片微型计算机(CPU)的简称,是集CPU、读写寄存器、定时器、计数器和多种接口于一体的微控制器。它体积小,功耗小,成本低,功能强,广泛应用于智能产品和工业自动化控制领域。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计的目的就是要通过对它的学习应用,从而达到学习、设计、开发单片机软硬件的能力。此次设计的出租车计费系统,是基于单片机最小系统设计的,利用外围的一些逻辑电路和数码管,来模拟显示出租车计费系统。最后由Protues 软件仿真。

关键词:单片机最小系统,出租车计费

单片机最小系统硬件资源介绍 1、单片机系统数码管和键盘接口电路

3

Hd7279A是一片具有串行接口的,可同时驱动 8 位共阴式数码管(或 只LED)的智能显示驱动芯片,该芯片同时还可连接多达 键的键盘矩阵。单片即可完成LED显示键盘接口的全部功能。

Hd7279A内部含有译码器,可直接接受 BCD 码或 16 进制码,并同时具有 2 种译码方式。此外,还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等。

Hd7279A具有片选信号,可方便地实现多于 8 位的显示或多于 键的键盘接口。

特点:

   

串行接口,无需外围元件可直接驱动LED 各位控制译码/不译码及消影闪烁等 循环左移和循环右移指令等

具有段寻址指令,方便控制LED

2.八位数码管与键盘管理芯片Hd7972

4

 键键盘控制器,内含去抖电路  具有DIP和SOIC两种封装形式供选择

(Hd7279A引脚图)

5

软件设计

一、设计任务:

1.1 外部脉冲自动计数,自动显示。

1.1.1设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。

1.1.2设计一个50000计数器:0-50000计数,计满后自动清0,重新计数(在数码管中显示)。

1.2 设计一个出租车计费系统:

起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)

注:要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机实训板上执行。

二、设计思路:

(1)255计数:

255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。然后对TL1的内容进行相应的二进制---十进制转换:首先TL1的内容除以H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码,并在LED数码管上显示出来。每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。

6

开始 初始化堆栈,定时器初始化 清零相关RAM地址单元 说明:1. 20H存放脉冲的个位和十位数值,21H存放脉冲的百位和千位数值。 调用显示子程序 2.计算脉冲数的个位和十位数值:(20H)/10的商即十位数值存放于31H,余数即个位数值存放于30H。 3. 计算脉冲数的百位数值:TF1=1? (20H)/10的余数即百位数值存放于32H。 脉冲数加1 即20H加1 例如:脉冲数212(十进制),(20H)=12,(21H)=2。脉冲的个位数值(30H)=2, 脉冲的十位数值(31H)=1, 脉冲的百位数值(32H)=2. 20H=100? 21H加1 20清零 计算出脉冲数的个,十,百位 分别存放于30H,31H,32H (20H=)&(21H=2?) 脉冲数计到255后重新计数 即20H,21H清零

图3 255计数程序流程图

7

(2)0-5000计数显示

由于50000计数采用八位寄存器显然会一处,因此设计时数器T0采用工作方式1外部计数,16位寄存器技术范围到65536,符合50000计数的需要。然后通过数据转换,将计数器的值转换成为十进制数,由单片机指令发送给Hd7279A进行方式1译码,通过数码管显示

Hd7279A 置延时 开始 初始化,T0初始化,设 脉冲数计到50000后从新计数 (20H=)&(21H=2?) 计算出脉冲数的个,十,百位,千位 万位 计数清0 计数是否大于50000 脉冲数加1 调用显示子程序 TF1=1?

8

(3)出租车计数器:

出租车计数器设计思路跟50000计数器设计思路大致相同,定时器采用工作方式1进行外部计数,每接收到一个计数脉冲信号时,历程累加500M,实现了500M一跳,再通过算数转换将历程值转换成为钱数。

开始 Hd7279A初始化,T0初始化,设置延时 调用显示子程序 TF1=1? 脉冲数加1 里程加500 里程是否大于2公里 累加钱数 调用Hd7279显示函数 里程是否超出显示范围 新计数

9

三、设计程序及调试: (1)255计数:

BIT_COUNT DATA 07FH TIMER DATA 07EH TIMER1 DATA 07DH

YTF_DATA DATA 07CH BAI DATA 07BH SHI DATA 07AH GEWEI DATA 079H

DATA_IN DATA 020H DATA_OUT DATA 021H

KEY BIT P1.3 ;7279的KEY连接于P1.3 CLK BIT P1.6 ;7279的CLK连接于P1.6 DAT BIT P1.7 ;7279的DATA连接于P1.7 CS BIT P2.7 ;7279的CS连接于P2.7

ORG 000H JMP START ORG 100H

START: MOV SP,#2FH ;定义堆栈 MOV P1,#11011011B ;I/O口初始化 MOV TIMER,#50

CALL START_DELAY ;7279上电复位后要延时25ms MOV DATA_OUT,#10100100B ;发复位指令 CALL SEND

SETB CS ;复位CS为高电平 MOV TMOD,#05H ;定时器 T0初始化(计数) SETB TR0 ;启动T0

MAIN: MOV A,TL0

CALL BCD ;数据BCD转换 CALL DISP ;数码管显示 JMP MAIN

;******************************************* ; 发送子程序

;******************************************* SEND: MOV BIT_COUNT,#8 CLR CS

10

CALL LONG_DELAY

SEND_LOOP: MOV C,DATA_OUT.7 MOV DAT,C SETB CLK

MOV A,DATA_OUT RL A

MOV DATA_OUT,A CALL SHORT_DELAY CLR CLK

CALL SHORT_DELAY

DJNZ BIT_COUNT,SEND_LOOP CLR DAT RET

;******************************************* ; 接收子程序

;******************************************* RECEIVE: MOV BIT_COUNT,#8 SETB DAT

CALL LONG_DELAY RECEIVE_LOOP: SETB CLK

CALL SHORT_DELAY MOV A,DATA_IN RL A

MOV DATA_IN,A MOV C,DAT

MOV DATA_IN.0,C CLR CLK

CALL SHORT_DELAY

DJNZ BIT_COUNT,RECEIVE_LOOP CLR DAT RET

;******************************************* ; BCD码调整子程序

;*******************************************

BCD: ;BCD码调整子程序 MOV B,#H DIV AB

MOV BAI,A ;保存百位 MOV A,B MOV B,#0AH DIV AB

MOV SHI,A ;保存十位

11

MOV GEWEI,B ;保存个位 RET

;******************************************* ; 显示子程序

;******************************************* DISP: CLR CS ;显示子程序 MOV DATA_OUT,#10000010B CALL SEND

MOV DATA_OUT,BAI CALL SEND

MOV DATA_OUT,#10000001B CALL SEND

MOV DATA_OUT,SHI CALL SEND

MOV DATA_OUT,#10000000B CALL SEND

MOV DATA_OUT,GEWEI CALL SEND SETB CS RET

;******************************************* ; 长延时子程序

;******************************************* LONG_DELAY: MOV TIMER,#80

DELAY_LOOP: DJNZ TIMER,DELAY_LOOP RET

;******************************************* ; 短延时子程序

;******************************************* SHORT_DELAY:MOV TIMER,#6

SHORT_LP: DJNZ TIMER,SHORT_LP RET

;******************************************* ; 启动延时子程序

;******************************************* START_DELAY: MOV TIMER1,#255

START_DELAY1:DJNZ TIMER1,START_DELAY1 DJNZ TIMER,START_DELAY RET

END

12

(2)0-50000计数显示:

ORG 0000H SJMP START ORG 0030H

START : MOV DPTR,#0CFE9H //擦出数据 MOV A,#0D1H MOVX @DPTR,A NOP NOP NOP NOP NOP NOP NOP NOP

MOV TL1,#0FFH // MOV TH1,#0FFH MOV TMOD,#50H SETB TR1

LOOP:MOV R0, TL1 MOV R1, TH1

LJMP HEXTOBCD //16CAOZUO:MOV A, R4 // MOV B, #16 DIV AB MOV R1, A MOV R0, B

MOV A, R2 MOV R4, A

MOV A, R3 MOV B, #16 DIV AB MOV R3, A MOV R2, B

IGHTA:MOV DPTR,#0CFE9H // MOV A,#80H MOVX @DPTR,A MOV DPTR,#TAB MOV A,R4

MOVC A,@A+DPTR

赋初始值及工作方式 进制转10进制字程序

把万千百十个位分别存入R4 R3 R2 R1 R0。选择数码管第一个灯并显示出万位 13

MOV DPTR,#0CFE8H MOVX @DPTR,A CLR A

LIGHTB:MOV DPTR,#0CFE9H // 选择数码管第二个灯并显示出千位 MOV A,#81H MOVX @DPTR,A MOV DPTR,#TAB MOV A,R3

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A CLR A

LIGHTC:MOV DPTR,#0CFE9H // MOV A,#82H MOVX @DPTR,A MOV DPTR,#TAB MOV A,R2

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A CLR A

LIGHTD:MOV DPTR,#0CFE9H // MOV A,#83H MOVX @DPTR,A MOV DPTR,#TAB MOV A,R1

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A CLR A

LIGHTE:MOV DPTR,#0CFE9H // MOV A,#84H MOVX @DPTR,A MOV DPTR,#TAB MOV A,R0

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A CLR A

14

选择数码管第三个灯并显示出百位 选择数码管第四个灯并显示出十位选择数码管第五个灯并显示出个位 LJMP LOOP

TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH HEXTOBCD:

CLR A //清零 MOV R2, A MOV R3, A MOV R4, A

MOV R5, #16 //共转换十六位数 ZH:

CLR C

MOV A, R0 // RLC A MOV R0, A MOV A, R1 RLC A MOV R1, A

MOV A, R4 // ADDC A, R4 // DA A // MOV R4, A MOV A, R3 ADDC A, R3 DA A

MOV R3, A MOV A, R2 ADDC A, R2 MOV R2, A

DJNZ R5, ZH // LJMP CAOZUO //

从待转换数的高端移出一位到Cy 送到BCD码的低端

带进位加。自身相加,相当于左移一位 十进制调整,变成BCD码 共转换十六位数 已经把TH1 TL1中的数字,转换成BCD码,送到了R2 R3 R4

15

(3)出租车计费系统:

ORG 0000H lJMP START ORG 0060H

START:MOV 60H,#00H ;给准备使用的寄存地址赋初值 MOV 61H,#00H MOV 62H,#00H MOV 70H,#00H MOV 71H,#00H MOV 72H,#00H

MOV TMOD,#60H ; MOV TH1,#0FFH ; MOV TL1,#0FFH

SETB TR1 ; L1:JNB TF1,L2 ; CLR TF1 ; LCALL KM ; LCALL PRICE ; L2:LCALL DISPLAY ; SJMP L1 KM:MOV A,60H ; ADD A,#01H ; MOV 60H,A

CJNE A,#0AH,BTOM ; MOV 60H,#00H ; INC 61H ; MOV A,61H ; CJNE A,#0AH,BTOM MOV 61H,#00H INC 62H MOV A,62H

CJNE A,#0AH,BTOM MOV 62H,#00H BTOM:RET PRICE:MOV A,62H ; CJNE A,#00H,SUB111 ; MOV A,61H

CJNE A,#04H,SUB1 ; SJMP FIVEY ;SUB111:MOV A,61H

CJNE A,#00H,SUB1 ;16

选择定时器/计数器使用方式为方式2 给T1引脚特殊功能寄存器赋初值启动定时器/计数器 判定TF1是否为0 清零TF1 调用里程 调用价格 调用显示 分别把不同地址中的数据传送到A累加器中每一次脉冲使60H中数据加一 对60H中数据进行与10对比 给60H清零 给61H加一

再把61H完成60H的同一操作 分别把不同地址中的数据传送到A累加器中对62H中数据进行与00对比 对61H中数据进行与04对比 跳转到FIVEY 对61H中数据进行与00对比

SJMP SUB11 ;跳转到SUBB11 SUB1:JC FIVEY ;比较C位是否为0 MOV A,60H

CJNE A,#00H,BTOM2 ;比较60H是否为00 SJMP SUB11 SUB11:MOV A,70H ;给70H单元加05H的起始价格显示 ADD A,#05H MOV 70H,A

CJNE A,#0AH,SUB2 ;比较70H单元中数据是否为10 SJMP SUB3

SUB2:JC BTOM2 SUB3:SUBB A,#0AH ; MOV 70H,A INC 71H MOV A,71H

CJNE A,#0AH,BTOM2 MOV 71H,#00H INC 72H MOV A,72H

CJNE A,#0AH,BTOM2 MOV 72H,#00H SJMP BTOM2 FIVEY:MOV 71H,#05H BTOM2:RET

DISPLAY:MOV R0,#72H MOV R3,#00H MOV R1,#62H MOV R5,#80H MOV R6,#03H MOV DPTR,#TAB

LOOP1:MOV DPTR,#0CFE9H ; MOV A,R5

MOVX @DPTR,A MOV DPTR,#TAB MOV A,@R1

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A INC R5 DEC R1

LOOP2:MOV DPTR,#0CFE9H ; MOV A,R5

MOVX @DPTR,A

进行70H,71H,72H中数据与里程类似的进位选择 进行里程最高位数据的显示 进行里程第二位数据的显示 17

MOV DPTR,#TABTWO MOV A,@R1

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A INC R5 DEC R1

LOOP3:MOV DPTR,#0CFE9H ;进行里程第三位数据的显示 MOV A,R5

MOVX @DPTR,A MOV DPTR,#TAB MOV A,@R1

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A INC R5

MOV DPTR,#0CFE9H ; MOV A,R5

MOVX @DPTR,A MOV DPTR,#TAB MOV A,@R0

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A INC R5 DEC R0

MOV DPTR,#0CFE9H ; MOV A,R5

MOVX @DPTR,A MOV DPTR,#TABTWO MOV A,@R0

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A INC R5 DEC R0

MOV DPTR,#0CFE9H ; MOV A,R5

MOVX @DPTR,A MOV DPTR,#TAB MOV A,@R0

MOVC A,@A+DPTR MOV DPTR,#0CFE8H MOVX @DPTR,A

18

进行价格第一位数据的显示 进行价格第二位数据的显示 进行价格第三位数据的显示

RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

TABTWO:DB 0BFH,86H,0DH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH

END

四、心得体会:

单片机是一门实践性很强的学科,只学习理论知识,不进行实验是不可能学好单片机这门课程的。在没有学习单片机这门课程时,就听说过单片机这门课很有用,一直很想好好学习这门课。从一开始,就不断暗示自己要好好学习这门课。在学习过程中,渐渐地发现单片机课程更侧重于实验,讲求从实验中掌握知识。在单片机的学习过程中,特别是实验和课程设计中,学到了许多课本之外的东西。

这次课程设计任务有两个:一个是255计数的实现;另外一个是出租车计费系统的设计。在接到这个课程设计任务时,有些茫然和不知所措,曾经几度不知如何动笔。利用汇编语言,对于一些简单的设计还可以游刃有余,但是这次的课程设计,对于我来说确实难度很大。曾经一度想放弃,但是后来还是坚持把这个课程设计完成了。

经过我和同组同学的共同努力,通过讨论,查阅资料,分工合作,最终完成了流程图和程序。接着通过查阅资料并分析,画出了两个设计的硬件仿真图。虽然,按照实验要求把图画了出来,但是有的时候加载程序以后却不能正常运行,改了好多次都没有成功。同学们电脑上软件的版本差异也影响了交流。有些元件的型号不同,但在选用时图形确很相似,致使选错了元件,影响了结果。 这次的课程设计真的使我感觉比较吃力,程序里面的好多内容不懂,自己非常清楚,凭自己现在的知识储备和能力还不足以完全设计出这个课程设计。但是很多时候只能硬着头皮去设计,但在学习过程中也充满了乐趣,当看懂了程序的一些语句,那我喜悦那种成就感油然而生。

在这次的课程设计中,使我受益匪浅,获益良多。通过这次课程设计,使我

19

对单片机这门课程有了更深的理解,尤其是程序设计,感触良多。通过课程设计也进一步促进了理论知识的学习,同时,也让我明白了单片机开发的流程。更重要的是,在做课程设计中,培养了我发现问题和解决问题的能力,以及团结合作精神。

通过本次课程中,充分地认识到自己的不足之处:主要有:

1、对单片机这门课,基础不扎实。之前并没有接触过这门课程,汇编语言和C语言相关知识也没有学习过,所以导致在写程序时经常是束手无策。 2、对keil和proteus等仿真软件不熟练。有时候需要需要求助别人,有时候是一个一个去尝试。

3、不够细心。在课程设计过程中,特别是写程序和硬件仿真时,经常出错。有时候把程序加载到硬件,但是就是不能实现所设计的功能。

通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。

最后感谢老师对我们的悉心的指导和无私的帮助,感谢同学们对我的帮助。

20

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- shangjiatang.cn 版权所有 湘ICP备2022005869号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务