湖工单片机课程设计.docx

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

湖工单片机课程设计.docx

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

湖工单片机课程设计.docx

湖工单片机课程设计

湖南工业大学

课程设计

资料袋

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

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

学生姓名专业班级学号

题目对255计数及出租车计费系统的设计

成绩起止日期2012年12月21日~2013年1月3日

目录清单

序号

材料名称

资料数量

备注

1

课程设计任务书

2

课程设计说明书

3

课程设计图纸

4

5

6

湖南工业大学

课程设计任务书

2011—2012学年第1学期

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

课程名称:

单片机应用系统

设计题目:

对255计数及出租车计费系统的设计

完成期限:

自2012年12月21日至2013年1月3日共2周

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

1.1.1设计一个255计数器:

0-255计数,计满后自动清0,重新计数(在数码管中显示)。

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

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

起止日期

工作内容

2012.12.21

讲述设计内容及基本原理

2012.12.22-2012.12.27

进行系统的设计

2012.12.28-2013.1.3

进行系统的调试

[1]刘苗生、潘宗预.单片机测控系统设计.中国物质出版社,2006年

[2]王爽《汇编语言》清华大学出版社,2009年

[3]郭天祥《新概念51单片机教程》电子工业出版社,2009年

指导教师(签字):

年月日

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

年月日

(单片机应用系统)

设计说明书

(题目)

对外部脉冲计数及出租车计费系统的设计

起止日期:

2012年12月21日至2013年1月3日

 

学生姓名

班级

学号

成绩

指导教师(签字)

 

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

2013年1月3日

一、设计任务:

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计数器:

0-255计数,计满后自动清0,重新计数(在数码管中显示)。

原理:

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

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

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

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

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

2设计一个50000计数器:

0-50000计数,计满后自动清0,重新计数(在数码管中显示)。

原理:

将TH1和TL1中的十六进制数转为BCD码,

;入口:

HT1,TL1中是16位二进制数,其中TH1中是高8位;

;出口:

R2R3R4中是BCD码,其中R2中是万位,R3中是千、百位,R4中是十、个位。

再转为对应的个.十.百.千.万位。

送到缓冲区。

接着调用显示子程序。

3.设计一个出租车计费系统:

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

原理:

计数器每计数100个外部脉冲就产生中断,里程加1百米,大于两千米百位就和5和0比较,如果相等就调用价格计算子程序,价格加0.8元。

然后返回中断,调用里程和价格显示子程序。

 

三、PROTEUS硬件电路图

1.255计数器

2.50000计数器

3.出租车计费系统

四、调试程序

1.255计数器

ORG0000H

AJMPSTART

ORG001BH

AJMPTINT1

ORG0030H

START:

MOVTMOD,#60H;计数工作方式2

MOVTH1,#00H;初值0

MOVTL1,#00H

SETBTR1

SETBET1

SETBEA

LOOP:

LCALLDISP

SJMPLOOP

TINT1:

RETI

DISP:

MOVA,TL1

MOVB,#64H

DIVAB;A为百位

MOVDPTR,#SEGTAB

MOVCA,@A+DPTR

MOVP2,#03H;位选4

MOVP0,A;送百位数据

ACALLDELAY

MOVA,B

MOVB,#0AH

DIVAB;A为十位,B为个位

MOVCA,@A+DPTR

MOVP2,#04H;位选5

MOVP0,A;送十位数据

ACALLDELAY

MOVA,B

MOVCA,@A+DPTR

MOVP2,#05H;位选6

MOVP0,A;送个位数据

ACALLDELAY

RET

DELAY:

MOVR5,#05H;延时1ms

LOOP1:

MOVR6,#0FFH

DJNZR6,$

DJNZR5,LOOP1

RET

SEGTAB:

DB3FH,06H,5BH,4FH,66H;0,1,2,3,4

DB6DH,7DH,07H,7FH,6FH;5,6,7,8,9

END

 

2.50000计数器

ORG0000H

AJMPSTART

ORG0030H

WANWEIEQU20H

QIANWEIEQU21H

BAIWEIEQU22H

SHIWEIEQU23H

GEWEIEQU24H

START:

MOVR0,#20H;显示缓冲数据

MOVR1,#01H;位选缓冲

MOVTMOD,#50H;计数工作方式1

MOVTH1,#00H;初值0

MOVTL1,#00H

SETBTR1

SETBET1

SETBEA

LOOP:

LCALLDISP

SJMPLOOP

DISP:

LCALLREAD

DISP1:

MOVP2,R1

MOVP0,@R0

LCALLDELAY

INCR0

INCR1

