基于52单片机的数字秒表设计Word格式.doc
- 文档编号:5220269
- 上传时间:2023-05-04
- 格式:DOC
- 页数:17
- 大小:116.50KB
基于52单片机的数字秒表设计Word格式.doc
《基于52单片机的数字秒表设计Word格式.doc》由会员分享,可在线阅读,更多相关《基于52单片机的数字秒表设计Word格式.doc(17页珍藏版)》请在冰点文库上搜索。
1.1总体方案的设计
硬件电路的设计要遵循以下原则:
(1)在性价比满足应用系统要求的基础上,选择更可靠、更熟悉的单片机,缩短研制周期。
(2)尽可能选择较成熟的典型应用电路,以提高系统的可靠性。
(3)单片机内部的资源与外部扩展资源应在满足应用系统设计要求的基础上留有余地,为进一步升级和扩展其功能提供方便。
(4)应充分结合软件方案统筹考虑硬件结构,通常硬件功能较完善,其相应的软件就简单,但硬件成本较高;
而硬件功能略低,其相应的软件就复杂。
实际中应尽量以软件替代硬件来降低成本。
(5)整个系统的相关器件应尽可能做到性能匹配,如电平、速度的匹配等。
(6)充分考虑整个系统的抗干扰设计,如选择具有抗干扰设计的单片机并充分筛选芯片与器件,在电路中采取隔离和屏蔽措施等。
根据以上原则,通过分析与比对,我们选用较熟悉的具有内部程序存储器的AT89S52单片机作为主控电路,选用四位共阴极的7段数码管作为显示电路来组成硬件电路。
其基本原理图如下所示
AT89S52
单片机
控制开关
四位数码管
位控制
在硬件电路中,利用AT89S52单片机的定时器作精确的定时,利用数码管对其进行显示;
控制按钮利用外部中断0使其实现启动、外部中断1使其实现暂停的功能,设置中断为边沿触发方式,P0口输出段码数据,P2.0~P2.1连上译码器作为位选;
计时器采用T0中断实现,定时溢出中断周期为1ms,当溢出中断后向CPU发出溢出中断请求,每发出10次中断请求就对10ms位(即最后一位)加一,达到100次就对100ms位加一,以此类推,直到99.99s为止。
1.2单片机的选择
本设计在选取单片机时,在充分查阅资料并对各种单片机有一个初步了解的基础上选用了ATMEL公司的AT89S52。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,它支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
AT89S52单片机采用40脚的DIP封装,其引脚图如下所示。
P1.0VCC
P1.1P0.0
P1.2P0.1
P1.3P0.2
P1.4P0.3
P1.5P0.4
P1.6P0.5
P1.7P0.6
RST/VPDP0.7
P3.0RXDEA/VPP
P3.1TXDALE/PROG
P3.2INT0PSEN
P3.3INT1P2.7
P3.4T0P2.6
P3.5T1P2.5
P3.6WRP2.4
P3.7RDP2.3
P2.2
XTAL2
XTAL1P2.1
VSSP2.0
1.3显示电路的设计
对于数字显示电路而言,通常采用LCD显示或LED显示。
对于一般的段式LCD,需要专门的驱动电路,而且可视性差;
对于具有驱动电路和单片机接口的LCD显示模块,一般多采用并行接口,对单片机的接口要求较高,占用资源多;
另外,AT89S52单片机本身没有专门的LCD驱动接口。
而LED数码管作为一种主动显示器件,具有结构简单、亮度高、响应速度快、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜间或者远距离操作。
因此在本设计中,我们采用7段数码管作为显示介质。
数码管显示可以分为静态显示和动态显示两种。
由于本设计需要采用四位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂,所以采用动态显示。
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。
通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;
各位的公共阴极位选线由另外的I/O口线控制。
动态方式显示时,各数码管轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管并送出相应的段码,在另一时刻选通另一数码管,并送出相应的段码,依次规律循环,即可以使各位数码管显示将要显示的字符,虽然这些字符是在不同时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
显示电路如下图所示
段
驱
动
位驱动
1.4系统总体电路的设计
系统采用AT89S52单片机为主电路的核心部分,各个电路均与单片机相连,由单片机统筹协调各个电路的运行工作。
开始键和暂停键使用了外部中断,所以需要连到单片机的P3.2和P3.3引脚上,这两个I/O口的第二功能是单片机的外部中断0端口和外部中断1端口。
显示电路由四位数码管组成,采用动态显示方式,因此有8位段控制和4位位控制,8位段接控制接P0口,P0.0~P0.7分别控制数码管的abcdefgdp显示,位控制接在P2.0和P2.1两个口,在通过一个2—4译码器实现位控制。
系统总体电路如下图所示
第二章软件设计
待硬件电路接线完成后,通常可先编写简单的测试程序对硬件电路进行测试,排除硬件电路设计中存在的错误。
然后根据设计任务的要求确定系统程序的整体结构,尽可能采用模块化程序设计的方法,将任务划分为相对独立的功能模块,明确各模块的功能、时间顺序和相互关系,并画出各程序模块的流程图,根据流程图逐一编写程序,最后将各个模块连接成完整的程序。
2.1主程序设计
本系统程序主要模块由主程序、定时中断服务程序、外部中断0服务程序和外部中断1服务程序组成。
其中主程序是整个程序的主体。
可以对各个中断程序进行调用。
协调各个子程序之间的关系。
主程序主要是设置定时器的工作模式,对定时器赋初值,开总中断、两个外部中断以及定时器溢出中断。
并设置外部中断为脉冲边沿触发方式。
2.2中断程序设计
中断是通过硬件来改变CPU的运行方向的。
计算机在执行程序的过程中,当出现CPU以外的某种情况时,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。
中断之后所执行的相应的处理程序通常称之为中断服务或中断处理子程序,原来正常运行的程序称为主程序。
调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的,而何时调用中断服务程序事先却无法确定,因为中断的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。
本方案中用到了三个中断:
外部中断0、外部中断1和定时器T0溢出中断。
按CPU在响应中断时的处理顺序,先处理高级中断,后处理低级中断,若有多个同级中断时,则应按自然优先顺序处理。
(1)外部中断0服务程序
外部中断0服务程序结合外部P3.2键实现数字秒表的启动功能。
流程如下图所示。
外部中断0入口
启动定时器T0
TR0=1
中断返回
(2)外部中断1服务程序
外部中断1服务程序结合外部P3.3键实现数字秒表的停止功能。
流程图如下所示。
外部中断1入口
停止计时
TR1=0
中断返回
(3)定时器T0中断服务程序
当T0溢出后,向CPU发出中断请求信号。
CPU跳转到定时中断程序执行,具体流程图如下。
定时器中断入口
重装计数初值
中断次数加1
中断次数到10?
中断次数清零,0.01秒位加一
0.01秒位到10?
0.01秒位清零,0.1秒位加一
0.1秒位到10?
0.1秒位清零,1秒位加一
1秒位到10?
1秒位清零,10秒位加一
10秒位到10?
10秒位清零
2.3程序清单
#include<
reg52.h>
unsignedintdatatable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//显示码值
unsignedinti,j,k,l,count;
voiddelay(unsignedintz)//延时程序
{
unsignedintx,y;
for(x=z;
x!
=0;
x--)
for(y=110;
y!
y--);
}
voidmain()
TMOD=0x01;
//设置定时器为模式1
TH0=(65536-1000)/256;
//给定时器赋定时初值
TL0=(65536-1000)%256;
EA=1;
//开中断
EX0=1;
EX1=1;
ET0=1;
IT0=1;
//设置外部中断为脉冲边沿触发方式
IT1=1;
while
(1)//数码显示
{
P2=0x03;
P0=table[i];
delay
(1);
P2=0x02;
P0=table[j];
P2=0x01;
P0=(table[k]+0x80);
P2=0x00;
P0=table[l];
};
voidex0()interrupt0//外部中断0
TR0=1;
//开定时器,开始计数
voidex1()interrupt2//外部中断1
TR0=0;
//停止计数
voidtimer0()interrupt1//定时器T0溢出中断
//重装计数初值
count++;
//溢出中断次数加一
if(count==10)
count=0;
i++;
//溢出10次,0.01s位加一
if(i==10)
{
i=0;
//0.01s位到10了,清零,0.1s位加一
j++;
if(j==10)
{
j=0;
//0.1s位到10了,清零,1s位加一
k++;
if(k==10)
{
k=0;
//1s位到10了,清零,10s位加一
l++;
}
}
}
}
第三章系统调试
3.1程序编译
(1)输入源程序
打开keil软件,输入源程序,输入时应以西文方式输入字母和符号,且中文注释前要加分号。
(2)对源程序进行编译和纠错
根据自动编译提供的错误信息逐条纠正错误,直至编译信息提示“错误(0)”,编译结束。
(3)确定调试方案
在调试程序前一定要认真分析源程序,明确各功能程序运行的预期结果。
然后结合源程序应达到的结果,确定出如何通过某些关键参数和实验现象检验程序运行结果正确与否。
(4)调试程序
调试程序时首先要明确程序的具体功能,对程序做认真分析。
程序运行后,观察有无显示,时钟是否工作,运行结果是否正确。
若运行结果不正确,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。
通过反复调试,发现并排除软件与硬件存在的各类问题,以满足系统设计的预期目的。
在编译调试通过以后,生成hex文件以待仿真之用。
3.2程序仿真
对程序的仿真我们采用英国Labcenter公司开发的电路分析与实物仿真软件Proteus进行,它可以仿真、分析各种模拟器件和集成电路。
在仿真时,我们首先打开已经画好的ProteusDSN文件,右键点击图中的AT89S52芯片,就弹出一个菜单,选择添加文件,查找已经生成的hex文件并添加进去,这样仿真图中的AT89S52芯片就已经读取了本设计中的hex文件,然后进行仿真,仿真图如下所示。
第四章结束语
本次设计的数字秒表其预期目的基本达到,各项测试结果还比较令人满意,系统设计注重基础,系统的阐述了设计过程。
以单片机为核心对硬件和软件的设计做了深入的探索,各部分都实现了其功能。
通过本次课程设计,我从中学习到许多知识,也对以前所学知识进行了巩固,并成功使用了keil、Proteus两款软件,使理论知识系统化、实用化。
同时也认识到,作为新时代的大学生,在竞争如此激烈的社会环境里,动手实践和创新能力显得尤为重要,通过这次课程设计我还发现自己还存在诸多方面的不足。
理论知识终究不是实践能力,在实践面前一系列问题就会突然被发现,但是没有扎实的理论知识实践能力就大大削弱,二者可谓缺一不可,要注重理论与实践相结合,并且要认认真真去做每一件事,不要怕麻烦,遇到不懂的问题,就应该积极主动的向老师同学请教,不断提高自己的能力。
参考文献
1李朝青.单片机原理及接口技术(第3版).北京:
北京航空航天大学出版社,2006
2赵建领.51系列单片机开发宝典.北京:
电子工业出版社,2007
3朱清慧,张凤蕊,翟天嵩,王志奎.Proteus教程——电子线路设计、制版与仿真.北京:
清华大学出版社,2008
4耿永刚,陶国正.单片机与接口应用技术.上海:
华东师范大学出版社,2008
5孙惠芹.单片机项目设计教程.北京:
电子工业出版社,2009
6杨欣,王玉凤,刘湘黔.电子设计从零开始.北京:
清华大学出版社,2005
7余永权.ATMEL89系列单片机应用技术.北京:
北京航空航天大学出版社,2002
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 52 单片机 数字 秒表 设计