基于89c51的LED数字秒表设计文档格式.docx

上传人:b****3 文档编号:6185432 上传时间:2023-05-06 格式:DOCX 页数:21 大小:329.67KB
下载 相关 举报
基于89c51的LED数字秒表设计文档格式.docx_第1页
第1页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第2页
第2页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第3页
第3页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第4页
第4页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第5页
第5页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第6页
第6页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第7页
第7页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第8页
第8页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第9页
第9页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第10页
第10页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第11页
第11页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第12页
第12页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第13页
第13页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第14页
第14页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第15页
第15页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第16页
第16页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第17页
第17页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第18页
第18页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第19页
第19页 / 共21页
基于89c51的LED数字秒表设计文档格式.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于89c51的LED数字秒表设计文档格式.docx

《基于89c51的LED数字秒表设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于89c51的LED数字秒表设计文档格式.docx(21页珍藏版)》请在冰点文库上搜索。

基于89c51的LED数字秒表设计文档格式.docx

指导教师

臧海河

主要内容

(参数)

利用89C51设计一个数字秒表,使其实现以下功能:

1.具有计时功能;

2.可通过按键设置,启动计时;

3.可以实现数据清零设置;

4.设置按键能够停止计时;

5.能够实现时间显示。

任务要求

(进度)

第1-2天:

熟悉课程设计任务及要求,查阅技术资料,确定设计方案。

第3-4天:

按照确定的方案设计单元电路。

要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。

第5-6天:

软件设计,编写程序。

第7-8天:

实验室调试。

第9-10天:

撰写课程设计报告。

要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。

主要参考

资料

