湖南工业大学单片机课程设计.docx

上传人:b****4 文档编号:24356000 上传时间:2023-05-26 格式:DOCX 页数:27 大小:303.67KB
下载 相关 举报
湖南工业大学单片机课程设计.docx_第1页
第1页 / 共27页
湖南工业大学单片机课程设计.docx_第2页
第2页 / 共27页
湖南工业大学单片机课程设计.docx_第3页
第3页 / 共27页
湖南工业大学单片机课程设计.docx_第4页
第4页 / 共27页
湖南工业大学单片机课程设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

湖南工业大学单片机课程设计.docx

《湖南工业大学单片机课程设计.docx》由会员分享,可在线阅读,更多相关《湖南工业大学单片机课程设计.docx(27页珍藏版)》请在冰豆网上搜索。

湖南工业大学单片机课程设计.docx

湖南工业大学单片机课程设计

湖南工业大学

单片机课程设计课题报告

 

班级:

自动化1102班

学号:

11401700507

姓名:

翟德忠

 

电气与信息工程学院

湖南工业大学

课程设计

资料袋

电气与信息工程学院(系、部)2013-2014学年第2学期

课程名称单片机应用系统指导教师职称

学生姓名翟德忠专业班级自动化1102班学号11401700507

题目出租车计费系统

成绩起止日期2013年11月11日~2013年11月22日

目录清单

序号

材料名称

资料数量

备注

1

课程设计任务书

1

2

课程设计说明书

1

3

课程设计图纸

1

4

5

11

湖南工业大学

课程设计任务书

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年

指导教师(签字):

年月日

系(教研室)主任(签字):

年月日

 

(单片机应用系统)

设计说明书

(题目)

出租车计费系统

起止日期:

2013年11月11日至2013年11月22日

学生姓名

翟德忠

班级

自动化1102班

学号

11401700507

成绩

指导教师(签字)

电气与信息工程学院(部)

2013年11月22日

摘要

单片机是单片微型计算机(CPU)的简称,是集CPU、读写寄存器、定时器、计数器和多种接口于一体的微控制器。

它体积小,功耗小,成本低,功能强,广泛应用于智能产品和工业自动化控制领域。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计的目的就是要通过对它的学习应用,从而达到学习、设计、开发单片机软硬件的能力。

此次设计的出租车计费系统,是基于单片机最小系统设计的,利用外围的一些逻辑电路和数码管,来模拟显示出租车计费系统。

最后由Protues软件仿真。

关键词:

单片机最小系统,出租车计费

单片机最小系统硬件资源介绍

1、单片机系统数码管和键盘接口电路

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

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

单片即可完成LED显示键盘接口的全部功能。

Hd7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式。

此外,还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等。

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

 

特点:

●串行接口,无需外围元件可直接驱动LED

●各位独立控制译码/不译码及消影闪烁等

●循环左移和循环右移指令等

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

●64键键盘控制器,内含去抖电路

●具有DIP和SOIC两种封装形式供选择

 

 

(Hd7279A引脚图)

软件设计

一、设计任务:

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完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机实训板上执行。

2、设计思路:

(1)255计数:

255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。

然后对TL1的内容进行相应的二进制---十进制转换:

首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。

接着将相应的十进制数进行译码,并在LED数码管上显示出来。

每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。

 

图3255计数程序流程图

 

(2)0-5000计数显示

由于50000计数采用八位寄存器显然会一处,因此设计时数器T0采用工作方式1外部计数,16位寄存器技术范围到65536,符合50000计数的需要。

然后通过数据转换,将计数器的值转换成为十进制数,由单片机指令发送给Hd7279A进行方式1译码,通过数码管显示

 

 

 

(3)出租车计数器:

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

3、设计程序及调试:

(1)255计数:

BIT_COUNTDATA07FH

TIMERDATA07EH

TIMER1DATA07DH

YTF_DATADATA07CH

BAIDATA07BH

SHIDATA07AH

GEWEIDATA079H

DATA_INDATA020H

DATA_OUTDATA021H

KEYBITP1.3;7279的KEY连接于P1.3

CLKBITP1.6;7279的CLK连接于P1.6

DATBITP1.7;7279的DATA连接于P1.7

CSBITP2.7;7279的CS连接于P2.7

ORG000H

JMPSTART

ORG100H

START:

MOVSP,#2FH;定义堆栈

MOVP1,#11011011B;I/O口初始化

MOVTIMER,#50

CALLSTART_DELAY;7279上电复位后要延时25ms

MOVDATA_OUT,#10100100B;发复位指令

CALLSEND

SETBCS;复位CS为高电平

MOVTMOD,#05H;定时器T0初始化(计数)

SETBTR0;启动T0

MAIN:

MOVA,TL0

CALLBCD;数据BCD转换

CALLDISP;数码管显示

JMPMAIN

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

;发送子程序

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

SEND:

MOVBIT_COUNT,#8