CJNER1,#06H,DISP

MOVR1,#01H

MOVR0,#20H

SJMPDISP1

READ:

MOVR5,TH1

MOVR6,TL1

CJNER5,#0C3H,READ1

CJNER6,#51H,READ1

MOVTH1,#00H;初值0

MOVTL1,#00H

;-----------------------------------------------------------

;调用子程序把R5R6中的数字,转换成BCD码,送到R2R3R4

READ1:

LCALLTXBCD

MOVA,R4

MOVB,#16

DIVAB;除以16,目的是分离出高、低四位

MOVDPTR,#SEGTAB

MOVCA,@A+DPTR

MOVSHIWEI,A;存放十位

MOVA,B

MOVCA,@A+DPTR

MOVGEWEI,A;存放个位

MOVA,R2

MOVCA,@A+DPTR

MOVWANWEI,A;存放万位

MOVA,R3

MOVB,#16

DIVAB

MOVCA,@A+DPTR

MOVQIANWEI,A

MOVA,B

MOVCA,@A+DPTR

MOVBAIWEI,A

RET

;-----------------------------------------------------------

;两个字节的二进制数转换成BCD码的程序如下:

;功能:

16位二进制数变换成为BCD码;

;入口:

R5R6中是16位二进制数,其中R5中是高8位;

;出口:

R2R3R4中是BCD码,其中R2中是万位,R3中是千、百位,R4中是十、个位。

TXBCD:

CLRA

MOVR2,A;先清零

MOVR3,A

MOVR4,A

MOVR7,#16;共转换十六位数

READ2:

CLRC

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

RLCA

MOVR6,A

MOVA,R5

RLCA

MOVR5,A

MOVA,R4;送到BCD码的低端

ADDCA,R4;带进位加。

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

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

MOVR4,A

MOVA,R3

ADDCA,R3

DAA

MOVR3,A

MOVA,R2

ADDCA,R2

MOVR2,A

DJNZR7,READ2;共转换十六位数

RET

DELAY:

MOVR5,#05H;延时1ms

LOOP2:

MOVR6,#0FFH

DJNZR6,$

DJNZR5,LOOP2

RET

SEGTAB:

DB3FH,06H,5BH,4FH,66H;0,1,2,3,4

DB6DH,7DH,07H,7FH,6FH;5,6,7,8,9

END

 

3.出租车计费系统

ORG0000H

AJMPSTART

ORG001BH

SJMPT1INT

ORG0030H

SHIQIANEQU20H

QIANMIEQU21H

BAIMIEQU22H

SHIYUANEQU24H

YUANEQU25H

JIAOEQU26H

;-------------------------------------------------------------------------

;程序初始化

START:

CLRP2.3

MOVR3,#02H

MOVSHIQIAN,#00H

MOVQIANMI,#00H

MOVBAIMI,#00H

MOVSHIYUAN,#00H

MOVYUAN,#05H

MOVJIAO,#00H

MOVTMOD,#60H

MOVTH1,#9CH

MOVTL1,#9CH

SETBTR1

SETBET1

SETBEA

;-----------------------------------------------------------------------------

;主程序

MAIN:

LCALLDISPM

LCALLDISPL

SJMPMAIN

;---------------------------------------------------------------------------------

;中断处理程序

T1INT:

LCALLLONG

MOVA,QIANMI

CLRC

SUBBA,#02H

JNCT1;大于两千米转到T1

RETI

T1:

DJNZR3,T2

MOVR3,#01H

MOVA,BAIMI

CJNEA,#05H,NEXT;和5相等,就更新价格,否则判断是否和0相等

LCALLMONEY

RETI

NEXT:

CJNEA,#00H,T2;和0相等,更新价格,否则返回

LCALLMONEY

T2:

RETI

;------------------------------------------------------------------------------

;显示里程

DISPL:

MOVR0,#20H

MOVA,@R0

MOVDPTR,#SEGTAB

MOVCA,@A+DPTR

MOVP2,#09H;位选

MOVP0,A;段选

LCALLDELAY

INCR0

MOVA,@R0

MOVCA,@A+DPTR

ADDA,#80H;显示小数点

MOVP2,#0AH;位选

MOVP0,A;段选

LCALLDELAY

INCR0

MOVA,@R0

MOVCA,@A+DPTR

MOVP2,#0BH;位选

MOVP0,A;段选

LCALLDELAY

RET

;---------------------------------------------------------------------------------

;显示价格

DISPM:

MOVR0,#24H

MOVA,@R0

MOVDPTR,#SEGTAB

MOVCA,@A+DPTR

