基于AT89C52单片机的多动能秒表设计.docx
- 文档编号:8205639
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:20
- 大小:324.41KB
基于AT89C52单片机的多动能秒表设计.docx
《基于AT89C52单片机的多动能秒表设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机的多动能秒表设计.docx(20页珍藏版)》请在冰豆网上搜索。
基于AT89C52单片机的多动能秒表设计
基于单片机的秒表设计
摘要随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测技术不断更新。
单片机是指集成在一个芯片上的微型计算机,主要包括CPU、随机存储器、只读存储器、基本输入/输出接口电路、定时器/计数器等部件。
本设计的数字电子秒表系统采用AT89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现四位LED显示,设计具有计时和倒计时功能的电子秒表。
关键词单片机;LED数码显示器;AT89C52;秒表
1绪论
单片机自问世以来,性能不断提高和完善,而且具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此在工业控制、智能仪表、数据采集和处理、通信系统、网络系统、汽车工业、国防工业、家用电器等领域的应用日益广泛,并且正逐步取代现有的多片微机应用系统,单片机的潜力越来越被人们所重视[1]。
进入21世纪,随着信息产业的高速发展,秒表的用途越来越广泛。
数字秒表是电器制造、电力、工业自动化控制、国防、实验室及科研单位理想的计时仪器,同时还用于军事,医疗,商务等领域,发展及应用前景广泛。
目前已经有很多种类的数字秒表应用于各个行业了,它们大多是指针式或集成电路型的,但是结构相对复杂、测试功能单一[2]。
鉴于目前的情况,我们提出了以单片机作为控制核心,添加必要的外围电路的价格低廉、走时精确、使用方便的秒表系统。
随着信息产业的高速发展,数显电子秒表用途不断增多而且越来越重要,它同时也在增加功能及性能改进。
一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,硬件描述语言是电子设计自动化(EDA)领域的一次重大变革.在电子计算机发展过程中,微型计算机是一个重要分支。
其中单片微型计算机(SingleChipMicrocomputer)的应用更带来了秒表设计领域新的革命。
德国和奥地利科学家便通过对单片机的研制出一种超高精确度秒表,能测出比0.1飞秒(即1×10-16S)还短的时间。
这种高精确度秒表是由德国比勒菲尔德大学和奥地利维也纳工业大学的研究人员组成的研究小组研制成功的[3]。
综上所述,秒表经历了机械设计、基于集成电路的设计、基于EDA的设计、基于单片机的设计的发展及现如今的一些出于特殊用途的超高精度秒表,每个发展阶段都符合其时代的要求,但是随着科技的发展,数显电子秒表在向着高精度,高稳定性,体积小,重量轻便于携带趋势发展。
基于单片机的定时与控制装置在诸多行业都有广泛的应用,本文以AT89C52为主控制芯片,应用LED显示器设计电子秒表,其主要功能有单计时、连续记8个的计时、设定初值的倒计时。
本文是一个单片机的最小系统设计,对于各种复杂系统的开发,具有一定的指导作用。
2系统功能概述
毕业设计总体方案是以AT89C52单片机作为控制核心,设计具有计时、倒计时等功能的电子秒表。
一个完整的电子秒表电路就是一个单片机的最小系统,主要由键盘输入电路、单片机、晶振、复位电路和LED显示电路构成。
本毕业设计中电子秒表可以实现以下的功能:
(1)用开关控制两种计时模式的选择。
分别是单计时模式和连续计8个的计时模式。
(2)用开关控制电子秒表的启动、停止、复位,七段数码管的高2位显示秒表的秒值,低2位显示秒表的百分秒值。
(3)可实现设定初值的倒计时功能。
其中涉及了三种初值调整方式,分别是增1(减1)、连续增(连续减)和快速增(快速减)。
3系统硬件设计
3.1电路元件及其功能介绍
根据设计的方案,选取了单片机AT89C52,用于显示秒表数值的LED1~LED4,以及用于显示电路工作状态的LED5-LED6,驱动数码管的三极管SS9012以及必要的按键开关及其他元件。
3.1.1AT89C52单片机的介绍
集成在一个芯片上的微型计算机即为单片机,也就是把组成微型计算机的各种功能部件,像CPU、只读存储器ROM(Readonlymemory)、随机存储器RAM(Randomaccessmemory)、基本输入/输出接口电路、定时器/计数器等部件集成在一块芯片上,构成一个较为完整的微型计算机,从而实现一些微型计算机所具有的功能[4]。
在微型单片机选择上,我们应该考虑存储器容量,时钟频率,I/O口线等基本参数。
对于本设计,由于电子秒表系统在数据的处理和存储方面要求不高,所以选取片内带RAM和ROM的单片机即可,在本设计中选取的是ATMEL公司的AT89C52单片机。
AT89C52是一个低电压,高性能CMOS8位单片机[5],片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用[6]。
AT89C52具有很多优异的功能,具体的功能及特点如下:
1.兼容MCS51指令系统;
2.8kB可反复擦写(大于1000次)FlashROM;
3.32个双向I/O口;
4.256byte内部RAM;
5.3个16位可编程定时/计数器中断[7];
6.时钟频率0-24MHz;
7.2个外部中断源,共8个中断源;
8.2个读写中断口线,3级加密位;
9.低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
10.有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求[8]。
另外,在AT89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器(SFR)。
并非所有的地址都被定义,从80H—FFH共128个字节只有一部分被定义,还有相当一部分没有定义。
对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。
不应将数据写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。
AT89C52除了有单片机AT89C51所有的定时/计数器0和定时/计数器1外,还增加了一个定时/计数器2。
定时/计数器2的控制和状态位位于T2CONT2MOD,寄存器对(RCAO2H、RCAP2L)是定时器2在16位捕获方式或16位自动重装载方式下的捕获或自动重装载寄存器[9]。
AT89C52单片机的内部结构与MCS-51系列单片机的构成基本相同。
CPU是由运算器和控制器所构成的。
运算器主要用来对操作数进行算术、逻辑运算和位操作的。
控制器是单片机的指挥控制部件,主要任务的识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。
AT89C52单片机的指令系统和引脚功能与MCS-51的完全兼容[10]。
AT89C52的引脚排列如图3-1所示。
图3-1AT89C52引脚排列图
3.1.2LED显示器概述
如3-2图所示为七段LED数码管的原理图,通过该图可以很容易的看出共阳极和共阴极的七段LED管的工作原理的不同点。
对于共阴极的数码管,所有发光二极管的阴极共连后接地,而阳极引出脚用于控制LED是否发亮。
若阳极引出脚接地,则LED被熄灭;若阳极引脚接高电平,则LED被点亮。
图3-2LED原理图
共阳极的LED正好相反,所有发光二极管的阳极共连后接高电平,而阳极引出脚用于控制LED是否点亮。
若阴极引脚接高电平,则LED被熄灭;反之,则LED被点亮。
单片机对LED管的显示可以分为静态和动态两种[11]。
静态显示的特点是各LED管能同时稳定地显示各自字符;动态显示是指各LED轮流一遍一遍显示各自字符,但由于显示的切换较快,在人的视觉看来是各LED管同时显示不同字符。
下面介绍LED的接口方法与电路:
(1)LED数码显示的接口方法
单片机与LED数码显示器有以硬件为主和以软件为主的两种接口方法。
以硬件为主接口方法,这种接口方法的电路如3-3图所示。
图3-3LED接口方法电路图
(2)LED数码显示器的接口电路
单片机实际使用的LED数码显示器位数较多。
为降低成本,大部分以软件为主的接口方法对于多位LED数码管显示器,通常采用动态扫描显示方法,即逐个循环点亮各位显示器。
这样虽然在任一时期只有一位显示器被点亮,但是由于人眼有视觉残留效应,看起来与全部显示持续点亮的效果基本一样(在亮度上要有差别)。
此外,单片机一般对LED的驱动效果有限,LED一般还需要外围的驱动才能更好的发挥其显示效果。
LED显示是单片机控制产品中常见的应用。
使用LED模块,这种模块中带有LED显示管和LED驱动电路,用起来较方便。
一般用户直接采用单片机+LED驱动器+LED显示管的方式,一种经常使用的LED驱动器8550,它作为共阳数码管的驱动器,而共阴数码管的驱动器则是A1015,它们都是三极管[12]。
3.2系统电路设计
3.2.1复位电路
复位电路在单片机系统中是必不可少的。
所谓的复位就是讲单片机重新启动,这是单片机内部的都有寄存器都回到初始状态[13]。
对于AT89C52单片机来说,它是高电平复位,也就是说只要将单片机的RESET引脚接高电平并保持一定的时间就可以实现单片机的复位(而对于一些低电平复位的单片机来说就刚好相反,要使其RESET引脚置为低电平并保持一定时间以实现单片机的复位)。
本设计电路中对应的复位电路如图3-4所示。
图3-4复位电路图
从上面的电路可以看出实现的是上电复位和按键复位两个复位功能。
上电的一瞬间,单片机的RESET引脚接到高电平,同时电容C1开始充电,经过一定的时间后电容充电饱和,10K的下拉电阻把RESET引脚拉回到低电平状态,实现了单片机的复位。
同样道理,在单片机工作的时候按下复位按钮,单片机的RESET引脚接到高电平,电容C1马上放电完毕;松开该按钮后电容C1开始充电,经过一定的时间后电容充电饱和,10K的下拉电阻把RESET引脚拉回到低电平状态,实现了单片机的复位。
3.2.2晶振电路
图3-5晶振电路图
单片机最小系统晶振也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快[14]。
单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好。
单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:
电路将无法通信。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的晶振精度会更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器[15](VCO)。
在此系统中,主板时钟芯片即分频器的原始工作振荡频率,由石英晶体多谐振荡器的谐振频率来产生,晶振其实是一个频率产生器,他主要把传进去的电压转化为频率信号。
提供给分频率一个基准的振荡频率,它是一个多谐振荡器的正回馈环电路,也就是说它把输入作为输出,把输出作为输入的回馈频率,象这样一个永无休止的循环自激过程,从而为秒表系统提供一个稳定的时钟频率。
3.2.3数码管显示部分
图3-6数码管连接电路图
如3-6图所示,LED1-LED4数码管与AT89C52的P1.0—P1.7连接,当系统工作时,单片机里面的程序按指定运行,单片机会向引脚P1.0—P1.7传送数码管的段位码,LED上的各个段位对应的发光二极管则根据传输过来的编码点亮或断电熄灭,从而显示的便是0-9各个数字。
各个数码管的显示并不是同时点亮或熄灭的,而是通过对不同数码管在不同时间段的控制来实现,而由于系统执行的快速性,系统执行时会给人们一定的视觉暂留。
所以,同一时刻,人眼看到的便是几个数码管共同显示。
下面的三极管则作为数码管的驱动,从单片机内部传输来的指令信号来决定LED1-LED4各个数码管相应的显示或明亮变化。
基于此,数码管实现了秒表数据的显示。
3.2.4按键部分电路
电路通过对K1、K2、K3等按键的闭合,来实现电路的切换和智能控制。
具体的按键部分电路如3-7所示。
图3-7按键部分电路图
各个按键的功能如下:
按键K1:
在正常情况下,用于控制单一计时模式下秒表的启动、停止。
在倒计时初值设定的情况下为倒计时初值的增加按键,按一下K1,倒计时初值增加1;按住K1不放,倒计时初值连续增加;快速连按两下K1然后不放,则倒计时初值快速增加,增加的速度是连续增加的10倍。
按键K2:
在正常情况下,用于倒计时初值减少功能的启动、停止。
在倒计时初值设定的情况下为倒计时初值的减少按键,按一下K2,倒计时初值减少1;按住K2不放,倒计时初值连续减少;快速连按两下K2然后不放,则倒计时初值快速减少,减少的速度是连续减少的10倍。
按键K3:
用于秒表的功能的选择,在默认的情况下,为秒表的计时准备模式;按下K3后秒表进入倒计时的状态,这是通过按键K1和K2可以进行倒计时初值的调整,再按下K3则进入倒计时。
3.2.5I/O口线连接
P1.0~P1.7:
与数码管的各个位相连,用于传送数码管的段位码。
P3.0~P3.3:
与数码管LED1~LED4相连,通过单片机的P3.0~P3.3可以控制LED的显示。
P2.1:
和按钮K1相连,用于决定单一计时模式下的秒表启动、停止和倒计时初值的增加。
P2.0:
和按钮K2相连,用于决定连续计8个的计时模式下秒表启动、停止和倒计时初值的减少。
P2.2:
和按钮K3相连,用于单片机工作模式的选择。
P2.6:
和LED6相连,用于显示单片机的工作状态。
P2.7:
和LED5相连,用于显示单片机的工作状态。
3.2.6系统总体电路
单片机电子秒表的原理图如图3-8所示。
图3-8电子秒表原理图
电路组建完成之后,向单片机内传输要执行的功能程序代码,系统上电之后,晶振电路部分为系统工作提供必须的时钟频率,系统在代码的执行下对LED数码管传输相应的段位码,控制LED的显示。
LED5—LED6则作为状态指示灯根据单片机的状态显示计时和倒计时两种工作状态来做出相应的明亮变化:
在准备计时时LED5亮,LED6熄灭;在准备倒计时的时候LED5熄灭,LED6亮。
在系统按键的相应作用下,K1实现倒计时初值的增加,K2实现倒计时初值的减少,K3则实现计时与倒计时两种状态的切换。
而复位电路则通过按键的作用,实现系统的默认设置,对电路起到复位的作用。
通过对各个LED数码管的显示与中断控制,各部分电路相互的作用运行,达到显示秒表运行的目的。
4系统软件设计
系统硬件设计好之后,接下来就要进行软件设计。
电子秒表的软件设计主要有三个方面:
第一是利用定时器来完成秒表的定时周期;第二是利用定时中断来实现键盘的扫描,确定单片机的工作状态;第三是利用单片机控制LED的输出显示。
4.1程序功能及主要变量的说明
4.1.1程序功能
电子秒表程序主要完成如下功能:
(1)两种计时模式的启动、停止、复位功能的秒表。
(2)可设定初值的倒计时定时器。
4.1.2主要变量说明
程序中用到的关键变量说明如表4-1和表4-2所示。
表4-1主要变量定义
变量
说明
m
整型变量,用于存储要显示的数
ms
字符型变量,用于10ms的累加
LED1~LED4
整型变量,用于存储要显示的各个位的数字
start
位变量,用于控制秒表单一计时模式的计时开始
stop
位变量,用于控制秒表单一计时模式的计时停止
eight_start
位变量,用于控制秒表连续计时8次模式的计时开始
eight_stop
位变量,用于控制秒表连续计时8次模式的计时停止
count_down
位变量,用于控制倒计时开始
scankey
位变量,用于控制键盘扫描
cheak
位变量,按键的消抖标志位
keydown
位变量,K1的按下标志位
K2_keydown
位变量,K2的按下标志位
表4-2主要变量定义
K3_keydown
位变量,K3的按下标志位
K3_keyup
位变量,K3的弹起标志
mm
字符型变量,用于0.2秒的累加
add
位变量,倒计时初值加1标志位
sub
位变量,位变量,倒计时初值减1标志位
bit_add1
位变量,K1完成一次按键动作的标志位
bit_sub
位变量,K1完成一次按键动作的标志位
fast_add
位变量,倒计时初值连续增标志位
double_key
位变量,倒计时初值快速增标志位
fast_sub
位变量,倒计时初值连续减标志位
double_sub
位变量,倒计时初值连续减标志位
tab[8]
整型变量,存储连续计时8次模式的8的时间值
4.2程序流程图
主程序完成的工作是检测各个标志位的状态,以确定单片机的工作情况。
键盘查询和数据显示的部分在定时中段服务子程序中完成。
由于程序较大,所以将程序的各个功能模块的流程图分别给出。
4.2.1计时功能流程图
图4-1计时功能流程图
4.2.2倒计时初值设定流程图
图4-2倒计时初值增加流程图
图4-3倒计时初值减少流程图
4.2.3倒计时功能流程图
图4-4倒计时开始流程图
4.3主要程序代码
全部的程序包括了头文件、变量的定义、主程序及各子程序。
本部分对设计中的主要程序单独说明。
(1)主程序
在主程序中需要完成以下的功能:
首先调用初始化函数对各个变量进行初始化,再对定时器的定时初值进行设定,接着根据各个标志位的值来判断单片机的工作模式及工作状态。
键盘扫描由scan()来完成,各个位的数值的计算由add1()完成。
voidmain(void)
{
begin1();//调用初始化函数
TMOD=0x01;
TL0=0x18;
TH0=0xfc;
EA=1;
ET0=1;
TR0=1;
for(;;){
if(scankey==1)//进行键盘扫描
{scankey=o;
scan();
if(double_key==1)//倒计时初值快速增加
{P2_6=0;
P2_7=1;
m=m+10;
add1(m);
}
if(fast_add==1)//倒计时初值连续增加
{P2_6=0;
P2_7=1;
m++;
add1(m);
bit_add1=0;
}
if(add==1)//倒计时初值增加1
{P2_6=0;
P2_7=1;
add=0;
m++;
add1(m);
}
if(double_sub==1)//倒计时初值快速减少
{P2_6=0;
P2_7=1;
m=m-10;
add1(m);
}
if(fast_sub==1)//倒计时初值连续减少
{P2_6=0;
P2_7=1;
m--;
add1(m);
bit_sub=0;
}
if(sub==1)//倒计时初值减少1
{P2_6=0;
P2_7=1;
sub=0;
m--;
add1(m);
}
if(start==1)//计时开始
{if(mm==0)
{P2_7=!
P2_7;
P2_6=1;
m++;
if(mm==6000)m=0;
add1(m);
}
if(stop==1)start=0;//计时停止
if(count_down==1)//倒计时开始
{if(m>0)m--;
P2_7=1;
if(mm==0)P2_6=!
P2_6;
}
}
}
(2)定时器中断子程序
这里的秒表的计时、键盘的扫描及数值显示灯都是利用定时中断来完成的。
定时的时间设为1ms,用于数值显示;同时利用累加的方法实现10ms和200ms的定时,用于键盘的扫描及控制显示灯的闪烁。
voidtime0(void)
{
TL0=0x18;
TH0=0xfc;
ms++;
if(ms==10)
{ms=0;
mm++;
if(mm==20)mm=0;
scankey=1;
}
display();
}
(3)显示子程序
显示子程序其实包括了display()和add1(time)两个子程序。
add1(time)是用来计算数码管各个位要显示的数值的子程序,display()是查段位码表及进行动态扫描的子程序。
voidadd1(time)
uinttime;
{uintn,a;
a=time/1000;
LED1=a;//计算十秒位数值
n=time&1000;
LED2=(n/100);//计算秒位数值
n=n%100;
LED3=(n/10);//计算十分一秒位数值
LED4=n%10;//计算百分一秒位数值
}
voiddisplay(void)
{switch(ms%4)
{
caseo:
P3=0xfe;
P1=table[LED4];
P1_7=1;
Break;
case1:
P3=0xfd;
P1=table[LED3];
P1_7=1;
Break;
case2:
P3=0xfb;
P1=table[LED2];
P1_7=1;
Break;
caseo:
P3=0xf7;
P1=table[LED1];
P1_7=1;
Break;
default:
return;
}
}
5结论
本次毕业设计的任务是以单片机AT89C52作为控制核心,设计电子秒表,使其具有计时、倒计时功能。
通过我几个月的努力,本次毕业设计取得了较好的成果,基本上达到了本次毕业设计任务书的要求。
初步实现了具有计时、倒计时功能的电子秒表设计。
虽然还有一些欠缺的地方,但是总体来说这次的毕业设计还是很成功的。
这次毕业设计让我收获很大,学到很多将来一定能用到的知识,设计、定时器应用、LED应用等。
更重要的是,我学会了软硬件开发的思想。
在这次设计中给我感受最深的就是我们应该加强同学与老师之间的相互合作与配合,老师在其中起着很大作用,他时刻地洞察着你的进展情况,关键时候给你指明了方向,让你向着他理想的目标前进。
同时,我们作为学生要能理解老师的一番苦意,我们要有进取心,持之以恒的精神,遇到困难不能气馁,只有这样才能让指导老师看到成功的希望。
我相信,在以后的工作学习中,我会更加努力,全身心地投入社会,做出我理想的成绩!
参考文献
[1]郑毛祥.单片机应用基础.人民邮电出版社,2006.6:
21-42
[2]戢卫平,胡耀辉,朱朝华等主编.单片机系统开发实例经典[M].北京:
冶金工业出版社,2006:
29-47
[3]桑胜举,沈丁主编.单片机原理及应用[M].北京:
中国铁道出版社,2010:
1-32
[4]宋浩主编.单片机原理及应用[M].北京:
清华大学出版社,2005:
103-149
[5]李叶紫等主编.MCS-51单片机应用教程[M].北京:
清华大学出版社,2004:
22-45
[6]高伟主编.AT89单片机原理及
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89C52 单片机 动能 秒表 设计