CLRCS

CALLLONG_DELAY

SEND_LOOP:

MOVC,DATA_OUT.7

MOVDAT,C

SETBCLK

MOVA,DATA_OUT

RLA

MOVDATA_OUT,A

CALLSHORT_DELAY

CLRCLK

CALLSHORT_DELAY

DJNZBIT_COUNT,SEND_LOOP

CLRDAT

RET

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

;接收子程序

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

RECEIVE:

MOVBIT_COUNT,#8

SETBDAT

CALLLONG_DELAY

RECEIVE_LOOP:

SETBCLK

CALLSHORT_DELAY

MOVA,DATA_IN

RLA

MOVDATA_IN,A

MOVC,DAT

MOVDATA_IN.0,C

CLRCLK

CALLSHORT_DELAY

DJNZBIT_COUNT,RECEIVE_LOOP

CLRDAT

RET

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

;BCD码调整子程序

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

BCD:

;BCD码调整子程序

MOVB,#64H

DIVAB

MOVBAI,A;保存百位

MOVA,B

MOVB,#0AH

DIVAB

MOVSHI,A;保存十位

MOVGEWEI,B;保存个位

RET

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

;显示子程序

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

DISP:

CLRCS;显示子程序

MOVDATA_OUT,#10000010B

CALLSEND

MOVDATA_OUT,BAI

CALLSEND

MOVDATA_OUT,#10000001B

CALLSEND

MOVDATA_OUT,SHI

CALLSEND

MOVDATA_OUT,#10000000B

CALLSEND

MOVDATA_OUT,GEWEI

CALLSEND

SETBCS

RET

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

;长延时子程序

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

LONG_DELAY:

MOVTIMER,#80

DELAY_LOOP:

DJNZTIMER,DELAY_LOOP

RET

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

;短延时子程序

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

SHORT_DELAY:

MOVTIMER,#6

SHORT_LP:

DJNZTIMER,SHORT_LP

RET

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

;启动延时子程序

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

START_DELAY:

MOVTIMER1,#255

START_DELAY1:

DJNZTIMER1,START_DELAY1

DJNZTIMER,START_DELAY

RET

END

 

(2)0-50000计数显示:

ORG0000H

SJMPSTART

ORG0030H

START:

MOVDPTR,#0CFE9H//擦出数据

MOVA,#0D1H

MOVX@DPTR,A

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

MOVTL1,#0FFH//赋初始值及工作方式

MOVTH1,#0FFH

MOVTMOD,#50H

SETBTR1

LOOP:

MOVR0,TL1

MOVR1,TH1

LJMPHEXTOBCD//16进制转10进制字程序

CAOZUO:

MOVA,R4//把万千百十个位分别存入R4R3R2R1R0。

MOVB,#16

DIVAB

MOVR1,A

MOVR0,B

MOVA,R2

MOVR4,A

MOVA,R3

MOVB,#16

DIVAB

MOVR3,A

MOVR2,B

IGHTA:

MOVDPTR,#0CFE9H//选择数码管第一个灯并显示出万位

MOVA,#80H

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,R4

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

CLRA

LIGHTB:

MOVDPTR,#0CFE9H//选择数码管第二个灯并显示出千位

MOVA,#81H

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,R3

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

CLRA

LIGHTC:

MOVDPTR,#0CFE9H//选择数码管第三个灯并显示出百位

MOVA,#82H

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,R2

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

CLRA

LIGHTD:

MOVDPTR,#0CFE9H//选择数码管第四个灯并显示出十位

MOVA,#83H

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,R1

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

CLRA

LIGHTE:

MOVDPTR,#0CFE9H//选择数码管第五个灯并显示出个位

MOVA,#84H

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,R0

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

CLRA

LJMPLOOP

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

HEXTOBCD:

CLRA//清零

MOVR2,A

MOVR3,A

MOVR4,A

MOVR5,#16//共转换十六位数

ZH:

CLRC

MOVA,R0//从待转换数的高端移出一位到Cy

RLCA

MOVR0,A

MOVA,R1

RLCA

MOVR1,A

MOVA,R4//送到BCD码的低端

ADDCA,R4//带进位加。

自身相加,相当于左移一位

DAA//十进制调整,变成BCD码

MOVR4,A

MOVA,R3

ADDCA,R3

DAA

MOVR3,A

MOVA,R2

ADDCA,R2

MOVR2,A

DJNZR5,ZH//共转换十六位数

LJMPCAOZUO//已经把TH1TL1中的数字,转换成BCD码,送到了R2R3R4

 

(3)出租车计费系统:

ORG0000H

lJMPSTART

ORG0060H

START:

MOV60H,#00H;给准备使用的寄存地址赋初值

MOV61H,#00H

MOV62H,#00H

MOV70H,#00H

MOV71H,#00H

MOV72H,#00H

MOVTMOD,#60H;选择定时器/计数器使用方式为方式2

