资源描述
西南民族大学机器人创新团队
单片机设计报告
项目名称: 电子计时秒表
项目成员:(第五组) XX XXX
XXX
负责人员: XXX
完成时间:2014年 01 月 15 日
报告成绩:
摘要:本次设计的是一个能显示计时状态和结果的秒表,它是基于定时器/计数器设计的一个简单的电子计时秒表。该系统采用STC89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器,使得系统能够实现四位LED显示,显示时间为00.00~99.99秒,计时精度为0.01秒,能正确地进行计时,并显示计时状态和结果 ,软件代码采用C语言编写程序,包括显示程序,初始化子程序,键盘扫描程序,中断服务程序,延时子程序等,并在keil中调试运行,硬件系统利用单片机电路板强大的功能来实现,操作简单且视觉效果易于观察。
关键字: STC89C52RC单片机、LED码管显示、电子计时秒表、C语言
电子计时秒表设计
一、任务要求:
1、设计任务:设计并制作一个电子计时秒表。
2、设计要求:
l 利用定时计数器来实现电子秒表功能;
l 秒计时精确到0.01秒:
l 设计启动、暂停、清零按钮;
l 4位数码管显示。
二、成员组成及分工:
XXX:负责本设计的前期资料搜集与整体布局;
X X:负责程序的编写与调试;
XXX:负责后期程序的改进及硬件操作;
三、方案论证:
1.显示部分:
采用LED数码管动态显示。对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,且可靠性也较低。而对于动态显示方式,上述缺点即可很好的避免,且视觉效果甚佳。
2.硬件介绍:
2.1 STC89C52简介
STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,STC89C52单片机在电子行业中有着广泛的应用。
STC89C52单片机参数如下:
1、兼容MCS51指令系统
2、4KB可反复擦写(大于1000次)Flash ROM;
3、32个双向I/O口;
4、128*8bitRAM;
5、2个16位可编程定时/计数器中断;
STC89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。在本设计中详细端口分布见图
STC89C52端口图
2.2 四位数码管
四位数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图2-2所示。通过控制各个LED的亮灭来显示数字。
四、软件方案设计:
选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、键盘扫描程序、中断服务程序、延时子程序,系统软件流程图图如图所示:
开始
系统初始化
数码管显示
按键的扫描及处理
主函数
计时是否到99.99秒
回零重新计时
否
系统流程图
五、设计原理:
利用STC89C52RC单片机的定时器,使其能精确计时。利用中断系统使其实现启动、暂停以及复位清零的功能,P1.0、P1.1、P1.2三个按钮分别实现启动/暂停/清零功能。
计时器采用T0中断实现,定时溢出中断周期为1ms,当溢出中断后向CPU发出溢出中断请求,每发出10次中断请求就对10ms位(即最后一位)加一,达到100次就对100ms位加一,以此类推,直到99.99s为止。
再看按键的处理。三个按键采用中断的方法,设置外部中断0脉冲边沿触发方式,当按键按下时便会触发中断,从而实现启动/暂停和复位。
开始键、暂停键、以及清零键使用了外部中断,所以需要连到单片机的P1.0、P1.1和P1.2接口上。
显示电路由四位数码管组成,采用动态显示方式。设计框图如下图:
按键
开关
STC89C52
单片机
数码管
显示
图2秒表设计框图
六、设计源程序:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa,qian,bai,shi,ge;
sbit LED1=P3^4;
sbit LED2=P3^5;
sbit LED3=P3^7;
sbit LED4=P3^6;
sbit s1=P1^0; //启动键
sbit s2=P1^1; //暂停键
sbit s3=P1^2; //清零键
sbit rd=P1^4;
uchar code table[]={ //不带点的编码表
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
uchar code table1[]={ //带点的编码表
0x40,0x79,0x24,0x30,0x19,
0x12,0x02,0x78,0x00,0x10};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init();
void display(uchar qian,uchar bai,uchar shi,uchar ge);
void keyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!s1);
TR0=1; //打开定时器,开始计时
}
}
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
TR0=0; //关闭计时器,停止计时
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
qian=0;
bai=0;
shi=0;
ge=0; //显示清零
}
}
}
void main()
{
init();
while(1)
{
keyscan();
display(qian,bai,shi,ge);
}
}
void display(uchar qian,uchar bai,uchar shi,uchar ge)
{
LED1=0;
P0=table[qian];
delay(1);
LED1=1;
LED2=0;
P0=table1[bai];
delay(1);
LED2=1;
LED3=0;
P0=table[shi];
delay(1);
LED3=1;
LED4=0;
P0=table[ge];
delay(1);
LED4=1;
}
void init()
{
TMOD=0x01; //设置定时器0工作方式1
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; // 高低8位赋初值
EA=1; //打开总中断
ET0=1; //打开定时器T0
//TR0=1;
}
void timer0() interrupt 1 //中断子程序
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
aa++;
if(aa==10)
{
aa=0;
ge++; //溢出10次,0.01s位加一
if(ge==10)
{
ge=0;//0.01s位到10了,清零,0.1s位加一
shi++;
if(shi==10)
{
shi=0; //0.1s位到10了,清零,1s位加一
bai++;
if(bai==10)
{
bai=0;//1s位到10了,清零,10s位加一
qian++;
}
}
}
}
}
七、单片机显示效果图:
启动/清零图
暂停/计时图
八、测试结果分析:
通过以上的分析,我们可知所设计的电子计时秒表,既可以进行启动记时,也可以通过按键来实现暂停,并能通过复位清零键来使秒表记时器复位,以实现重新记时,在记时到99秒时,秒表会自动清零,需要重新按开始键才可以。
九、设计心得体会:
本次题目要求我们用定时器/计数器设计一个简单的电子计时秒表,能显示计时状态和结果。要求进行电路实验或仿真,并使用C语言进行程序的开发。
能力拓展训练使得我们又一次熟悉了已学的C语言和先学的单片机的应用。通过这次能力拓展使我们的动手能得到了提升,而且学会了团队合作完成一项任务。
在做这次设计之前,通过查找相关资料,我们已经对本次设计有了一定的了解,在查询了大量资料和组内讨论之后,我们最终能成功的做出了本次设计。但是在此过程中发现有很多知识点没有掌握,基础知识不可缺少,此外一些核心的高层次的知识点更是不可忽视。在完成设计的过程中我意识到,任何时候任何事情,闭门造车是不可取的,要一直坚持向周围的师长、同学求教,以取得新的思考途径的重要性。
这次的能力拓展训练主要运用C语言编程和单片机原理等方面的知识,充分锻炼了我们运用所学知识解决实际问题的能力。通过查阅资料,温习课本知识和学习笔记,我深刻领悟到各课程之间的联系,并初步掌握了综合运用课本知识分析问题的方法。本次简单秒表的设计采用单片机与微机原理编程的方法,达到了预期目的,完成了设计的任务要求。
这次设计充分检验了我们自学的能力。这次的设计任务涉及到了许多软件方面的知识。通过查阅资料,我不但巩固了所学的课本知识,而且学会了熟练使用许多软件。通过这次拓展训练,我也意识到自己的不足,比如说不能很好控制秒表计时的时间间隔很是棘手才得以解决等等,以后还是要多多学习相关知识,虚心请教他人才能取得长足的进步,是自己的专业知识技能更近一步,使自己在以后的学习工作有能力胜任相关的工作要求。
十、参考文献:
[1]郭天祥,51单片机C语言教程-入门、提高开发、拓展全攻略,电子工业出版社,2009.1
[2]徐淑华, 程退安等.单片微型机原理及应用. 哈尔滨:哈尔滨工业大学出版社. 2005.1
[3]李群芳,单片微型计算机与接口技术,电子工业出版社,2008
展开阅读全文