《基于51单片机的秒表设计1》由会员分享,可在线阅读,更多相关《基于51单片机的秒表设计1(15页珍藏版)》请在金锄头文库上搜索。
1、实实训训报报告告 题 目 秒表系统的设计 年 级 专 业 班 级 学 号 姓 名 地 点 日 期 2 目录目录 一,设计目标3 二,系统硬件设计4 三,系统软件设计7 四,系统调试与设计结果12 五,单片机实训小结13 3 设计目标设计目标 近年来随着科学技术的发展,单片机的应用范围越来越广,也成为很多专 业的必修课。本文简单阐述了基于单片机的秒表设计。本设计的主要特点是计 时精度达到 0.01 秒,可以用来为各种体育竞赛计时等。 本设计的数字秒表采用 AT89 才 51 单片机为主要器件,利用其定时器的原理, 结 LED 数码管以及外部中断电路来设计计时器。将软硬件结合起来,使得系统 能实现
2、 099.99 秒的计时,计时精度位 0.01 秒。当按下一个键 1 时,开始显示 数字,即计时开始,再按下键 2 时,暂停计时并显示刚才的结果,这个时候如 果再按键 1,则继续计时,也就是显示的数字包括刚才的数据。按下键 3 时, 数据清零。 4 系统硬件设计系统硬件设计 1、1 总体方案的设计 数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。 本设计中用单片机和数码管组成数字秒,力求结构简单。 设计中包括硬件电路的设计和系统程序的设计。硬件电路主要有主控制器、 控制按钮与显示电路组成。主控制器采用单片机 AT89 才 51,显示电路采用四 位共阴极数码管显示计时时间。 本设
3、计利用 AT89 才 51 单片机的定时器,使其能精确计时。利用键盘上的独立 按键实现开始计时和暂停以及清零。P0 口输出段码数据,P2.0P2.2 连上译码 器作为位选。设计的基本要求是正确性。 计时器采用 T0 中断实现,定时溢出中断周期为 1ms,当溢出中断后向 CPU 发出溢出中断请求,每发出 10 次中断请求就对 10ms 位(即最后一位)加一, 达到 100 次就对 100ms 位加一,以此类推,直到 99.99s 为止。 1.2 单片机的选择 本设计在选取单片机时,充分借鉴了许多成型产品使用单片机的经验。并 根据自己的实际情况,选用了 ATMEL 公司的 AT89 才 51。 A
4、TMEL 公司的 89 系列单片机以其卓越的性能、完善的兼容性、快捷便利的 电擦写操作、低廉的价格完全替代了 87C51/62 和 8751/52,低电压、低功耗, 有 DIP、PLCC、QFP 封装,是目前性能最好、价格最低、最受欢迎的单片机之一。 AT89 才 51 为 40 脚双列直插封装的 8 位通用微处理器,采用工业标准的 C51 内核,在内部功能及管脚排布上与通用的 8XC52 相同,其主要用于汇聚调 整时的功能控制。功能包括对汇聚主 IC 内部寄存器、数据 RAM 及外部接口等功 能部件的初始化,汇聚调整控制,汇聚测试图控制等。 单片机外部结构 (1)主电源引脚 Vss 和 Vc
5、c:Vss 接地,Vcc 正常操作时为+5V 接地。 外接晶振引脚 XTAL1 和 XTAL2 a、XTAL1 内部振荡电路反相放大器的输出端,是外接晶体的一个引脚。当采用 5 外部振荡时,此引脚接地。 b、XTAL2 内部振荡电路反相放大器的输出端,是外接晶体的的另一端。当采用 外部振荡时,此引脚接外部振荡源。 (2)控制或与其他电源复用引脚 a、RST/VPD 当振荡器运行是,在此引脚上出现两个机器周期的高电平(由低 到高跳变) ,将使单片机复位在 Vcc 掉电期间,此引脚可接上备用电源,由 VPD 向内部提供备用电源, 以保持内部 RAM 中的数据。 b、ALE/PROG 正常操作时为
6、ALE 功能(允许地址锁存)提供把地址的低字节 锁存到外部存储器,ALE 引脚以不变的频率(振荡器频率的 1/6)周期性的发出 正脉冲信号。因此,它可以用作对外输出的时钟,或用于定时目的。 c、PSEN 外部程序存储器读选通信号输出端,在从外部程序存储取指令(或 数据)期间,PSEN 在每个机器周期内两次有效。 d、EA/Vpp 内部程序存储器和外部程序存储器选择端。当 EA/Vpp 位高电平时, 访问内部程序存储器,当 EA/Vpp 为低电平时,则访问外部程序存储器。对于 EPROM 编程期间,此引脚上加 21VEPROM 编程电源(Vpp) 。 (3)a、P0 口(P0.0P0.7)是一个
7、 8 位漏极开路型双向 I/O 口,在访问外部 存储器时,它是分时传送的低字节地址和数据总线,P0 口能以吸收电流的方式 驱动八个 LSTTL 负载。 b、P1,P3 口(P1.0P1.7)是一个带有内部上拉电阻的 8 位准双向 I/O 口。能 驱动四个 LSTTL 负载。 c、P2 口(P2.0P2.7)是一个带有内部上拉电阻的 8 位准双向 I/O 口,在访问 外部存储器时,它输出高 8 位地址。P2 口可以驱动四个 LSTTL 负载。 1.3 显示电路的选择与设计 对于数字显示电路,通常采用液晶显示或数码管显示。对于一般的段式液 晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可
8、视性差,不 适合远距离观看;对于具有驱动电路和单片机接口的液晶显示模块,一般多采 用并行接口,对单片机的接口要求较高,占用资源多;另外,AT89S52 单片机 本身没有专门的液晶驱动接口。而数码管作为一种主动显示器件,具有亮度高、 6 响应速度快、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜 间或者远距离操作。因此在本设计中,我们采用 7 段数码管作为显示介质。 数码管显示可以分为静态显示和动态显示两种。由于本设计需要采用四位 数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂,所以采用动 态显示。 动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式 称为位扫描
9、。通常各位数码管的段选线相应并联在一起,由一个 8 位的 I/O 口 控制;各位的公共阴极位选线由另外的 I/O 口线控制。动态方式显示时,各数 码管轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位 数码管并送出相应的段码,在另一时刻选通另一数码管,并送出相应的段码, 依次规律循环,即可以使各位数码管显示将要显示的字符,虽然这些字符是在 不同时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短 就可以给人同时显示的感觉。 1.4 系统总体电路的设计 系统总体电路如下图所示 AT89 才 51 单片机为主电路的核心部分,各个电路均与单片机相连,由单 片机统筹协调各个电
10、路的运行工作。 显示电路由四位数码管组成,采用动态显示方式,因此有 8 位段控制和 4 位位控制,8 位段接控制接 P0 口,P0.0P0.7 分别控制数码管的 a b c d e f g dp 显示。 7 系统软件设计系统软件设计 2.1 主程序设计 本系统程序主要模块由主程序、定时中断服务程序、程序组成。主程序主要是 对定时器赋初值,开总中断、定时器溢出中断。 2.2 定时器 T0 中断服务程序 当 T0 一处后,向 CPU 发出中断请求信号。CPU 跳转到定时中断程序执行,当中 断次数为 2 时为 10ms。具体流程如下: 定时器中断入口重置计数初值 中断次数加 1 中断次数等于 2?中
11、断次数清零,0.01 秒位加 1 0.01 秒位到 10?0.01 秒位 清零,0.1 秒位加 10.1 秒位到 10?0.1 秒位清零,1 秒位加 1 1 秒位到 10?1 秒位清零,10 秒位加 110 秒位到 10?10 秒位清零中断返回。 2.3 程序清单 #include #define uint unsigned int #define uchar unsigned char void delay(uint); /延时程序 sbit k1=P34;/定义开始键 8 sbit k2=P35;/定义暂停键 sbit k3=P36;/定义清零键 sbit dula=P26; sbit w
12、ela=P27; uchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f; uchar tt,i,j,k,l; void display(uchar i,uchar j,uchar k,uchar l); /数码管显示数 void main() tt=0; i=0; j=0; k=0; l=0;/数码管显示 0 TMOD=0x01; /设置定时器为模式 1 TH0=(65536-5000)/256; /给定时器赋定时初值 TL0=(65536-5000)%256; EA=1; /开总中断 ET0=1; TR0=
13、0; while(1) if(k1=0) /判断是否按下开始键 delay(10); /消抖 if(k1=0) 9 TR0=1; if(k2=0) /判断是否按下暂停键 delay(10); /消抖 if(k2=0) TR0=0; if(k3=0) /判断是否按下清零键 delay(10); if(k3=0) i=0;j=0;k=0;l=0; TR0=0; /清零 display(i,j,k,l); /数码管显示 void delay(uint z) uint x,y; for(x=100;x0;x-) for(y=z;y0;y-); /延时 void exter0() interrupt 1
14、 /定时器溢出中断 TH0=(65536-5000)/256; /重装计时初值 10 TL0=(65536-5000)%256; tt+; if(tt=2) tt=0; i+; /溢出两次,0.01 秒位加 1 if(i=10) i=0; j+; /0.01 秒位到 10,0.1 位加 1 if(j=10) j=0; k+; /0.1 秒位到 10,1 秒位加 1 if(k=10) k=0; l+;/1 秒位到 10,10 秒位加 1 if(l=10) l=0;/10 秒位到 10,清零 void display(uchar i,uchar j,uchar k,uchar l) 11 dula
15、=1; P0=tablei; /显示数值 dula=0; wela=1; P0=0xf7;/0.01 秒位显示 wela=0; delay(1); dula=1;/数值显示 P0=tablej; dula=0; wela=1; P0=0xfb; /0.1 秒位显示 wela=0; delay(1); dula=1; /数值显示 P0=tablek|0x80; /始终在 1 秒位后面显示小数点 dula=0; wela=1; P0=0xfd; /1 秒位显示 wela=0; delay(1); dula=1; P0=tablel; /数值显示 dula=0; wela=1; P0=0xfe; /10 秒位显示 wela=0; delay(1); 12 系统调试与设计结果系统调试与设计结果 利用开发板显示结果: 通过 STC-ISP V29 Beta5,将程序与开发板连接起来,此时,数码管前 4 位 均显示 0.按下键盘上独立键中的 P34 键,开始计时。按下 P35 键,即暂停计 时。此时若继续按下 P