MOVTH1,#0FFH;给T1引脚特殊功能寄存器赋初值

MOVTL1,#0FFH

SETBTR1;启动定时器/计数器

L1:

JNBTF1,L2;判定TF1是否为0

CLRTF1;清零TF1

LCALLKM;调用里程

LCALLPRICE;调用价格

L2:

LCALLDISPLAY;调用显示

SJMPL1

KM:

MOVA,60H;分别把不同地址中的数据传送到A累加器中

ADDA,#01H;每一次脉冲使60H中数据加一

MOV60H,A

CJNEA,#0AH,BTOM;对60H中数据进行与10对比

MOV60H,#00H;给60H清零

INC61H;给61H加一

MOVA,61H;再把61H完成60H的同一操作

CJNEA,#0AH,BTOM

MOV61H,#00H

INC62H

MOVA,62H

CJNEA,#0AH,BTOM

MOV62H,#00H

BTOM:

RET

PRICE:

MOVA,62H;分别把不同地址中的数据传送到A累加器中

CJNEA,#00H,SUB111;对62H中数据进行与00对比

MOVA,61H

CJNEA,#04H,SUB1;对61H中数据进行与04对比

SJMPFIVEY;跳转到FIVEY

SUB111:

MOVA,61H

CJNEA,#00H,SUB1;对61H中数据进行与00对比

SJMPSUB11;跳转到SUBB11

SUB1:

JCFIVEY;比较C位是否为0

MOVA,60H

CJNEA,#00H,BTOM2;比较60H是否为00

SJMPSUB11

SUB11:

MOVA,70H;给70H单元加05H的起始价格显示

ADDA,#05H

MOV70H,A

CJNEA,#0AH,SUB2;比较70H单元中数据是否为10SJMPSUB3

SUB2:

JCBTOM2

SUB3:

SUBBA,#0AH;进行70H,71H,72H中数据与里程类似的进位选择

MOV70H,A

INC71H

MOVA,71H

CJNEA,#0AH,BTOM2

MOV71H,#00H

INC72H

MOVA,72H

CJNEA,#0AH,BTOM2

MOV72H,#00H

SJMPBTOM2

FIVEY:

MOV71H,#05H

BTOM2:

RET

DISPLAY:

MOVR0,#72H

MOVR3,#00H

MOVR1,#62H

MOVR5,#80H

MOVR6,#03H

MOVDPTR,#TAB

LOOP1:

MOVDPTR,#0CFE9H;进行里程最高位数据的显示

MOVA,R5

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,@R1

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

INCR5

DECR1

LOOP2:

MOVDPTR,#0CFE9H;进行里程第二位数据的显示

MOVA,R5

MOVX@DPTR,A

MOVDPTR,#TABTWO

MOVA,@R1

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

INCR5

DECR1

LOOP3:

MOVDPTR,#0CFE9H;进行里程第三位数据的显示

MOVA,R5

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,@R1

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

INCR5

MOVDPTR,#0CFE9H;进行价格第一位数据的显示

MOVA,R5

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,@R0

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

INCR5

DECR0

MOVDPTR,#0CFE9H;进行价格第二位数据的显示

MOVA,R5

MOVX@DPTR,A

MOVDPTR,#TABTWO

MOVA,@R0

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

INCR5

DECR0

MOVDPTR,#0CFE9H;进行价格第三位数据的显示

MOVA,R5

MOVX@DPTR,A

MOVDPTR,#TAB

MOVA,@R0

MOVCA,@A+DPTR

MOVDPTR,#0CFE8H

MOVX@DPTR,A

RET

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

TABTWO:

DB0BFH,86H,0DH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH

END

 

4、心得体会:

单片机是一门实践性很强的学科,只学习理论知识,不进行实验是不可能学好单片机这门课程的。

在没有学习单片机这门课程时,就听说过单片机这门课很有用,一直很想好好学习这门课。

从一开始,就不断暗示自己要好好学习这门课。

在学习过程中,渐渐地发现单片机课程更侧重于实验,讲求从实验中掌握知识。

在单片机的学习过程中,特别是实验和课程设计中,学到了许多课本之外的东西。

这次课程设计任务有两个:

一个是255计数的实现;另外一个是出租车计费系统的设计。

在接到这个课程设计任务时,有些茫然和不知所措,曾经几度不知如何动笔。

利用汇编语言,对于一些简单的设计还可以游刃有余,但是这次的课程设计,对于我来说确实难度很大。

曾经一度想放弃,但是后来还是坚持把这个课程设计完成了。

  

经过我和同组同学的共同努力,通过讨论,查阅资料,分工合作,最终完成了流程图和程序。

接着通过查阅资料并分析,画出了两个设计的硬件仿真图。

虽然,按照实验要求把图画了出来,但是有的时候加载程序以后却不能正常运行,改了好多次都没有成功。

同学们电脑上软件的版本

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

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

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