[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:

国防工业出版社,2004

[2]伟福LAB6000系列单片机仿真实验系统使用说明书

[3]阎石.数字电路技术基础(第五版).北京:

高等教育出版社,2006

[4]黄艳玲,计算机接口技术试验指导书,重庆大学出版社。

审查意见

系(教研室)主任签字:

年月日

目录

1概述3

1.1研究背景3

1.2设计思想及基本功能4

2.总体方案设计4

2.1方案选取4

2.2系统框图5

2.3总体方案设计5

3.硬件电路设计5

3.189c51单片机的引脚及模块说明5

3.2晶体振荡电路6

3.3复位电路7

3.4按键电路7

3.5显示电路8

3.6引脚控制说明8

3.7绘制电路原理图9

4.系统软件设计9

4.1程序流程图9

4.2秒表的初始化10

4.3按键扫描检测程序11

4.4开始计时11

4.5计时程序11

4.6显示程序11

4.7暂停计时11

4.8秒表清零12

4.9延时程序12

5.总结14

参考文献14

附录一系统总原理图15

附录二主程序15

1概述

1.1研究背景

自20世纪末期以来,电子技术的发展日新月异。

电子技术在各个领域的运用也越来越广泛,从而有力地推动了社会生产力的发展以及社会信息化程度的提高。

其中,秒表计时器是工业自动化控制、国防、实验室及科研单位理想的计时仪器,它广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等的时间测试。

在各种现代体育竞技比赛中,秒表成为必不可少的工具之一。

而随着运动员的水平的不断提高,他们之间的差距也在不断缩小。

因此,在某些运动中对时间精度的要求就会越来越高,也就需要高精度的秒表来记录成绩,从而保障比赛的公平性。

在历史上,钟表大致有三个演变阶段。

首先是大时钟演变到小时钟、其次小时钟过渡到袋表、再之袋表发展到腕表。

再这三个阶段,每一次的改变都是和当时的技术水平和创造发明水平是息息相关的。

本文则主要阐述了基于单片机89c51的LED数字秒表设计。

使其能够实现计时功能,按键有启动计时、数据清零、停止、时间显示的功能。

其中在实验过程中我采用了Proteus软件进行仿真。

1.2设计思想及基本功能

本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。

模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。

其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零重新从零计数。

同理当个位满十进一后个位也清零重新计数,当计时超过范围(即超过99.9秒)后,所有数码管则会全部清零重新计数。

采用按键控制秒表的“开始”、“暂停”、“复位”键,按下“开始”按键,则开始计时;

按下“暂停”按键,则暂停计时;

再次按下“开始”键,则继续计时;

数码管显示当前计时值;

按下“复位”键,则系统清零。

2.总体方案设计

2.1方案选取

在这次课程设计中,主程序主要是通过AT89C51和74LS373锁存器来控制的,从而为所用的中断程序的地址以及一些必要的标志提供赋值。

其中在数字秒表的设计中运用了2个中断号和2个中断程序。

AT89C51的TO端口在工作方式1下由下降沿触发,然后产生方波脉冲,从而作为AT89C51的中断信号。

2.2系统框图

图1

2.3总体方案设计

这次实验所选用的实验器材主要包括开关计时以及显示,其中开关计时是与中断T0相连的,它是中断T0的申请中断信号,也就是设计要求中的第一个人的计时,来负责秒表的计时;

而开关显示是与AT89C51上的P2.6口相连,即设计记下时间,当记录完成后,按下显示按钮,就会从最后一个人的顺序倒起来显示他们工作所用的时间(注意:

先来后显示)。

本次设计的核心思想是:

在运行中断程序的时候,首先判断中断信号,然后再根据中断信号来产生脉冲来确定是执行中断服务程序。

3.硬件电路设计

3.189c51单片机的引脚及模块说明

89C51作为89系列单片机中的典型代表,其基本模块主要是由CPU、ROM、RAM、I/O口、中断系统、定时/计数器、串行口、振荡器、总线控制等几个部分组成。

1.CPU:

89C51是8位CPU,而且89C51内部还包含有1个位处理器

2.R0M:

包含4KB的片内程序存储器,用于存放开发以及调试完成的程序

3.RAM:

256B的片内数据存储器,虽然容量小,但作用很大。

4.I/O口:

即P0-P3口,共4个口包含32条双向且可位寻址的I/O口线。

5.中断系统:

总共有5个中断源,其中3个内部中断和2个外部中断。

6.定时/计数器:

即2个16位的可编程定时/计数器。

7.串行口:

全双工通用异步接收器/发送器

8.振荡器:

由外接晶振以及内部时钟振荡器来为CPU提供时钟信号。

9.总线控制:

对外提供若干条控制总线,以便于系统扩展。

另附上引脚图:

如图2

图2

3.2晶体振荡电路

89C51单片机内部的振荡电路是一个增益反相放大器,其中引线XYAL1和XTAL2分别为反相放大器的输入和内部时钟电路输入和来自反相放大器的输出,该反相放大器可以配置为片内振荡器。

然而单片机内部虽然有震荡电路,但要形成时钟,外部还需要附加电路。

其中石晶振荡以及陶瓷振荡均可采用,有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽没有任何要求,但是必须要保证脉冲的高低电平要求的宽度。

本次选用的是89c51单片机12MHZ的内部振荡方式,电路图如下图3所示。

其中C1、C2主要起稳定振荡频率以及快速起振的作用。

图3

3.3复位电路

单片机系统主要采用上电自动复位和手动按键复位两种方式实现系统的复位操作。

其中上电复位要求接通电源后,能够自动实现复位操作。

手动复位则要求在接通电源后,如果在单片机运行期间发生死机,可以用按钮开关操作使单片机复位。

本次设计采用上电复位,再使单片机复位时还能使单片机的外设同时复位,而且当程序出现错误时,可以随时使电路复位。

电路图如下图4所示:

图4

3.4按键电路

当按下按键后,对应的引脚就会被拉低,再经过扫描后,则会获得键值,然后执行键功能程序。

当按下不同的按键时

,单片机就会执行不同的功能程序。

电路图如下图5所示:

图5

3.5显示电路

本次设计采用3个LED数码管。

一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个为小数点发光二极管。

当在某段发光二极管施加一定的正向电压时,该段笔划即亮;

不加电压则暗。

在用数码管显示时,有静态和动态两种选择,这次设计采用了LED动态显示,并用P0、P1、P2口驱动显示。

为了保护各段LED不被损坏,还需外加限流电阻。

但由于P0口没有上拉电阻,因此在P0口还需要外接上拉电阻才能输出高电平,这里我们会使用8个4.7k的电阻作为上拉电阻。

电路图如下图6所示:

图6

3.6引脚控制说明

P0口:

P0.0—7、P1口:

P1.0—7、P2口P2.0—7对应三个数码管的a、b、c、d、e、f、g段和小数点位;

P0用来控制数码管十位的显示,P2用来控制数码管个位的显示,P1则控制小数点后一位的显示,P3.2、P3.3、P3.4分别接按键用来实现控制。

3.7绘制电路原理图

利用Proteus软件画出主电路图如下图7:

图7

4.系统软件设计

4.1程序流程图

本次系统的软件部分主要包括:

主函数、初始化函数、显示函数、定时器0中断服务函数、外部中断0中断服务函数、拆数函数等。

工作流程包括:

秒表的初始化、按键检测程序、开始计时、计时程序、显示程序、暂停计时、秒表清零、延时程序等8个部分。

系统程序流程图如下图8所示:

图8

4.2秒表的初始化

首先根据程序流程图进行秒表的初始化。

第一步:

将I/O口P3全写一,为秒表的控制输入做好准备;

第二步:

将数码管全部置零,使它处于秒表计时的初始状态;

第三步:

将工作寄存器R0至R2以及30H初始化,留待后面的计时程序备用;

第四步:

将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;

第五步:

开总中断允许和定时器0中断允许。

等初始化完成后,就开始进入之后的按键扫描程序。

4.3按键扫描检测程序

轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。

若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;

若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。

4.4开始计时

若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。

此动作完成后,返回按键检测程序,等待操作者的下一次指令。

4.5计时程序

定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。

程序跳转至中断服务程序TIME0。

由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。

因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;

到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。

4.6显示程序

将数码管的段选码放在数表TAB中。

每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。

.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。

之后将30H中的数置零,中断返回。

若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。

在秒位进位子程序SECOND中,由于要用到累加器A,因此先将其推入堆栈保护。

将R1中的值(初值为10)送入A,然后自加1。

.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。

若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。

完成后,弹出ACC和PSW,子程序返回。

十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。

4.7暂停计时

若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。

4.8秒表清零

若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。

并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。

4.9延时程序

主要用于按键延时防抖,并延时10ms。

经仿真调试后,程序正常运行,截图如下图9:

图9

机器码截图如下图10:

图10

5.总结

通过这次的课程设计,使我加深了对89C51的功能以及它们的工作方式的了解,对电脑有了个更新的认识,对中断的工作方式,电脑芯片内部的数据有了较清楚的认识。

这次课程设计是基于芯片上的编程,由于对相应芯片的各个端口的功能不熟悉,一开始并不知从何着手,但随着对各个芯片端口的逐步了解,后面程序的编写也变得容易多了。

这次设计总的感想是:

由于是基于芯片上编程,所以编写程序之前必须对各个芯片有所了解,如芯片的各个端口的功能等。

然后选择要实现此程序功能的芯片以及怎样接线,调试程序、修改错误之处。

根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。

由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。

此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。

然而,在吸取经验的同时,我也吃了不少教训。

在编程、仿真方面都走了不少弯路。

但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。

在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。

参考文献

[1]杨家成.单片机原理与应用及C51程序设计.北京:

清华大学出版社,2007

[2]夏路易石宗义.Protel99se电路原理图与电路板设计教程.北京:

北京希望电子出版社,2004

[3]朱玉玺.计算机控制技术.北京:

电子工业出版社,2010

[4]邓兴成.单片机原理与实践指导.北京:

机械工业出版社,2010

[5]阎石.数字电子技术基础.北京:

高等教育出版社,2009.

附录一系统总原理图

附录二主程序

ORG0000H;

程序开始

AJMPSTART;

跳转至主程序START

ORG000BH;

定时器0中断的地址入口

AJMPTIME0;

定时器0溢出,跳转到中断程序TIME0

START:

;

主程序

MOVP3,#0FFH;

输入端口P3全部写为1

MOVP0,#3FH;

MOVP1,#3FH;

MOVP2,#0BFH;

将数码管初始化

MOV30H,#00H;

MOVR0,#00H;

MOVR1,#0AH;

MOVR2,#00H;

将工作寄存器初始化

MOVTMOD,#01H;

使定时器0工作于方式1

MOVTH0,#0D8H;

MOVTL0,#0FEH;

给定时器0预置数(D8FEH=55550D)

SETBEA;

总中断允许

SETBET0;

定时器0中断允许

READ:

读键程序

L1:

JBP3.2,L2;

LCALLDELAY;

按键延时防抖

JBP3.2,L1;

AJMPRUN;

确认计时键被按下,开始或继续计时

L2:

JBP3.3,L3;

JBP3.3,L2;

AJMPPAUSE;

确认暂停键被按下,暂停计时

L3:

JBP3.4,L1;

JBP3.4,L3;

AJMPSTOP;

确认清零键被按下,秒表重置

RUN:

计时键按下,跳转至此

SETBTR0;

定时器0开始或继续运行

AJMPREAD;

PAUSE:

暂停键按下,跳转至此

CLRTR0;

TIME0:

定时器0溢出,中断,跳转至此

INC30H;

MOVA,30H;

CJNEA,#0AH,TIME1;

30H单元中的值是否到10

MOVDPTR,#TAB;

若30H中的值到10了,顺序执行

MOVA,R0;

INCR0;

CJNER0,#0AH,GET;

R0中的值是否到10

LCALLSECOND;

若已到10,则R0清零,并调用进位子程序SECOND,向秒位进位

GET:

若没到,则跳过进位子程序

MOVCA,@A+DPTR;

MOVP1,A;

查表并向数码管毫秒位送数

重置30H单元

TIME1:

给定时器0重新预置数

RETI;

中断返回

SECOND:

秒位进位子程序

PUSHACC;

PUSHPSW;

将ACC和PSW推入堆栈保护

MOVA,R1;

INCR1;

CJNER1,#14H,GET1;

R1中的值是否到20

LCALLSECOND1;

若到,则R1重置,调用进位子程序SECOND1,向十秒位进位

GET1:

若没到,跳过进位子程序

MOVP2,A;

查表并向数码管秒位送数

POPPSW;

POPACC;

PSW,ACC出栈

RET;

子程序返回

SECOND1:

十秒位进位子程序

MOVA,R2;

INCR2;

CJNER2,#0AH,GET2;

R2中的值是否到10了,即是否该将此位归零

到了,R2清零

GET2:

没到,跳过清零程序

MOVP0,A;

查表并向数码管十秒位送数

PSW,ACC出栈

STOP:

清零键按下,跳转至此处

数码管清零

工作寄存器初始化

计时器0停止计时

定时器0预置数

DELAY:

延时10ms子程序

MOVR3,#50D;

D1:

MOVR4,#100D;

D2:

DJNZR4,D2;

DJNZR3,D1;

TAB:

DB06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;

数码管段选码数表

END;

程序结束

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2