单片机计数器设计报告.docx

上传人:b****5 文档编号:28484794 上传时间:2023-07-14 格式:DOCX 页数:15 大小:192.05KB
下载 相关 举报
单片机计数器设计报告.docx_第1页
第1页 / 共15页
单片机计数器设计报告.docx_第2页
第2页 / 共15页
单片机计数器设计报告.docx_第3页
第3页 / 共15页
单片机计数器设计报告.docx_第4页
第4页 / 共15页
单片机计数器设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机计数器设计报告.docx

《单片机计数器设计报告.docx》由会员分享,可在线阅读,更多相关《单片机计数器设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

单片机计数器设计报告.docx

单片机计数器设计报告

单片机系统课程设计报告

 

学院(部):

电气与信息工程学院

专业:

电气工程及其自动化

学生姓名:

指导老师:

班级:

学号

 

2013年12月

单片机系统课程设计报告

一:

系统设计要求:

1.最大计数值为:

99时59分59秒9/10秒,约100小时。

2.系统采用2个按键控制输入,其中一个按键用作系统清0,另一个按键用作秒表的启动/停止。

3.系统采用7个LED数码管实现计时显示。

4.电路原理图:

使用protel或visio或proteus绘制。

5.编程思路,用visio画程序设计流程图,且用文字描述

二:

系统设计:

1:

总体方案的设计

数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。

本设计中用单片机和数码管组成数字秒表,力求结构简单。

设计中包括硬件电路的设计和系统程序的设计。

硬件电路主要有主控制器、控制按钮与显示电路组成。

主控制器采用单片机AT89C51,显示电路采用七位共阳极数码管显示计时时间。

2.硬件设计

2.1.:

输出设计:

设计要求在数码管上进行数据显示,,输出硬件设计可以采用1个BCD七段译码器74LS47驱动数码管的段选端,输出字形信息,采用3—8译码器输出作为动态扫描时数码管的位选痛信号。

这样在一定程度上节约了单片机的硬件资源,也简化了软件设计时的任务量。

在硬件设计时还应当注意一下问题:

(1)数码管接口方法与动态扫描原理;

(2)时、分、秒计数单元地址的分配及BCD码的调整方法;

(3)按键识别与消除抖动的方法。

2.2:

显示设计:

数码管显示可以分为静态显示和动态显示两种。

由于本设计需要采用数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂,所以采用动态显示。

秒表设计原理图如图1.0所示。

单片机采用通用的AT89C51芯片,显示器为7个共阳极LED数码管,用1个BCD七段译码器74LS47驱动数码管(74LS47的输入为BCD码,其输出级为集电极开路输出,可直接驱动七段数码管,具有首尾消零等特点),用3—8译码器74LS138的输出作为动态扫描时数码管的选通信号。

因为采用了上述两个芯片,所以在对数码管进行扫描显示时,只需要单片机的7条I/O线就能完成显示功能。

电路图中采用P1.0~P1.3作为显示数据值的输出,连接在BCD七段译码器74LSs4的13~10管脚上(译码器74LS47的BCD码输入端);P1.4~P1.6作为扫描值的输出端连接在3—874LS138译码器的输入端(74LS138的A,B,C)。

因此,写程序应将P1口的高四位为扫描值,低四位为显示数据值(分离BCD码)。

单片机的P0.0~P0.1分别接在两个开关上,以控制启动/停止和清零。

秒表系统功能如下:

(1)开机时,秒表显示从00:

00:

00:

0开始计时。

(2)按键S1控制秒表的启动/停止。

(3)按键S2控制秒表的清零。

硬件电路按总体框图进行设计:

74LS47

AT89C51

单片机

控制开关

七位数码管

74LS138

图1:

硬件电路总体框图

三:

系统总体电路的设计

AT89C51单片机为主电路的核心部分,各个电路均与单片机相连,由单片机统筹协调各个电路的运行工作。

开始键和暂停键使用了检测的方法,所以需要连到单片机的P0.0和P0.1引脚上,对这两个I/O口进行循环扫描,检测是否按下。

显示电路由七位数码管组成,采用动态显示方式,因此有8位段控制和7位位控制,并且通过74LS47译码器进行控制8位段控制,接P1口,P1.0~P1.3分别控制数码管的abcdefg显示,位控制有3—8段译码器74LS138进行位控制接在P1.4~P1.6的I/O口上,对数码管实现位控制。

系统总体电路如下图所示:

图2:

总体电路图

四:

软件设计

4.1主程序设计

本系统程序主要模块由主程序、定时中断服务程序、显示子程序和扫描子程序组成。

其中主程序是整个程序的主体。

可以对各个中断程序进行调用。

协调各个子程序之间的关系。

主程序:

首先进行初始化。

设置秒表的计时初值为00:

00:

00:

0,设置T0高低位初值,且允许T0中断。

然后检测S1~S2是否按下,当S1按下时,启动T0进行4ms定时,开始进行计时。

系统主程序流程图:

N

主程序

置显示初值:

