单片机秒表的课程设计.docx

上传人:b****8 文档编号:12995391 上传时间:2023-06-10 格式:DOCX 页数:19 大小:131.09KB
下载 相关 举报
单片机秒表的课程设计.docx_第1页
第1页 / 共19页
单片机秒表的课程设计.docx_第2页
第2页 / 共19页
单片机秒表的课程设计.docx_第3页
第3页 / 共19页
单片机秒表的课程设计.docx_第4页
第4页 / 共19页
单片机秒表的课程设计.docx_第5页
第5页 / 共19页
单片机秒表的课程设计.docx_第6页
第6页 / 共19页
单片机秒表的课程设计.docx_第7页
第7页 / 共19页
单片机秒表的课程设计.docx_第8页
第8页 / 共19页
单片机秒表的课程设计.docx_第9页
第9页 / 共19页
单片机秒表的课程设计.docx_第10页
第10页 / 共19页
单片机秒表的课程设计.docx_第11页
第11页 / 共19页
单片机秒表的课程设计.docx_第12页
第12页 / 共19页
单片机秒表的课程设计.docx_第13页
第13页 / 共19页
单片机秒表的课程设计.docx_第14页
第14页 / 共19页
单片机秒表的课程设计.docx_第15页
第15页 / 共19页
单片机秒表的课程设计.docx_第16页
第16页 / 共19页
单片机秒表的课程设计.docx_第17页
第17页 / 共19页
单片机秒表的课程设计.docx_第18页
第18页 / 共19页
单片机秒表的课程设计.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机秒表的课程设计.docx

《单片机秒表的课程设计.docx》由会员分享,可在线阅读,更多相关《单片机秒表的课程设计.docx(19页珍藏版)》请在冰点文库上搜索。

单片机秒表的课程设计.docx

单片机秒表的课程设计

 

引言

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

2004年8月28日15点15分,中国选手孟关良/杨文军在雅典奥运会男子500米划艇决赛中,以1分40秒278的成绩获得中国在雅典奥运会的第28金。

这是中国皮划艇项目的第一枚奥运金牌,也是中国水上项目在历届奥运会上所获得的第一枚金牌。

孟关良/杨文军的成绩比获得银牌的古巴选手只快了0.072秒,以至于两人在夺冠之后还不敢相信。

在现在的体育竞技比赛中,随着运动员的水平不断提高,差距也在不断缩小。

有些运动对时间精度的要求也越来越高,有时比赛冠亚军之间的差距只有几毫秒,因此就需要高精度的秒表来记录成绩。

1系统简介

本设计的设计思路是使用单片机,设计秒表,能显示分分秒秒;有计时、暂停、调时间等功能。

利用AT80C51单片机的定时器/计数器定时和记数的原理,使其能精确计时。

利用中断系统使其能实现开始暂停的功能。

P0口输出段码数据,P2.0-P2.4口作列扫描输出,可以实现开始、暂停、清零和修改时间的功能。

显示电路由八位共阴极数码管组成。

初始状态下计时器显示0.00.000,当按下开始键时,外部中断INT1向CPU发出中断请求,CPU转去执行外部中断1服务程序,即开启定时器T0。

此秒表精确到毫秒,满1000毫秒向秒位进1,满60秒向分钟位进1。

依次类推,直到9.59.99秒重新复位。

在计时过程中,只要按下模式键,则数码管显示暂停,若按下加1键,则加1毫秒再按下加1键就再加一,以次类推。

若再按下模式键,再按下加1键,则加1秒再按则再加1秒,以次类推。

若再按下模式键,再按下加1键,则分钟位加1分再按则再加一分,以次类推。

再按模式键,在按加1键则又毫秒位加一。

依次循环。

直至满9.59.999秒。

因此可以实现修改已暂停的时间功能。

在按下复位键时,此数码管归零并重新开始计时,若只按模式键即可实现暂停功能,即显示当此计时的成绩。

连按三下模式键则继续开始计时,根据以上设计思路从而实现数字电子秒表的计时。

本文主要内容包括三部分:

第一部分介绍硬件部分设计思路及方案;第二部分介绍了软件部分的设计思路和设计;最后一部分则是整个系统的安装与调试过程。

2硬件设计

2.1总体方案的设计

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

本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。

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

其硬件电路主要有主控制器,计时与暂停、启动和修改时间的功能等。

主控制器采用单片机AT80C51,显示电路采用共阴极LED数码管显示计时时间。

本设计利用AT80C51单片机的定时器/计数器定时和记数的原理,使其能精确计时。

利用中断系统使其能实现开始暂停的功能。

模式键可以实现开始、暂停的功能,复位键可实现清零功能和复位键和加一键可实现修改时间功能。