MOVP2,#0DH

MOVP0,A;显示十元

LCALLDELAY

INCR0

MOVA,@R0

MOVCA,@A+DPTR

ADDA,#80H

MOVP2,#0EH

MOVP0,A;显示元

LCALLDELAY

INCR0

MOVA,@R0

MOVCA,@A+DPTR

MOVP2,#0FH;显示角

MOVP0,A

LCALLDELAY

RET

;------------------------------------------------------------------------

;价格计算子程序

MONEY:

MOVR6,28H;

MOVA,R6

MOVDPTR,#NUM

MOVCA,@A+DPTR

MOVJIAO,A

INCR6

MOV28H,R6

CJNER6,#05H,M1

MOV28H,#00H

M1:

CJNEA,#08H,M2;等于8没有进位

SJMPM4

M2:

MOVA,YUAN

CJNEA,#09H,M3;等于9,进位

INCSHIYUAN

MOVYUAN,#00H

SJMPM4

M3:

INCYUAN

M4:

RET

NUM:

DB08H,06H,04H,02H,00H

;-----------------------------------------------------------------------

;里程计算子程序

LONG:

MOVA,BAIMI

CJNEA,#09H,L1;和9相等就置0,不等就跳到L1

MOVBAIMI,#00H

INCQIANMI

MOVA,QIANMI;千米加1

CJNEA,#0AH,L2;等于10就置0,不等跳到L2

MOVQIANMI,#00H

INCSHIQIAN

L1:

INCBAIMI;百米加1

L2:

RET

;-------------------------------------------------------------------------

;延时子程序

DELAY:

MOVR5,#05H;延时2.5ms

LOOP1:

MOVR6,#0FFH

DJNZR6,$

DJNZR5,LOOP1

RET

SEGTAB:

DB3FH,06H,5BH,4FH,66H;0,1,2,3,4

DB6DH,7DH,07H,7FH,6FH;5,6,7,8,9

END

五、心得体会

作为一名电气工程及自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?

如何把我们所学的专业基础课理论知识运用到实践中去呢?

我想做类似的课程设计就为我们提供了良好的实践平台。

开始的第一天就自己做的是0到255的计数器,我们上课是只上到定时器那一章节,对于后面的数码管显示没有讲到,但是这次却要用到数码管显示数据,所以开始知识知道要用到定时器,在TH、TL里面放个初值,然后启动定时/计数器就可以开始计数了,然后到了255个后又重新开始,但是怎么把所记的脉冲数显示出来却不懂。

专门把书好好看了遍,数码管显示知道是怎么回事后就可以开始了。

完成这次的单片机课程设计花费将近一周时间,但是却从理论到实践,学到了很多的东西。

同时不仅巩固了以前所学过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。

这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。

回顾起此次单片机课程设计,我感慨颇多,最重要的是感触是:

遇到一个问题时,最重要的一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。

只有这样我们才能真正的学会单片机,才能越学越会。

自己的独立处理问题的能力才会得到提高。

还有无论编程中遇到什么问题,都不要怨天尤人。

无论自己的程序有多好,都不能骄傲。

只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。

这次的单片机课程设计遇到的最多的问题就是在程序的编写上,尤其是0到5000计数时,在那里卡了好久,一直就是TL和TH两个寄存器里的数据取不出来,自然就无法送到数码管显示,因为两个寄存器里的数据加一起有十六位,我们所用的单片机是8位机,最大只能赋值256,超过256就会发生错误,为此试过好多种方法,但是都不行,最后用的BCD转换才解决得。

回顾起此次单片机课程设计,我感慨颇多,最重要的是感触是:

遇到一个问题时,最重要的一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。

只有这样我们才能真正的学会单片机,才能越学越会。

自己的独立处理问题的能力才会得到提高。

还有无论编程中遇到什么问题,都不要怨天尤人。

无论自己的程序有多好,都不能骄傲。

只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。

在这短短的几天时间里,把之前学习的单片机只是都复习了一边,比之前有了一个更加清晰地理解,实践出真知这话真的一点不假,动过动手实践掌握的东西远比单纯课堂上听来的要深刻、要清晰。

通过这次的课程设计,我发现了遇到问题首先应该想的是如何自己解决,实在是想不到时候再通过自己去网上找资料,也可以在同学之间探讨,这样得来的远比直接问老师,听老师是如何解答的来得要深刻,要掌握的更扎实,在下次遇到类似问题的时候就可以有个清晰的解决问题的思路,以及此类问题是因何产生的也会有个比较清晰地认识。

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

当前位置:首页 > 高等教育 > 文学

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

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