基于89C52的数字秒表设计.docx
- 文档编号:4591164
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:21
- 大小:1.72MB
基于89C52的数字秒表设计.docx
《基于89C52的数字秒表设计.docx》由会员分享,可在线阅读,更多相关《基于89C52的数字秒表设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于89C52的数字秒表设计
单片机系统
课程设计
成绩评定表
设计课题:
数字秒表设计
学院名称:
电气工程学院
专业班级:
自动F1207
学生姓名:
学号:
201223911407
指导教师:
周刚
设计地点:
31-517
设计时间:
2014-12-29~2015-01-09
指导教师意见:
成绩:
签名:
年月日
单片机系统
课程设计
课程设计名称:
数字秒表设计
专业班级:
自动F1207
学生姓名:
学号:
201223911407
指导教师:
周刚
课程设计地点:
31-517
课程设计时间:
2014-12-29~2015-01-09
单片机系统课程设计任务书
学生姓名
专业班级
自动F1207
学号
201223911407
题目
数字秒表设计
课题性质
工程设计
课题来源
自拟
指导教师
周刚
主要内容
(参数)
1.利用89c51单片机设计一个数字秒表,实现功能如下:
2.秒表的最大计时值为99分59.99秒;
3.六位数码管显示,分辨率为0.01秒;
4.具有清零、启动计时、暂停计时(内部继续计时),调用计时等功能;
5.控制操作键4个,启动(停止)、暂停、调取、复位。
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
软件设计,编写程序。
第7-8天:
实验室调试。
第9-10天:
撰写课程设计报告。
要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。
主要参考
资料
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:
国防工业出版社,2004
[2]伟福LAB6000系列单片机仿真实验系统使用说明书
[3]阎石.数字电路技术基础(第五版).北京:
高等教育出版社,2006
审查意见
系(教研室)主任签字:
年月日
目录
1绪论1
1.1数字秒表概述1
1.2设计思想及基本功能1
2方案论证2
2.1方案选取2
2.2系统框图2
2.3总体方案设计2
3硬件电路设计7
3.1单片机最小系统设计7
3.2按键电路8
3.3显示电路9
3.4引脚控制说明9
4系统软件设计10
4.1系统流程图10
4.2秒表的初始化11
4.3按键扫描检测程序12
4.4开始计时12
4.5计时程序12
4.6显示程序12
4.6暂停计时13
4.6秒表清零13
5系统调试13
5.1程序调试12
5.2硬件调试12
6总结16
参考文献:
17
附录。
附录一系统原理图。
附录二程序代码18
1绪论
1.1数字秒表概述
自20世纪末期以来,电子技术的发展日新月异。
电子技术在各个领域的运用也越来越广泛,从而有力地推动了社会生产力的发展以及社会信息化程度的提高。
其中,秒表计时器是工业自动化控制、国防、实验室及科研单位理想的计时仪器,它广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等的时间测试。
在各种现代体育竞技比赛中,秒表成为必不可少的工具之一。
而随着运动员的水平的不断提高,他们之间的差距也在不断缩小。
因此,在某些运动中对时间精度的要求就会越来越高,也就需要高精度的秒表来记录成绩,从而保障比赛的公平性。
在历史上,钟表大致有三个演变阶段。
首先是大时钟演变到小时钟、其次小时钟过渡到袋表、再之袋表发展到腕表。
再这三个阶段,每一次的改变都是和当时的技术水平和创造发明水平是息息相关的。
本文简单阐述了基于单片机STC89C52的数字秒表的的设计。
本设计的主要特点是计时精度达到0.01秒,是各种体育竞赛的必要设备之一。
本设计的数字秒表用STC89S52单片机为主要器件,利用其定时器的原理,结合显示电路、LED数码管以及外部外部中断电路来设计计时器。
将软硬件结合起来,使得系统能实现0~99.99秒的计时,计时精度位0.01秒。
硬件系统利用单片机开发板。
1.2设计思想及基本功能
利用52单片机的定时计数器设计一个秒表,其中设有一个按键,定时器工作在方式1。
当第一次按下按键时,定时器开始计时。
第二次按下按键时,停止计时并计算两次按键的时间间隔,送显示器显示。
第三次按下按键时定时器清零,等待下一次按键。
该系统具有一般数字秒表的最基本功能,即通过键盘按键启动,暂停,复位。
通过LED显示秒表所记时间。
系统本着简单实用经济的思想,尽量简化电路设计,用最简单的电路布线和选用最经济实用的器件来达到设计要求。
秒表控制系统有以下几个基本功能:
(1)利用单片机内部的定时器实现秒表功能并用数码管显示当前时间;
(2)按下暂停键,数码管计时暂停,显示时间,在按下启动键,继续计时;
(3)按下复位键,数码管示数从零开始,具备复位功能。
2方案论证
2.1方案选取
在这次课程设计中,主程序主要是通过STC89C52和74LS373锁存器来控制的,从而为所用的中断程序的地址以及一些必要的标志提供赋值。
其中在数字秒表的设计中运用了2个中断号和2个中断程序。
STC89C52的TO端口在工作方式1下由下降沿触发,然后产生方波脉冲,从而作为AT89C52的中断信号。
2.2系统框图
图2.2
2.3总体方案设计
这次实验所选用的实验器材主要包括开关计时以及显示,其中开关计时是与中断T0相连的,它是中断T0的申请中断信号,也就是设计要求中的第一个人的计时,来负责秒表的计时;而开关显示是与AT89C51上的P2.6口相连,即设计记下时间,当记录完成后,按下显示按钮,就会从最后一个人的顺序倒起来显示他们工作所用的时间(注意:
先来后显示)。
本次设计的核心思想是:
在运行中断程序的时候,首先判断中断信号,然后再根据中断信号来产生脉冲来确定是执行中断服务程序。
3硬件电路设计
3.1单片机最小系统设计
单片机最小系统原理图如图3.1所示单片机最小系统是使单片机工作满足的最低硬件的系统要求,主要包括单片机、时钟电路、复位电路。
时钟电路:
时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
在STC89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引角跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
此电路采用11.0592MHz的石英晶体。
复位电路:
确定单片机工作的起始状态,完成单片机的启动过程。
单片机系统的复位方式有上电自动复位和手动按键复位。
本设计采用手动按键复位,该复位方式同样具有上电自动复位功能。
图3.1单片机最小系统原理图
3.2按键电路
当按下按键后,对应的引脚就会被拉低,再经过扫描后,则会获得键值,然后执行键功能程序。
当按下不同的按键时
,单片机就会执行不同的功能程序。
电路图如下图3.2所示:
图3.2
3.3显示电路
本次设计采用3个LED数码管。
一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个为小数点发光二极管。
当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。
在用数码管显示时,有静态和动态两种选择,这次设计采用了LED动态显示,并用P0、P1、P2口驱动显示。
为了保护各段LED不被损坏,还需外加限流电阻。
但由于P0口没有上拉电阻,因此在P0口还需要外接上拉电阻才能输出高电平,这里我们会使用8个4.7k的电阻作为上拉电阻。
电路图如下图3.3所示:
图3.3
3.4引脚控制说明
P0口:
P0.0—7、P1口:
P1.0—7、P2口P2.0—7对应三个数码管的a、b、c、d、e、f、g段和小数点位;P0用来控制数码管十位的显示,P2用来控制数码管个位的显示,P1则控制小数点后一位的显示,P3.2、P3.3、P3.4分别接按键用来实现控制。
4系统软件设计
4.1程序流程图
本次系统的软件部分主要包括:
主函数、初始化函数、显示函数、定时器0中断服务函数、外部中断0中断服务函数、拆数函数等。
工作流程包括:
秒表的初始化、按键检测程序、开始计时、计时程序、显示程序、暂停计时、秒表清零、延时程序等8个部分。
系统程序流程图如下图4.1所示:
图4.1
4.2秒表的初始化
首先根据程序流程图进行秒表的初始化。
第一步:
将I/O口P3全写一,为秒表的控制输入做好准备;第二步:
将数码管全部置零,使它处于秒表计时的初始状态;第三步:
将工作寄存器R0至R2以及30H初始化,留待后面的计时程序备用;第四步:
将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;第五步:
开总中断允许和定时器0中断允许。
等初始化完成后,就开始进入之后的按键扫描程序。
4.3按键扫描检测程序
轮流检测开始计时(P3.4)、暂停计时(P3.5)、秒表清零(P3.6)三个按键。
若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。
4.4开始计时
若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。
此动作完成后,返回按键检测程序,等待操作者的下一次指令。
4.5计时程序
定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。
程序跳转至中断服务程序TIME0。
由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。
因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。
4.6显示程序
将数码管的段选码放在数表TAB中。
每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。
.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。
之后将30H中的数置零,中断返回。
若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。
在秒位进位子程序SECOND中,由于要用到累加器A,因此先将其推入堆栈保护。
将R1中的值(初值为10)送入A,然后自加1。
.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。
若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。
完成后,弹出ACC和PSW,子程序返回。
十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。
4.7暂停计时
若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。
此动作完成后,返回按键检测程序,等待操作者的下一次指令。
4.8秒表清零
若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。
并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。
此动作完成后,返回按键检测程序,等待操作者的下一次指令。
5调试过程
5.1程序调试
(1)打开keil软件,单击project,新建一个工程,命名为shuzimiaobiao并保存。
(2)在弹出的窗口左边选择AT89C52单片机,然后新建并并保存文件shuzimiaobia.c。
(3)在projectworkspace中选中sourcegroup1,单机右键,在弹出的菜单中选择addfilestogroup‘sourcegroup1’,在弹出的对话框中双击刚才保存的shuzimiaobiao.c,将其添加到新建的工程中。
(4)将程序代码写入文件shuzimiaobiao.c中,完成后单击buildtarget按钮进行编译,结果如图5.1所示。
图5.1软件调试结果图
5.2硬件调试
首先将程序下载到单片机中,过程如下
(1)单机optionsfortarget按钮,在弹出对话框的第二个标签页中设置晶振为11.0592MHz,在第三个标签页中的createHEXfile选项前打勾,完成后再次编译并生成HEX文件
(2)打开STC_ISP_V483软件,选择刚才生成的HEX文件并下载到单片机中
其次开始单人秒表模式的调试
(1)按下key1键,秒表开始计时,数码管正常显示,如图5.2.1所示
图5.2.1开始计时图
(2)按下key2键,停止计时,如图5.2.2所示
图5.2.2停止计时图
(3)按下key3键,秒表复位,如图5.2.3所示
图5.2.3复位图
至此,系统的调试过程就完成了。
但是这个过程并不是一帆风顺的,在程序调试的过程中,
6总结
这次的课程设计使我进一步巩固了书本上的知识,做到了学以致用。
通过STC下载软件、ALTIUMDISIGNER,VISIO和编译软件KEIL使我进一步了解了基于单片机的设计制作过程。
其中最为困难的是编程部分,我们上网找了好多资料,虽然经过自己的修改,但还是有很多功能不能实现。
总结经验的时候我们得出这样的结论,学习应该学以致用,有目的的去学习,如果学了不用等于没学。
其次,要理论联系实际,这样才会取得事半功倍的效果。
参考文献
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:
国防工业出版社,2004
[2]伟福LAB6000系列单片机仿真实验系统使用说明书
[3]阎石.数字电路技术基础(第五版).北京:
高等教育出版社,2006
[4]康华光。
模拟电路技术基础(第五版)。
北京:
高等教育出版社,2005
[6]郭天祥.新概念51单片机C语言教程-入门、提高、开发、拓展全攻
北京:
电子工业出版社,2010.
[7]张兰红.单片机原理及应用.北京:
机械工业出版社,2012.
附录
附录原理图一
附录二源程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
ucharnum=0;
uintsec,a,b;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay1ms(uintx)
{
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
voiddisplay(ucharqian_c,ucharbai_c,ucharshi_c,ucharge_c)//显示程序
{
dula=0;
P0=table[qian_c];//显示第一位
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay1ms(5);
dula=0;
P0=table[bai_c];//显示第二位
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delay1ms(5);
P0=table[shi_c];//显示第三位
dula=1;
dula=0;
wela=0;
P0=0xfb;
wela=1;
wela=0;
delay1ms(5);
P0=table[ge_c];//显示第四位
dula=1;
dula=0;
wela=0;
P0=0xf7;
wela=1;
wela=0;
delay1ms(5);
}
voidkeyscan()
{
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
while(!
key1);
TR0=1;
}
}
if(key2==0)
{
delay1ms(10);
if(key2==0)
{
while(!
key2);
TR0=0;
}
}
if(key3==0)
{
delay1ms(10);
if(key3==0)
{
while(!
key3);
sec=0;
TR0=0;
}
}
}
voidmain()
{
num=0;
TMOD=0x01;//定时器工作在方式1
ET0=1;
EA=1;
TH0=(65536-56320)/256;//对TH0TL0赋值
TL0=(65536-56320)%256;//使定时器0.01秒中断一次
while
(1)
{
display(sec/1000,sec%1000/100,sec%100/10,sec%10);
keyscan();
}
}
voidt0()interrupt1//定时中断服务函数
{
TH0=(65536-56320)/256;//对TH0TL0赋值
TL0=(65536-56320)%256;//重装计数初值
sec++;//每过10mstcnt加一
if(sec==10000)
sec=0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 C52 数字 秒表 设计