电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。

根据要求知道秒表设计主要实现的功能是计时和显示。

本设计秒表的最小单位为毫秒,能非常准确记录一个跑步人的所用时间。

当一处中断后向CPU发出加一请求,每发出一次中断请求就对毫秒计数单元进行加一,达到1000次就对秒位进行加一,依次类推,直到9.59.999秒重新复位。

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

其硬件电路主要有主控制器,显示电路和回零、暂停、开始、修改时间等功能。

主控制器采用单片机AT80C51,显示电路采用八位共阴极LED数码管显示计时时间,三个按键均采用触点式按键。

2.2单片机的选择

本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了Intel公司的AT80C51。

单片机的外部结构

MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:

(1)CPU:

89C51的CPU是8位的,另外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)振荡器:

89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号

(9)总线控制:

89C51对外提供若干控制总线,便于系统扩展

89C51的引脚图如下:

89C51单片机引脚图

2.2.2晶体振荡电路

89C51芯片内部有一个高增益反相放大器,用于构成振荡器。

引线XTAL1和XTAL2分别为反向放大器的输入和输出,两端跨接石英晶体及两个电容就可构成稳定的自激振荡器。

这里,我们选用51单片机12MHZ的内部振荡方式,电容器C1,C2起稳定振荡频率,并对振荡频率有微调作用,C1和C2可在20-100PF之间取值,这里取33P。

89C51具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,2个数据指针,两个16位定时器/计数器,一个全双工串行口,片内晶振及时钟电路。

另外,8051可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

CPU是单片机的核心部件。

它由运算器和控制器等部件组成。

(1)运算器

运算器的功能是进行算术运算和逻辑运算。

可以对半字节(4位)、单字节等数据进行操作。

例如能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算和与、或、异或、求补、循环等逻辑操作,操作结果的状态信息送至状态寄存器。

8051运算器还包含有一个布尔处理器,用来处理位操作。

(2)程序计数器PC

程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。

执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。

(3)令寄存器

指令寄存器中存放指令代码。

CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。

2.3显示电路的选择与设计

对于数字显示电路,通常采用液晶显示或数码管显示。

本设计的显示电路采用8段数码管作为显示介质。

由于数码管是有P0口来驱动,它内部没有上拉电阻,作为输出口时驱动能力比较弱,不能点亮数码显示管,因此P0口必须接上拉电阻来提高驱动能力。

另外一位共阴数码管的驱动电流一般为20mA左右,如果电流太大容易造成数码管损坏,所以也需要根据电源的电压值来确定上拉电阻的大小。

如果电阻过小,势必会形成灌电流过大,造成单片机IO的损坏,如果电阻过大,那么对拉电流没有太大的影响。

电源供电电压为5V,当上拉电阻选用220Ω电阻时灌电流为22mA。

不会损坏单片机的I/O口,同时也可以为数码显示管起到限制电流的保护作用。

P3口引脚

特殊功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

INT0(外部中断0请求输入端)

P3.3

INT1(外部中断1请求输入端)

P3.4

T0(定时器/计数器0计数脉冲输入端)

P3.5

T1(定时器/计数器1计数脉冲输入端)

P3.6

WR(片外数据存储器写选通信号输出端)

P3.7

RD(片内数据存储器读选通信号输出端)

P3口引脚第二功能表

2.4复位电路的选择与设计

当8051单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就完成了复位操作。

如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。

因此要求单片机复位后能脱离复位状态。

而本系统选用的是12MHz的晶振,因此一个机器周期为1μs,那么复位脉冲宽度最小应为2μs。

在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。

根据应用的要求,复位操作通常有两种基本形式:

上电复位、手动复位。

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

