基于单片机的电子秒表设计.docx
《基于单片机的电子秒表设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子秒表设计.docx(29页珍藏版)》请在冰点文库上搜索。
![基于单片机的电子秒表设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/19/cd0169ba-0016-478d-bfc2-c7661690fa73/cd0169ba-0016-478d-bfc2-c7661690fa731.gif)
基于单片机的电子秒表设计
摘要
电子秒表在生活中的应用,它可广泛应用于对运动物体的速度、加速度的测量实验,还可用来验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场合.测定短时间间隔的仪表。
有机械秒表和电子秒表两类。
机械秒表与机械手表相仿,但具有制动装置,可精确至百分之一秒;电子秒表用微型电池作能源,电子元件测量显示,可精确至千分之一秒。
广泛应用于科学研究、体育运动及国防等方面在当今非常注重工作效率的社会环境中,定时器能给我们的工作、生活以及娱乐带来很大的方便,充分利用定时器,能有效的加强我们的工作效率。
数字电子秒表是利用数字电子技术把模拟信号转换成数字信号来完成的,具有直观、准确性高的特点。
本设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现LED显示,显示时间为0~59秒,计时精度为0.1秒,能正确地进行计时。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。
[关键词]AT89C51单片机;电子秒表;C语言
第一章绪论
1.1秒表及其发展现状
时间是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。
测量时间的基本方法是使用秒表直接测量。
其中秒表的精度是人们最关心的,这就要求它的计时最小单位足够小,显示模块的灵敏度足够高。
目前人们所能测量的最小计时单位是毫秒级。
1.2设计目的及意义
本设计要使时间的测量准确,就必须使系统有更小的计时单位和更灵敏的按键。
本设计还加入了报警电路,每次清零都会报警。
设计采用的元件功能较强,省去了很多复杂的电路降低了设计成本。
1.3设计内容
本课题是基于单片机的数字秒表系统设计,其利用单片机作为系统的主要控制器,通过单片机自身的定时计数器溢出标志产生最小计时单元,经过变量的累加和判断后,通过LED数码管显示。
本人的主要是运用AT89C51单片机作为主控制单元及数据处理单元。
1.4课题设计要求
课题需要以MCS-51系列单片机为核心,结合外围电路,制作一款时间参数测量系统。
具体要求如下:
(1)提出基于单片机的时间测量系统实现方案。
(2)制作完整的硬件电路图并编写完整的源程序,实现时间参数的测量。
(3)误差要求小于1%。
第二章硬件设计
2.1总体方案的设计
数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。
本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。
本设计利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及实验箱上的按键来设计计时器。
将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。
方框图如下图:
图2.1数字秒表设计导向图
本设计用AT89C51设计一个3位LED数码显示“秒表”,显示时间为00.0~59.9秒。
增加一个“复位00.0”按键(即清零)key1,一个“暂停/开始”按键key2,一个“复位60.0”按键(用来60秒倒计时)key3,一个“倒计时”按键key4。
方框图如下图:
按下4键
图2.2按键示意图
本设计中,数码管显示的数据存放在内存单元79H-7BH中。
其中79H存放分秒位数据,7AH存放秒位数据,7BH存放十秒位数据,79H和7AH单元内均为十进制BCD码,7BH单元内为六进制BCD码。
由于采用软件动态扫描实现数据显示功能,显示用十/六进制BCD码数据的对应段码存放在ROM表中。
显示时,先取出79H-7BH某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。
计时采用定时器T0中断完成,定时溢出中断周期为100ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对0.1秒计数单元进行加一,达到10次就对秒位进行加一,依次类推,直到59.9秒重新复位。
设计中包括硬件电路的设计和系统程序的设计。
其硬件电路主要有主控制器,显示电路和启动、暂停、复位、倒计时电路等。
主控制器采用单片机AT89C51,显示电路采用共阴极LED数码管显示计时时间,四个按键均采用触点式按键。
2.2单片机的选择
本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了ATMEL公司的AT89C51。
2.2.1AT89C51单片机性能介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.主要特性:
•与MCS-51兼容
•4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
•全静态工作:
0Hz-24Hz
•三级程序存储器锁定
•128*8位内部RAM
•32可编程I/O线
•两个16位定时器/计数器
•5个中断源
•可编程•低功耗的闲置和掉电模式串行通道
•片内振荡器和时钟电路
2.管脚说明:
3.VCC:
供电电压。
4.GND:
接地。
5.P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
6.P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
7.P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
8.P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
9.P3口也可作为AT89C51的一些特殊功能口,如下表所示:
10.口管脚备选功能
•3.0RXD(串行输入口)
•3.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:
来自反向振荡器的输出。
2.2.2单片机最小系统
所谓最小系统就是指由单片机和一些基本的外围电路所组成的一个可以工作的单片机系统。
一个典型的单片机最小系统一般由时钟电路、复位电路、片外RAM、片外ROM、按键、数码管、LED显示器、外部扩展接口等部分组成。
以下为AT89C51的最小系统电路图,包括晶振电路和复位电路:
图2.3单片机最小系统
1.晶振电路
AT89C51片内有一个由高增益反相放大器构成的振荡电路。
XTAL1和XTAL2分别为振荡电路的输入输出端。
其振荡电路有两种组成方式:
片内振荡器和片外振荡器。
本设计采用是片内振荡器。
片内振荡器如图1.4(a)所示。
在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。
图2.4晶振电路
2.复位电路
为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。
单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。
复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H,SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。
复位操作有两种情况,即上电复位和手动(开关)复位。
电路如图2.5所示:
图2.5复位电路
2.3显示电路的选择与设计
对于数字显示电路,通常采用液晶显示或数码管显示。
对于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性差,不适合远距离观看;对于具有驱动电路和单片机接口的液晶显示模块(字符或点阵),一般多采用并行接口,对单片机的接口要求较高,占用资源多;另外,AT89C51单片机本身无专门的液晶驱动接口。
而数码管作为一种主动显示器件,具有亮度高、响应速度快、防潮防湿性能好、温度特性极性、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜间或是远距离操作。
因此,本设计的显示电路采用7段数码管作为显示介质。
图2.6LED数码管
数码管显示可以分为静态显示和动态显示两种。
由于本设计需要采用三位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂。
所以采用动态显示。
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。
通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。
动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
数码显示管分为共阳数码管和共阴数码管两种。
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,如图1.7(b)。
通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起,如图1.7(c),通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端,当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
图2.7(a)数码管引脚图(b)共阳极内部结构图(c)共阴极内部结构图
本设计采用共阴极数码显示管做显示电路,由于采用的是共阴的数码显示管,所以只要数码管的a、b、c、d、e、f、g、h引脚为高电平,那么其对应的二极管就会发光,使数码显示管显示0~9的编码见表1.1。
表2.1共阴极数码显示管字型代码
字型
共阴极代码
字型
共阴极代码
0
3FH
5
6DH
1
06H
6
7DH
2
5BH
7
07H
3
4FH
8
7FH
4
66H
9
6FH
动态显示电路由显示块、字形码驱动模块、字位驱动模块三部分组成。
本系统的3位LED动态显示器接口电路。
图中,3个数码管的8段段选线分别与外接上拉电阻的单片机P0口对应相连,而3个数码管的位控制端则和NPN型三极管的集电极相连接。
单片机的P2.0~P2.4口则分别对应数码显示管的最低位到最高位,P2.0~P2.4口分别和五个NPN型三极管的基极相连,做三极管导通的控制端,而NPN型三极管选用9013型三极管。
根据9013的资料显示:
其耐压值为40V,最大功率为0.65W,最大电流为0.5A,电气性能完全满足本设计的要求。
另外数码管显示是采用动态显示,所以对三极管的开关频率有一定的要求。
根据电子秒表的设计计算可知动态显示的频率最高为3KHz,而9013的导通频率为150MHz,完全能满足本设计的要求,所以最终选取9013三极管为位控制开关。
由于数码管是有P0口来驱动,它内部没有上拉电阻,作为输出口时驱动能力比较弱,不能点亮数码显示管,因此P0口必须接上拉电阻来提高驱动能力。
另外一位共阴数码管的驱动电流一般为20mA左右,如果电流太大容易造成数码管损坏,所以也需要根据电源的电压值来确定上拉电阻的大小。
如果电阻过小,势必会形成灌电流过大,造成单片机IO的损坏,如果电阻过大,那么对拉电流没有太大的影响。
电源供电电压为5V,当上拉电阻选用220Ω电阻时灌电流为22mA。
不会损坏单片机的I/O口,同时也可以为数码显示管起到限制电流的保护作用。
2.4按键电路的选择与设计
在按键电路中,我们可以在I/O口上直接接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。
键盘扫描电路节省I/O口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,K1:
复位“00.0”,K2:
开始/暂停,K3:
复位“60.0”,K4:
倒计时;将四个按键与P3.4、P3.5、P3.6和P3.7相接。
通过扫描按键,读取按键实现四个功能的控制。
电路图如下所示:
图2.8键盘电路图
当按键没有按下时,单片机的I/O口直接连接电源,因此需要接上拉电阻来进行限流,本设计中选取阻值为2kΩ的电阻作为上拉电阻,根据计算可知此时的灌电流为2.5mA,查看AT89C51的资料得知次电流在安全范围内,符合安全设计要求。
按键电路中由于采用了外部中断,所以需要用到P3口的第二功能。
P3口引脚的第二功能如表2.2:
表2.2P3口引脚第二功能表
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(片内数据存储器读选通信号输出端)
2.5时钟电路的选择与设计
时钟电路一般由晶体震荡器、晶震控制芯片和电容组成。
如图2.9所示:
图2.9时钟电路
现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。
这些电路的接口简单、价格低廉、使用方便,被广泛地采用。
实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
采用普通32.768kHz晶振。
本设计采用DS1302。
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。
如图1.9所示。
2.6系统总电路的设计
系统总电路由以上设计的显示电路,按键电路,时钟电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。
系统总电路图如图2.10所示。
AT89C51单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。
AT89C51单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。
图2.10系统总电路
复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。
按键电路与单片机的端口连接可以由用户自己设定,本设计中软件复位键接单片机的P3.4和P3.6,均设为低电平有效。
开始/暂停键接到单片机的P3.5,同样设置为位低电平有效。
显示电路由三位数码管组成,采用动态显示方式,因此有8位段控制端和三位位控制端,八位段控制接P0口,P0.0~P0.7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,AT89C51的P0口没有集成上拉电阻,高电平的驱动能力很弱,所以需要接上拉电阻来提高P0的高电平驱动能力。
三位位控制则由低位到高位分别接到P2.0~P2.4口,NPN三极管9013做为位控制端的开关,当P2.0~P2.4端口任意一个端口为高电平时,与其相对应的三极管就导通,对应的数码管导通显示。
通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。
第三章软件设计
3.1程序设计思想
此次选用C语言来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。
其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图3.1所示:
3.2程序框
图3.2主程序流程图图3.3加1子程序流程图
图3.4INT0中断子程序
图3.5数码显示流程图图3.6定时器T0子程序
3.3源程序及说明
本节见附录A。
第四章系统的仿真与调试
4.1硬件的调试
4.1.1排除元器件失效
造成这类错误的原因有两个:
一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。
可以采取检查元器件与设计要求的型号、规格和安装是否一致。
在保证安装无误后,用替换方法排除错误。
4.1.2排除电源故障
在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。
加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V~4.8V之间属正常。
若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。
4.1.3联机仿真调试
联机仿真必须借助仿真开发装置、示波器、万用表等工具。
这些工具是单片机开发的最基本工具。
信号线是联络8031和外部器件的纽带,如果信号线连结错误或时序不对,那么都会造成对外围电路读写错误。
51系列单片机的信号线大体分为读、写信号线、片选信号线、时钟信号线、外部程序存贮器读选通信号(PSEN)、地址锁存信号(ALE)、复位信号等几大类。
这些信号大多属于脉冲信号,对于脉冲信号借助示波器(这里指通用示波器)用常规方法很难观测到,必须采取一定措施才能观测到。
应该利用软件编程的方法来实现。
例如对片选信号,运行下面的小程序就可以检测出译码片选信号是否正常。
4.2软件的仿真与调试
4.2.1Proteus简介
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
本设计在proteusISIS中仿真通过,proteus软件作为一个从设计到完成的完整电子设计与仿真平台,由于其能实现电路仿真与处理器仿真的有机结合,为电子学的教学与实验提供了革命性的手段,现在已经被越来越多大学采用为电路、单片机与嵌入式系统实验室平台及创新平台。
因为proteus软件功能强大,调试软硬件非常方便,所以采用proteus进行仿真。
4.2.2软件的仿真
软件测试步骤如下:
(1)打开Proteus软件。
(2)选择file菜单下的opendesign..选项,找到所需的元器件,按照电路图连接后并保存。
(3)将用KEIL编译过的HEX格式程序,下载到单片机中:
右击51单