基于单片机的秒表系统设计.docx
《基于单片机的秒表系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的秒表系统设计.docx(25页珍藏版)》请在冰豆网上搜索。
![基于单片机的秒表系统设计.docx](https://file1.bdocx.com/fileroot1/2023-7/22/49988988-47fd-4b3c-a0ac-c0c5bf3c1113/49988988-47fd-4b3c-a0ac-c0c5bf3c11131.gif)
基于单片机的秒表系统设计
题目名称:
基于单片机的秒表系统设计
课程名称:
MCS-51单片机原理及其应用
目录
目录............................................................
摘要............................................................
Abstract........................................................
第一章课题内容要求及目的.....................................
1.1课题内容.....................................................
1.2课题目的.....................................................
1.3课题要求.....................................................
第二章硬件电路设计..............................................
2.1STC89C52单片机简介..........................................
2.2单片机最小系统的设计........................................
2.3直流稳压电源的设计..........................................
2.4硬件主电路图设计...............................................
2.5数码管显示电路.................................................
2.6声电路.......................................................
第三章软件设计...................................................
3.1程序设计.....................................................
3.2源程序.......................................................
第四章系统调试.....................................................
第五章简单演示秒表功能.......................................
第六章心得体会....................................................
参考文献............................................................
摘要
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,本文阐述了基于单片机的电子秒表系统的设计,本设计的主要特点是设计精度达到0.1s,解决了传统的由于计算精度不够而引起的误差和不公平性,是各种体育竞赛的必备设备之一。
本设计是基于STC89C52单片机设计的,我们是分为几个模块来设计的。
首先对秒表的硬件进行了设计,它包括单片机最小系统的设计、时钟电路设计、复位电路设计、直流稳压电源的设计、外部显示电路的设计等。
利用89C51单片机定时器/计数器定时和计数的原理结合显示电路、LED数码管以及外部中断电路来设计计时器。
计时精度为0.1s。
其次是软件设计,软件系统采用汇编语言编写程序,包括显示程序、定时中断服务、外部中断服务程序、延时程序等。
最后通过仿真调试,在proteus环境下建立了仿真模型,仿真结果表明设计是正确的。
关键字:
单片;秒表;定时器
Abstract
Inrecentyears,withtherapiddevelopmentofscienceandtechnology,theapplicationofSCMiscontinuouslytothedeepening,thispaperexpoundstheelectronicstopwatchsystembasedonsinglechipdesign,thedesignofthemaincharacteristicisadesignaccuracy0.1s,solvethetraditionalduetolackofprecisionandtheerrorcausedbyinequality,itisallsortsofsportscompetitionforoneoftheequipment.
ThedesignisbasedonSTC89C52microcontroller,wearedividedintoseveralmodulestodesign.Firstofthehardwaretoastopwatchdesign,itincludessinglechipminimizethedesignofthesystem,theclockcircuitdesign,resetcircuitdesign,dcvoltagestabilizerdesign,externaldisplaycircuitdesign,etc.Useof89C51microcontrollertimer/countertimingandcountwiththeprinciplethatcircuit,LEDdigitaltube,andexternalinterruption,circuittodesignthetimer.Timeprecisionof0.1s.Nextisthesoftwaredesign,softwaresystemUSESassemblylanguageprogram,includingshowprogram,timeinterruptservice,externalinterruptserviceroutine,delayprocedures,etc.Finally,thesimulationresultsdebugging,proteusenvironmentinestablishedsimulationmodel,andthesimulationresultsshowthatthedesigniscorrect.
Keyword:
singlechipmicrocomputer;astopwatch;timer
第一章课题内容要求及目的
1.1课题内容
设计由直流稳压电路、红外接收电路、单片机最小系统、声光模块、数码管显示电路构成秒表计时系统。
红外接收电路用来接收遥控器输出的红外控制信息,让使用者可以方便的控制程序的运行状态。
单片机是整个系统的核心,用以分配所以的任务。
数码管用于显示实时的计数值,直流稳压电路为整个系统提供稳定的电源。
以常用的51单片机STC89C52为控制核心,结合外围的显示电路、红外接收电路、稳压电路、声光电路以实现秒表系统的设计,该系统充分利用51单片机内部的定时器以及外部中断资源,合理的设计了人机交互程序接口,方便使用者的操作。
整个系统集成了精确计时、数值保存、数值回放等功能。
同时锻炼学生的动手能力及对单片机这一课程知识的深入了解与巩固。
1.2课题目的
通过该课程设计,主要达到以下目的:
①使学生增进对单片机系统的感性认识,加深对单片机理论方面的理解,为顺利完成毕业设计打基础。
②使学生掌握对单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口和串行口通讯等。
③进一步深化和巩固所学基础理论、专业知识及实验技能,提高学生的技术应用能力,使学生了解和掌握单片机应用系统的软、硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
④进一步深化和巩固所学基础理论、专业知识及实验技能,提高学生的技术应用能力,使学生了解和掌握单片机应用系统的软、硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
⑤这一环节对掌握单片机技术在生产实践中的应用,对后续专业课程的学习及对培养造就应用型、创造型的工程技术人才将起到较大的促进作用。
⑥培养学生综合运用所学专业知识分析问题和解决问题的能力。
使学生在树立正确的人生观、养成严谨、踏实的工作作风等思想素质方面受到教育和培养。
①巩固和加深对单片机原理和接口技术知识的理解;
②培养学生根据课题需要选学参考书籍、查阅手册和文献资料的能力;
③学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;
④掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法。
⑤了解与课题有关的硬件元器件的工程规范,能按课程设计任务书的要求编写课程设计说明书,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
第二章硬件电路设计
2.1AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图2.1
1、主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2、管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3、振荡器特性
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4、芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
2.2单片机最小系统的设计
本设计中是以计时为主要目的,附加红外控制程序,这些功能的实现完全可以选用一个简单的8位的单片机来承担。
目前深受广大大学生喜欢的8位单片机有AT89S51、AT89C52、STM8、STC89C52等,相对价格与熟悉程度来讲,STC89C52单片机是一个性价比较高的8位单片机,其资料与学习资源相对比较多,计数较成熟,所以我们在做的时候选用选用STC89C52单片机作为本设计的主控芯片。
STC89C52单片机要正常运行起来必须具备以下几点:
一、稳定的+5V电源供电系统
二、有合适的外部起振源,复位电路,串口通信电路
为了使系统在较长的时间内能够保证比较好的稳定性,最小系统采用PCB板代替导线焊接。
其最小系统原理图如下:
图表2STC89C52引脚图
图2.2
图2.3RC复位以及手动复位电路
该单片机有一个复位引脚,当有2个周期的高电平信号加载在该引脚上时,系统将会复位到初始状态。
RC复位电路的作用是在系统上电的时候,通过RC电路的充放电,给单片机一个复位信号,开始运行预定的程序。
另外通过结合手动复位电路,可以在程序跑飞或者系统死机的情况下让系统快速的恢复到正常的工作状态。
图2.4串口通信电路
一条信息的各位数据被逐为按顺序串口通信电路的主要作用是使单片机与PC机能够进行数据交换,通过该电路可以将在计算机上编写好的程序烧录到下位机中。
另外,在程序的调试过程中,单片机也可以通过该电路将数据发送到上位机的调试软件中,检查数据的正确性。
图2.5时钟输入
2.3直流稳压电源的设计
稳压电路的功能是使输出的直流电压稳定,不随交流电网电压和负载的变化而变化。
常用的集成稳压器有固定式三端稳压器与可调式三端稳压器。
常用可调式正压集成稳压器有CW317(LM317)系列,它们的输出电压从1.25V-37伏可调,最简的电路外接元件只需一个固定电阻和一只电位器。
其芯片内有过渡、过热和安全工作区保护,最大输出电流为1.5A。
所有器件采用单一电源,这样供电比较简单。
但是也有较大的缺点:
当系统中存在大功率器件,可能会使控制系统中的电流波动较大,造成电压不稳、有毛刺等干扰,严重时可能造成单片机系统掉电。
考虑到本系统中并不存在大功率器件,所用采用单一电源供电,由三端稳压芯片LM2940将电池电压转换成+5V电源。
图2.6+5V直流稳压稳压
2.4硬件主电路图设计
秒表系统用的是AT89C51芯片,能够实现计时功能,SW1是启动按键,接单片机P1.0端口;SW2是暂停按键,接单片机P1.1端口。
P1.0和P1.1都是低电平有效。
SW3是清零按键,当按下SW1后,秒表开始计数,此时再按下SW2,可以停止计数,再按下SW1又可以在原来的基础上继续计数,当按下SW3,则秒表将恢复初始化。
P0.0到P0.7接数码管,数码管共阴极,P2.0到P2.3接各自数码管的公共端。
用pretues画出其硬件主电路图如下:
图2.7
2.5数码管显示电路
在自动化系统逐步普及的前提下,人机交互模块显得越来越重要,特别是对于实时控制电路的精确显示要求越来越高,而且要显示明显,一目了然。
本系统中,利用6位共阴极数码管,动态地显示当前计数时间。
动态显示就是让各位显示元件分时工作,利用动态显示法可以降低系统功耗,减少成本。
但是单片机需要不断的刷新数据,这样才能保证数码管的准确显示。
若刷新的速度太高,显示元件的开关速度却不够高,以致在前一个字符尚未完全熄灭的情况下,后续的字符段就点亮。
刷新的速度太慢时,将发生闪烁。
因此刷新频率不要低于100HZ,肉眼观察到的数码的显示情况将是连续的。
对数码管的控制,分为位的控制和段的控制,位控制决定数码管是否被点亮,段控制则决定了数码管显示的内容,由于单片机输出信号的功率有限,不能驱动数码管,所以选用8550PNP三极管,控制数码管的位选。
图2.8
2.6声电路
声模块主要由三极管和蜂鸣器组成,这个模块的主要功能是给予使用者一个醒目的反馈。
当使用者完成任务的设置或者某个任务被完成时,微处理器会通过声模块鸣叫给予使用者一个反馈。
考虑到单片机的驱动电流过小,难以驱动蜂鸣器,所以我们采用PNP的三极管作为控制开关,当单片机给出高电平时,三极管则导通,为蜂鸣器提供了一个闭合回路,使得蜂鸣器能够正常工作。
图2.9
第三章软件设计
3.1程序设计
程序在上电之后,需要等待使用者对其参数进行设置,设置好参数之后,便可以开始工作,在工作过程中,可以保存需要的数据。
3.2部分源程序
显示以及译码程序如下:
#include"reg52.h"
#include"Dis.h"
#defineuintunsignedint
#defineucharunsignedchar
uintCounter1;
uintCounter2;
bitflag;
voidinit_ET0()//初始化函数
{
flag=0;//每一秒钟是否发声的标志位
Counter1=0;//定器计数值
Counter2=0;//定时器计数值
TMOD=0X01;//设置定时器0工作方式1
EA=1;//开总中断
ET0=1;//开定时器0中断
TH0=-(10000/256);//给TH0赋初始值,每10ms中断一次
TL0=-(10000%256);//给TL0赋初始值
}
voidmain(void)
{//主函数体
init_ET0();//调用初始化函数
while
(1)
{
Key_Ser();
display(0,Counter2);//动态显示时间
}
}
voidtimer0()interrupt1
{
Counter1++;//每10ms中断一次Counter1计数
TH0=(65536-10000)/256//重新赋初值,高位
TL0=(65536-10000)%256;
if(Counter1==10)//Counter为10时(即每计0.1S)Counter2计数一次
{
Counter2++;//100ms的个数自加1
Counter1=0;//Counter1重新初始化
}
if(((Counter2%10)==0)&&(Counter1==0))
//恰好每次到1S时根据标志位决定是否声音提示
{
if(flag==1)
{
Hander();//调用声音提示
}
}
}
#include"reg52.h"
#include"dis.h"
#defineuintunsignedint
#defineucharunsignedchar
uintSeg_num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//数码管不带小数点译码
uintSeg_numm[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
//数码管带小数点译码
ucharSeg_con[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//数码管位选控制
sbitbeep=P3^0;//定义蜂鸣器口
voiddelay_led()
{
uinti=800;
while(i--);/i大于0时等待
}
voiddelay()
{
uchari;
for(i=0;i<30;i++)//for循环等待
{};
}
voidHander()
{
uchari;
for(i=0;i<15;i++)
{
beep=0;//低电平导通
delay();//延时一段时间
beep=1;//关闭蜂鸣器
delay()