80C51单片机的上电复位POR(PowerOnReset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。

在单片机每次初始加电时,首先投入工作的功能部件是复位电路。

复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状态之前,还要至少推迟2个机器周期的延时。

上述一系列的延时,都是利用在单片机RST引脚上外接一个RC支路的充电时间而形成的。

典型复位电路如图1.8(a)所示,其中的阻容值是原始手册中提供的。

上电复位延时电路

标准80C51不仅复位源比较单一,而且还没有设计内部上电复位的延时功能,因此必须借助于外接阻容支路来增加延时环节,如图1.8(a)所示。

其实,外接电阻R还是可以省略的,理由是一些CMOS单片机芯片内部存在一个现成的下拉电阻Rrst。

例如,80C51系列的Rrst阻值约为50~200kΩ;P89V51Rx2系列的Rrst阻值约为40~225kΩ,如图1.9所示。

因此,在图1.8(a)基础上,上电复位延时电路还可以精简为图1.8(b)所示的简化电路(其中电容C的容量也相应减小了)。

复位引脚RST内部电路

在每次单片机断电之后,须使延时电容C上的电荷立刻放掉,以便为随后可能在很短的时间内再次加电作好准备。

否则,在断电后C还没有充分放电的情况下,如果很快又加电,那么RC支路就失去了它应有的延迟功能。

因此,在图1.8(a)的基础上添加一个放电二极管D,上电复位延时电路就变成了如图1.8(c)所示的改进电路。

也就是说,只有RC支路的充电过程对电路是有用的,放电过程不仅无用,而且会带来潜在的危害。

于是附加一个放电二极管D来大力缩短放电持续时间,以便消除隐患。

二极管D只有在单片机断电的瞬间(即VCC趋近于0V,可以看作VCC对地短路)正向导通,平时一直处于反偏截止状态。

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

单片机要完成复位,必须向复位端输出并持续两个机器周期以上的高电平,从而实现复位操作。

本设计采用上电且开关复位电路,如图1.10所示上电后,由于电容充电,使RST持续一段高电平时间。

当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。

通常选择C=10~30μF,R=1K,本设计采用的电容值为22μF的电容和电阻为1K的电阻。

单片机复位电路

2.5系统总电路的设计

系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。

系统总电路图附录B所示。

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

8051单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。

复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。

按键电路与单片机的端口连接可以由用户自己设定,本设计中软件复位键和查看键分别接单片机的P1.1和P2.5,均设为低电平有效。

而另外的开始键和暂停键两键使用了外部中断,所以需要连接到单片机的特殊接口P3.3和P3.2,这两个I/O口的第二功能分别为单片机的外部中断1端口和外部中断0端口。

同样设置为位低电平有效。

显示电路由五位数码管组成,采用动态显示方式,因此有8位段控制端和5位位控制端,八位段控制接P0口,P0.0~P0.7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,8051的P0口没有集成上拉电阻,高电平的驱动能力很弱,所以需要接上拉电阻来提高P0的高电平驱动能力。

五位位控制则由低位到高位分别接到P2.0~P2.4口,NPN三极管9013做为位控制端的开关,当P2.0~P2.4端口任意一个端口为高电平时,与其相对应的三极管就导通,对应的数码管导通显示。

通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。

3系统软件设计

本设计采用了汇编语言编写,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。

汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。

使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

汇编语言的特点:

(1).面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。

(2).保持了机器语言的优点,具有直接和简捷的特点。

(3).可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。

(4).目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。

(5).经常与高级语言配合使用,应用十分广泛。

在程序设计过程中,为了有效地完成任务,把所要完成的任务精心的分割成若干个相互独立但相互又仍可有联系的任务模块,这些任务模块使得任务变得相对单纯,对外的数据交换相对简单,容易编写,容易检测,容易阅读和维护。

这种程序设计思想称为模块化程序设计思想。

模块化结构程序的设计,可以使系统软件便于调试与优化,也使其他人更好地理解和阅读系统的程序设计。

程序的主要模块有:

主程序、显示程序、定时溢出中断服务程序、外部中断服务程序。

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

该软件的主要特点总结后有以下四点:

①实现了单片机仿真和SPICE电路仿真相结合的功能。

②支持目前主流单片机系统的仿真。

③提供了软件调试功能,并可以与WAVE联合仿真调试。

④具有强大的原理图绘制功能。

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

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

ProteusISIS的工作界面是一种标准的Windows界面。

它包括标题栏、主菜单、状态栏、标准工具栏、绘图工具栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口等十几个工具,方便了使用者的使用。

首先打开已经画好的proteusDSN文件,双击图中的AT89S52芯片,就弹出一个窗口,在ProgramFile项中通过路径选择在WAVE中生成的HEX文件,双击选中后确定,这样仿真图中的AT89S52芯片就已经读取了本设计中的HEX文件。

单击“三角形按钮”进行仿真。

通过对仿真结果的观察来对程序进行修改,最终使程序到达设计要求。

程序仿真图

总结

本设计的数字电子秒表是由8051单片机、共阴数码显示管、控制按键、三极管等器件构成的,设有六位计时显示,开始、暂停、复位按键以及一个系统整机复位按钮。

计时精度能到达10ms,设计精简,使用简单易懂。

系统设计合理,线路简单、功能先进,性能稳定,程序精简。

并给出了详细的电路设计方法。

本系统是以单片机为核心,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

所以采用汇编语言来进行软件设计,利用汇编语言面向机器并能较好的发挥机器的特性,得到较高的程序,同时汇编语言目标代码简短,占用内存少,执行速度快,能提高秒表的精度。

通过本次设计,复习巩固我们以前所学习的数字、模拟电子技术、单片机原理及应用等课程知识,加深对各门课程及相互关系的理解,并成功使用了Wave、Protel99se和Proteus三款电子软件,使理论知识系统化、实用化,系统地掌握微机应用系统的一般设计方法,培养较强的编程能力、开发能力。

同时,在设计的过程中,我也发现了本系统的许多不足和可以改进的地方。

但因时间紧迫等原因没能改进。

本设计的数字电子秒表缺少对多次计时时间进行记录的功能。

应给在单片机的内部存储区多设置一些存储空间,用来存储多次计时时间。

并在程序中编入对多次计时时间的调用显示。

虽然存在不足,但本设计的数字电子秒表仍具有它的实用性。

参考文献 

[1]王东峰等.单片机C语言应用100例[M].电子工业出版社,2009.

 [2]陈海宴.51单片机原理及应用[M].北京航空航天大学出版社,2010.

 [3]占跃华.C语言程序设计[M].北京邮电大学出版社,2010. 

[4]李平等.单片机入门与开发[M].机械工业出版社,2008. 

附录A程序

#include

#defineuintunsignedint

#defineucharunsignedchar

Ucharcodesegcode[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0,1,2,3,4,5,6,7,8,9,-

ucharcodedispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管位选码

ucharbuffer[]={0,0,0,0,0,0,0,0};

uintmin,sec,ms,kk;

sbitkey1=P1^0;

sbitkey2=P1^3;

uintstatus;//函数声明

voiddelayMS(uintt);

voidkeyprocess(unsignedcharkey);

voiddisplay();

voidtimer0();

main()//主函数

{

bitkeyrelease;

ucharbuf;

ucharkeyinput;

keyrelease=1;

buf=0xff;

TMOD=0x01;//T0工作在方式1,16位计数器

TH0=(65536-1000)/256;//定时器0设置延时1ms中断初始值

TL0=(65536-1000)%256;

TR0=1;

IE=0x82;//开定时器0中断

status=0;

while

(1)

{//键扫描程序

keyinput=P1&0xf0;

if(keyinput!

=0xf0)

{

delayMS

(1);

if(keyinput!

=0xf0)

{

if(keyrelease==1)

{

keyrelease=0;

buf=keyinput;//buf用来暂时存放键值

}

}

else

{

keyrelease=1;

keyprocess(buf);//调用按键处理函数

buf=0xff;

}

}

else

{

keyrelease=1;

keyprocess(buf);

buf=0xff;

}

display();

}

}

//延时函数

voiddelayMS(uintt)//晶振频率12M

{

uinti;

while(t--)

for(i=0;i<125;i++);

}

voidkeyprocess(unsignedcharkey)

{

if(key1==0)

{

delayMS

(1);

while(key1==0)

;

kk++;

}

switch(kk)

{

case1:

EA=0;ET0=0;TR0=0;

if(key2==0)

{

delayMS

(1);

while(key2==0)

;

ms++;

if(ms>999)

ms=0;

}

break;

case2:

if(key2==0)

{

delayMS

(1);

while(key2==0);

sec++;

if(sec>59)

sec=0;

}

break;

case3:

if(key2==0)

{

delayMS

(1);

while(key2==0)

;

min++;

if(min>9)

min=0;

}

break;

case4:

kk=0;EA=1;ET0=1;TR0=1;

break;

}

}

//数码管显示函数

voiddisplay()

{

uchari;

//正常计时显示

{

buffer[0]=min;//显示分的十位

buffer[1]=10;//显示分的个位

buffer[2]=sec/10;//显示‘-’

buffer[3]=sec%10;//显示秒的十位

buffer[4]=10;//显示秒的个位

buffer[5]=ms/100;//显示‘-’

buffer[6]=(ms-100*buffer[5])/10;//显示毫秒的十位

buffer[7]=ms-100*buffer[5]-10*buffer[6];//显示毫秒的个位

for(i=0;i<8;i++)

{

P0=segcode[buffer[i]];

P2=dispbit[i];

delayMS

(1);//防止数码管显示的时候闪动

P2=0x0;

}

}

}

//定时器0中断函数

voidtimer0()interrupt1using2

{

staticuintcount;

TH0=(65536-1000)/256;//定时器0设置初始值1ms中断初始值

TL0=(65536-1000)%256;

TR0=1;

count++;//正常计时

if(count>=1)//定时0.01S到,以下为时钟的正常走钟逻辑

{

count=0;

ms++;

if(ms>=1000)

{

ms=0;sec++;

if(sec>=60)

{

sec=0;min++;

if(min>=10)

{

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

当前位置:首页 > 医药卫生 > 基础医学

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

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