基于51单片机的数字秒表课程设计毕业设计论文Word格式文档下载.docx
《基于51单片机的数字秒表课程设计毕业设计论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字秒表课程设计毕业设计论文Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
![基于51单片机的数字秒表课程设计毕业设计论文Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/7/0b3d6e90-8342-4844-8e3b-5be1cd6de23c/0b3d6e90-8342-4844-8e3b-5be1cd6de23c1.gif)
2、设计要求
一、计时范围:
0~59分59.59秒,整数四位数和小数两位数显示;
二、计时精度10毫秒;
3、复位按钮,计时器清零,并做好下次及时预备;
4、能够对三个对象(A、B)计时,具有启/停操纵;
5、设开始、停止A、停止B、显示A、显示B、复位按钮。
四、任务分析、设计方案
1、任务分析
数字电子秒表具有显示直观、读取方便、精度高等优势,在计时中普遍利用。
本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。
设计中包括硬件电路的设计和系统程序的设计。
其硬件电路要紧有主操纵器,计时与显示电路和回零、启动和停表电路等。
主操纵器采纳单片机89C52显示电路采纳共阳极LED数码管显示计不时刻。
本设计利用89C52单片机的按时器/计数器按时和记数的原理,使其能精准计时。
利用中断系统使其能实现开始暂停的功能。
P0口输出段码数据,P2.0-P2.4口作列扫描输出,
P1.一、P3.二、P3.3、P2.5口接四个按钮开关,别离实现开始、暂停、清零和查看上次计不时刻功能。
电路原理图设计最大体的要求是正确性,第二是布局合理,最后在正确性和布局合理的前提下力求美观。
硬件电路图依照图1.1进行设计。
图1.1数字秒表硬件电路大体原理图
计时采纳按时器T0中断完成,按时溢出中断周期为1ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到10次就对十毫秒位进行加一,依次类推,直到99.99秒从头复位。
再看按键的处置。
这四个键能够采纳中断的方式,也能够采纳扫描的方式来识别。
复位键和查看要紧功能在于数值复位和查询上次计不时刻,关于时刻的要求不是很严格。
而开始和停止键那么是用于对时刻的锁定,需要比较准确的操纵。
因此能够对复位和查看按键采取扫描的方式。
而对开始和停止键采纳外部中断的方式。
其硬件电路要紧有主操纵器,显示电路和回零、启动、查看、计次电路等。
主操纵器采纳单片机89C52,显示电路采纳共阳极LED数码管显示计不时刻,四个按键均采纳触点式按键。
二、单片机的选择
本课题在选取单片机时,充分借鉴了许多成形产品利用单片机的体会,并依照自己的实际情形,选择了stc公司的89C52。
89C52单片机采纳40引脚的双列直插封装方式。
图1.2为引脚排列图,40条引脚说明如下:
主电源引脚Vss和Vcc
①Vss接地
②Vcc正常操作时为+5伏电源
外接晶振引脚XTAL1和XTAL2
①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。
当采纳外部振荡器时,此引脚接地。
②
XTAL2内部振荡电路反相放大器的输出端。
是外接晶体的另一端。
当采纳外部振荡器时,此引脚接外部振荡源。
图1.28051单片机引脚图
操纵或与其它电源复用引脚RST/VPD,ALE/
,
和
/Vpp
输入/输出引脚P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。
①P0口(P0.0-P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
②P1口(P1.0-P1.7)是一个带有内部提升电阻的8位准双向I/O口。
能驱动(吸收或输出电流)四个LSTTL负载。
③P2口(P2.0-P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。
P2口能够驱动(吸收或输出电流)四个LSTTL负载。
④P3口(P3.0-P3.7)是一个带有内部提升电阻的8位准双向I/O口。
(1)运算器
运算器的功能是进行算术运算和逻辑运算。
能够对半字节(4位)、单字节等数据进行操作。
(2)程序计数器PC
程序计数器PC用来寄存即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。
执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。
(3)令寄放器
指令寄放器中寄存指令代码。
CPU执行指令时,由程序存储器中读取的指令代码送入指令寄放器,经译码后由按时与操纵电路发出相应的操纵信号,完成指令功能。
3、显示电路的选择与设计
关于数字显示电路,通常采纳液晶显示或数码管显示。
本设计的显示电路采纳7段数码管作为显示介质。
数码管显示能够分为静态显示和动态显示两种。
由于本设计需要采纳五位数码管显示时刻,若是静态显示那么占用的口线多,硬件电路复杂。
因此采纳动态显示。
图1.3显示电路大体原理图
动态显示是一名一名地连番点亮列位,这种逐位点亮显示器的方式称为位扫描。
通常列位的段选线相应并联在一路,由一个8位的I/O口操纵;
列位的公共阴极位选线由另外的I/O口线操纵。
动态方式显示时,各分时连番选通,要使其稳固显示必需采纳扫描方式,即在某一时刻只选通一名,并送出相应的段码,在另一时刻选通另一名,并送出相应的段码,依此规律循环,即可使列位显示将要显示的字符,尽管这些字符是在不同的时刻别离显示,但由于人眼存在视觉暂留效应,只要每位显示距离足够短就能够够给人同时显示的感觉。
数码显示管分为共阳数码管和共阴数码管两种
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一路,如图1.4(b),通常,公共阳极接高电平(一样接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平常,那么该端所连接的字段导通并点亮,依照发光字段的不同组合可显示出各类数字或字符。
现在,要求段驱动电路能吸收额定的段导通电流,还需依照外接电源及额定段导通电流来确信相应的限流电阻。
图1.4(a)数码管引脚图(b)共阳极内部结构图(c)共阴极内部结构图
最大
4、按键电路的选择与设计
本设计中有四个按键,别离实现开始、暂停、复位和计次功能。
这四个键能够采纳中断的方式,也能够采纳查询的方式来识别。
关于复位键和查看键,要紧功能在于数值复位和对上次计不时刻的查看,关于时刻的要求不是很严格,而开始和暂停键要紧用于时刻的锁定,需要比较准确的操纵。
因此能够考虑,对复位键和查看键采纳查询的方式,而关于开始和暂停键采纳外部中断。
四个按键均采纳低电平有效,具体电路连接图如图1.5所示。
5、时钟电路的选择与设计
单片机的时钟信号用来提供单片机内各类微操作的时刻基准,8051片内设有一个由反向放大器所组成的振荡电路,XTAL1和XTAL2别离为振荡电路的输入和输出端,8051单片机的时钟信号通经常使用两种电路形式取得:
内部振荡方式与外部振荡方式。
外部方式的时钟很少用,假设要历时,只要将XTAL1接地,XTAL2接外部振荡器就行。
对外部振荡信号无特殊要求,只要保证脉冲宽度,一样采纳频率低于11.05926MHz的方波信号。
图中,电容器C1
、C2起稳固振荡频率、快速起振的作用,电容值一样为5~33pF。
但在时钟电路的实际应用中必然要注意正确选择其大小,并保证电路的对称性,尽可能匹配,选用正牌的瓷片或云母电容,若是可能的话,温度系数尽可能低。
本设计中采纳大小为30pF的电容和11.05926MHz的晶振。
图1.6内部振荡电路
6、复位电路的选择与设计
当8051单片机的复位引脚RST(全称RESET)显现2个机械周期以上的高电平常,单片机就完成了复位操作。
若是RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。
因此要求单片机复位后能离开复位状态。
而本系统选用的是11.05926MHz的晶振,因此一个机械周期为1.09μs,那么复位脉冲宽度最小应为2.18μs。
在实际应用系统中,考虑到电源的稳固时刻,参数漂移,晶振稳固时刻和复位的靠得住性等因素,必需有足够的余量。
依照应用的要求,复位操作通常有两种大体形式:
上电复位、手动复位。
图1.10单片机复位电路
7、系统总电路的设计
系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部份电路合理的连接就组成了系统总电路。
系统总电路图附录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端口任意一个端口为高电平常,与其相对应的三极管就导通,对应的数码管导通显示。
通过以上设计已经将各部份电路与单片机有机的结合到一路,硬件部份的设计以大功告成,剩下的部份确实是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全数功能。
五、具体实现进程
一、对数字秒表设计进行分析,敲定几组方案;
2、在PROTUES软件中,画电路图,进行仿真、调试;
3、对自己想要实现的秒表现象进行编程,运用KEIL软件;
并于Proteus联调。
4、调试进程中要不断改良自己的方案;
六、测试各个所需元件,STC89C52RC,数码管。
7、将方案敲定以后,对LED数字秒表进行焊接其中最要紧的是对最小系统的焊接时超级关键的,在进行焊接数码管时,很关键。
八、将最小系统焊接好以后要用数字万用表进行测试,第一要测试有无短接、断接的地址,再将焊好的板子放在电源上进行加电,看电路板子是不是正常工作。
九、将最小系统板子与数码管板子连在一个,通过USB口与电脑相连,打开串口助手,将KEIL软件中的程序下载到单片机中,进行验证。
10、具体程序
/********************************************************
*文件名:
秒表.c
*描述:
基于51单片机的数码管数字秒表;
带有指示灯,蜂鸣器,按键(启动、清零、计次)
*创建人:
罗宏
*单位:
佳木斯大学信息电子技术学院电子协会
*日期:
2014.6.26
*开发环境:
Keil4
*邮箱:
744544126@
*晶振:
11.05926MHZ
*版本号:
*********************************************************/
#include<
reg52.h>
#defineuintunsignedint//宏定义无符号整型
#defineucharunsignedchar//宏定义无符号字符型
#defineDUAN(P0)//宏定义数码管段代码
#defineWEI(P2)//宏定义数码管位代码
sbitkeystart_stop=P3^2;
//定义启动/停止按键
sbitkeyrest=P3^3;
//定义复位/清零按键
sbitkeyrecord=P3^4;
//定义计数/存储按键
sbitkeydispaly=P3^5;
//定义计数/显示按键
sbitbeep=P3^6;
//定义蜂鸣器
sbitled=P3^7;
//定义
ucharx,msec5,msec10,second,minute;
//时间变量
ucharmsec,sec,min;
//显示变量
ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳数码管数组不带点显示
ucharcodetable2[]={0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x58,0x00,0x10};
//共阳数码管带点显示
/********************************
函数名称:
延时函数delay
功能:
延时指定毫秒
参数:
ucharx
返回值:
无
********************************/
voiddelay(ucharx)
{
uintb,c;
for(b=x;
b>
0;
b--)
for(c=110;
c>
c--);
}
按时器初始化函数time_init(void)
按时器初始化
*********************************/
voidtime_init(void)
msec5=0;
TMOD=0x01;
TH0=(65536-9174)/256;
TL0=(65536-9174)%256;
ET0=1;
TR0=1;
EA=1;
显示函数display()
数码管显示
ucharmsec,ucharsec,ucharmin
voiddisplay(ucharmsec,ucharsec,ucharmin)
DUAN=table1[(msec%10)%10];
//0.01秒5.64%10=64%10=0.04
WEI=0x01;
delay
(2);
WEI=0x00;
DUAN=table1[(msec/10)%10];
//0.1秒5.64/10=56%10=0.6
WEI=0x02;
DUAN=table2[(sec%10)];
//1秒564%10=6
WEI=0x04;
DUAN=table1[(sec/10)];
//10秒564/10=56%10=6
WEI=0x08;
DUAN=table1[(min%10)];
//1分564/10=56%10=6
WEI=0x10;
DUAN=table1[(min/10)];
//10分564/10=56%10=6
WEI=0x20;
}
蜂鸣器函数
蜂鸣器发声
voidbeep_led()
beep=0;
delay(600);
beep=1;
led=0;
led=1;
按键函数
调试按键的函数
voidkeys()
if(keystart_stop==0)
{
delay(5);
if(keystart_stop==0)
TR0=~TR0;
beep_led();
while(!
keystart_stop);
}
if(keyrest==0)
{
delay(5);
if(keyrest==0)
TR0=0;
msec5=0;
msec10=0,
second=0;
minute=0;
beep_led();
while(!
keyrest);
主函数
voidmain()
ucharjishu=0;
ucharflag=0;
ucharmsec1=0,sec1=0,min1=0;
ucharmsec2=0,sec2=0,min2=0;
time_init();
while
(1)
keys();
//键盘的扫描函数一定要放在while循环里边
msec=msec10;
sec=second;
min=minute;
if(flag==1)
{
display(msec1,sec1,min1);
}
elseif(flag==0)
{
display(msec,sec,min);
else
display(msec2,sec2,min2);
if(keyrecord==0)
{
if(keyrecord==0)
{
beep_led();
jishu++;
if(jishu>
2)
{
jishu=0;
}
elseif(jishu==1)
msec1=msec10;
sec1=second;
min1=minute;
}
elseif(jishu==2)
msec2=msec10;
sec2=second;
min2=minute;
}
while(!
keyrecord);
if(keydispaly==0)
{
delay(5);
if(keydispaly==0)
beep_led();
flag++;
if(flag>
flag=0;
}
while(!
keydispaly);
}
}
/**********************************
中断函数
***********************************/
voidtimer0()interrupt1
msec10++;
//msec10加一次等于10ms
if(msec10==100)//j=100为1s
msec10=0;
second++;
if(second==60)//second=60为1minute
second=0;
minute++;
if(minute==60)//minute=60为1hour
minute=0;
}
六、仿真、实验验证进程及实现结果、现象
七、结论
本设计的数字电子秒表系统采纳89C52单片机为中心器件,利用其按时器/计数器按时和记数的原理,结合显示电路、LED数码管和外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现八位LED显示,显示时刻为0~59分59.59秒,计时精度为0.01秒,能正确地进行计时,同时能记录两次时刻,并在计时后对上一次计