00.00.00.0

置T0为4ms定时

开T0中断

Y

启动,停止,清零

S1~S2按下

图3:

主程序流程图

4.2:

定时器T0中断服务子程序:

中断服务子程序的作用是进行“时”、“分”、“秒”的计时与显示。

定时器T0用于定时,定时周期设为4ms,中断累计25次(即0.1秒),对0.1秒计数单元进行加1操作。

时间计数值分别存放在2DH(0.1秒)、2CH(秒)、2BH(分)、2AH(时)内存单元中。

在计数单元中采用组合BCD码计数,0.1秒是满10进位,时、分、秒满60进位。

0.1S计时采用内部中断方式计时,通过内部中断设置4ms的定时溢出中断,单片机的频率为12MHz,则机器周期为1us,要实现4ms的定时,在4ms内需要计数N次:

①:

N=4ms÷1us=4000次

令定时器/计数器0工作方式1下,此时计数初值X为:

②:

X=最大计数值M-计数次数N

=65536-4000=61536=0F060H

即向TH0写入计数初值0F0H,向TL0写入计数计数初值60H。

TMOD初始化:

TMOD=00000001B=01H。

GATE=0,C/T=0,M1=0,M0=1.

TCON初始化:

TR0=1,启动T0。

IE初始化:

开放中断EA=1,允许定时器T0中断ET0=1。

定时器T0中断服务程序流程图如图所示:

图4:

TO中断服务流程图

显示子程序DISP:

DISP子程序的作用是分别将时间计数单元2DH(0.1秒)、2CH(秒)、2BH(分)、2AH(时)中的十进制时间值(组合BCD码)转化为个位和十位(分离BCD码)并分别存放在显示缓冲中。

显示缓冲区的地址为20H~26H。

其中20H中存放0.1秒数据,21H~22H中存放秒数据,23H~24H中存放分钟数据,25H~26H中存放小时数据。

由于每一个地址单元内均为分离BCD码,用BCD七段译码器74LS47直接进行译码,因此不需要软件方式对BCD码数据进行译码。

扫描子程序SCAN:

SCAN的作用是把显示缓冲区中的数据依次送往显示器显示。

把扫描值作为高4位,显示数值作为低4位,输出到P1口,以完成显示。

因为采用3—8译码器74LS138作为扫描输出,故用28H单元存放扫描指针,即28H单元中存放的是数码管的序号。

显示时,只需取出20H~26H某一地址中的数据,并从P1口的低4位输出,同时P1口的高四位作为扫描值输出,这样就能保证数码管正常工作。

4.3系统调试

ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件,它可以仿真、分析各种模拟器件和集成电路。

该软件的主要特点为:

实现了单片机仿真和SPICE电路仿真相结合的功能,支持目前主流单片机系统的仿真,提供了软件调试的功能,具有强大的原理图绘制功能。

总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

在电子领域中起到了很大的作用,它的出现仿真不需要先焊接电路板,可以先仿真调试通过之后再焊接电路,节省了不少在硬件调试上花费的时间。

打开已经画好的ProteusDSN文件,双击图中的AT89C51芯片,就弹出一个窗口,在programfile项中通过路径选择在keil中生成hex文件,双击选中后确定,这样仿真图中的AT89C51芯片就已经读取了本设计中的hex文件。

然后进行仿真,仿真图如下所示:

图5:

proteus仿真图

五:

源程序

ORG0000H

JMPSTART

ORG000BH

JMPTIM0

START:

MOVSP,#70H

MOV28H,#00

MOV2AH,#00H

MOV2BH,#00

MOV2CH,#00

MOV2DH,#00

MOVP1,#0F0H

MOVR5,#1

MOVTMOD,#01H

MOVTH0,#0F0H

MOVTL0,#60H

MOVIE,#82H

MOVR4,#25

LOOP:

JBP0.0,N2

CALLDELAY

SETBTR0

MOVA,R5

CPLA

MOVR5,A

N1:

JNBP0.0,$

CALLDELAY

N2:

JBP0.1,LOOP

CALLDELAY

CJNER5,#0,LOOP

CLRTR0

JMPSTART

N3:

JNBP0.1,$

CALLDELAY

JMPLOOP

TIM0:

MOVTH0,#0F0H

MOVTL0,#60H

PUSHACC

PUSHPSW

DJNZR4,X2

MOVR4,#25

CALLCLOCK

CALLDISP

X2:

CALLSCAN

POPPSW

POPACC

RETI

SCAN:

MOVR0,#28H

CJNE@R0,#7,X3

MOV@R0,#00

X3:

MOVA,@R0

ADDA,#20H

MOVR1,A

MOVA,@R0

SWAPA

ORLA,@R1

MOVP1,A

INC@R0

RET

CLOCK:

CJNER5,#1,X4

MOVA,2DH

ADDA,#1

DAA

MOV2DH,A

CJNEA,#10H,X4

MOV2DH,#00

MOVA,2CH

ADDA,#1

DAA

MOV2CH,A

CJNEA,#60H,X4

MOV2CH,#00

MOVA,2BH

ADDA,#1

DAA

MOV2BH,A

CJNEA,#60H,X4

MOV2BH,#00

MOVA,2AH

ADDA,#1

MOV2AH,A

CJNEA,#99H,X4

MOV2AH,#00

X4:

RET

DISP:

MOVR1,#20H

MOVA,2DH

MOV@R1,2DH

INCR1

MOVA,2CH

MOV@R1,A

MOVB,#10

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

INCR1

INCR1

MOVA,2BH

MOVB,#10H

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

INCR1

MOVA,2AH

MOVB,#10H

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

RET

DELAY:

MOVR6,#60H

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

END

六:

总结

经过两个星期紧张而充实的单片机实训,老师所要求的程序最终在自己的努力下调试出来了,并且通过了老师的验收,这次实训让我有了很大的收获。

从刚开始接到课题:

一个计数到99小时59分59秒0.9秒的计时秒表如何实现。

所需的数码管有七位,直接利用单片机的I/O口显然很难实现,通过老师的指导,通过利用扫描方式来控制八段数码管,这样既能节省很多硬件资源,又可以在排线布局方面节省很多时间,使整体电路简洁明了。

因此:

如何实现扫描控制成为了本次课题的重点突破目标。

在前期的准备过程之中,通过认真翻阅课本,分析单片机的内部工作原理和每条语句的功能。

对单片机内部的组成结构和单片机指令运用上应当注意的问题,认真查找参考书,翻阅资料。

有些指令虽然能够使用,但比较复杂,如何更的使用指令,并且更加合理的利用指令方面有所欠缺。

因此,我从图书馆借来许多单片机设计方面的书籍来看,认真分析程序,从程序中结合自己所学过的知识认真分析,如何把指令更好的运用到自己到自己的设计之中去。

在秒表设计的另一设计中:

中断计时功能也十分重要。

如何正确使用指令完成所需要的功能,都需要对程序进行很好的分析。

通过认真调试才能更好的运用。

平时书上所学的零碎的只是进行整理,各种语句的功能和使用方法,只有通过多学多调试,进行仿真才能真正掌握。

在设计过程中出现的问题也是挺多的:

首先由于对程序的编写设计量不足,容易出现不知如何入手的情况,通过对程序多分析,然后自己从一些简单的程序开始编译调试,逐渐熟悉,由简单到复杂,每个程序都是有很多语句组合在一起来实现其功能的,这样在编写时可以减少很多的麻烦。

其次:

有时候,在理论上编程没有什么错误,但是在调试和仿真的时候出现错误,通过查阅资料得知,单片机内部执行程序的有些区域是有限制的,超出区域会出现运行错误。

在仿真时与在理论上也有很多的差别,因为要考虑硬件部分的因素。

通过查找问题出现在哪一部分,并且近一步分析一些相同指令的功能,进行替换之后进行仿真是是否符合仿真电路,解决问题。

在使用proteus绘制电路图示,如何布局才能使整体更合理,如何更好地使用各个单片机的I/O口都需要知晓其原理。

另外,在proteus中如何快速查找各种元件,节约时间绘制电路图时间,都是需要多查阅资料的。

第三:

在编写软件过程中,如何运用编程思想去解决问题,也十分关键。

刚开始编程是,对于如何实现一个键控制秒表的启动和停止,我想了许久,最后想到利用计数奇、偶的不同来控制。

后来在其他资料上看到利用奇偶校验和取反等许多中方法,能够实现相同的功能,但是程序要简洁很多。

让我在学习中不对积累,不断丰富自己的知识。

通过自己的努力,最终实现了软件仿真调试的成功。

虽然在答辩的时候我的表现不够好,说明我的知识还很多欠缺。

但是,通过自己编写程序并进行调试,让我的单片机知识有了很大的提升。

看到只有两位同学采用汇编编写的程序,而我是其中之一,让我为我的努力和收获而高兴。

在很多时候,调试出问题时,自己也想放弃,但是坚持下来才可能成功,我这样告诫自己。

通过本次设计,不仅让我的自主的学习能力有了很大的提升,锻炼了我查阅资料解决问题的能力,而且对自己的毅力也是一次考验。

让我在自己的学习道路上有了更多的积累,为以后的工作打下良好的基础,付出决定收获!

 

参考资料:

[1]欧伟明.单片机原理与应用.—北京:

电子工业出版社,2009.7

[2]杜树春.基于Proteus和KeilC51的单片机设计与仿真.—北京:

电子工业出版社,2012.2

[3]李忠国,陈刚.单片机应用技能实训.—北京:

人民邮电出版社,2006.11

[4]冯育长.单片机系统设计与实例分析.—西安:

西安电子科技大学出版社,2007.5

[5]任万强.单片机原理与应用.—北京:

中国电力出版社,2007.1

[6]倪志莲.单片机应用技术.—北京:

北京理工大学出版社,2007.6

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

当前位置:首页 > IT计算机 > 互联网

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

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