基于51单片机的秒表方案设计书1.docx

上传人:b****6 文档编号:3021447 上传时间:2022-11-17 格式:DOCX 页数:10 大小:104.25KB
下载 相关 举报
基于51单片机的秒表方案设计书1.docx_第1页
第1页 / 共10页
基于51单片机的秒表方案设计书1.docx_第2页
第2页 / 共10页
基于51单片机的秒表方案设计书1.docx_第3页
第3页 / 共10页
基于51单片机的秒表方案设计书1.docx_第4页
第4页 / 共10页
基于51单片机的秒表方案设计书1.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于51单片机的秒表方案设计书1.docx

《基于51单片机的秒表方案设计书1.docx》由会员分享,可在线阅读,更多相关《基于51单片机的秒表方案设计书1.docx(10页珍藏版)》请在冰豆网上搜索。

基于51单片机的秒表方案设计书1.docx

基于51单片机的秒表方案设计书1

题目秒表系统的设计

年级专业

班级学号

姓名

地点

日期

 

一,设计目标………………………………………………………………3

二,系统硬件设计…………………………………………………………4

三,系统软件设计…………………………………………………………7

四,系统调试与设计结果…………………………………………………12

五,单片机实训小结………………………………………………………13

 

设计目标

近年来随着科学技术的发展,单片机的应用范围越来越广,也成为很多专业的必修课。

本文简单阐述了基于单片机的秒表设计。

本设计的主要特点是计时精度达到0.01秒,可以用来为各种体育竞赛计时等。

本设计的数字秒表采用AT89才51单片机为主要器件,利用其定时器的原理,结LED数码管以及外部中断电路来设计计时器。

将软硬件结合起来,使得系统能实现0~99.99秒的计时,计时精度位0.01秒。

当按下一个键1时,开始显示数字,即计时开始,再按下键2时,暂停计时并显示刚才的结果,这个时候如果再按键1,则继续计时,也就是显示的数字包括刚才的数据。

按下键3时,数据清零。

 

系统硬件设计

1、1总体方案的设计

数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。

本设计中用单片机和数码管组成数字秒,力求结构简单。

设计中包括硬件电路的设计和系统程序的设计。

硬件电路主要有主控制器、控制按钮与显示电路组成。

主控制器采用单片机AT89才51,显示电路采用四位共阴极数码管显示计时时间。

本设计利用AT89才51单片机的定时器,使其能精确计时。

利用键盘上的独立按键实现开始计时和暂停以及清零。

P0口输出段码数据,P2.0~P2.2连上译码器作为位选。

设计的基本要求是正确性。

计时器采用T0中断实现,定时溢出中断周期为1ms,当溢出中断后向CPU发出溢出中断请求,每发出10次中断请求就对10ms位(即最后一位)加一,达到100次就对100ms位加一,以此类推,直到99.99s为止。

1.2单片机的选择

本设计在选取单片机时,充分借鉴了许多成型产品使用单片机的经验。

并根据自己的实际情况,选用了ATMEL公司的AT89才51。

ATMEL公司的89系列单片机以其卓越的性能、完善的兼容性、快捷便利的电擦写操作、低廉的价格完全替代了87C51/62和8751/52,低电压、低功耗,有DIP、PLCC、QFP封装,是目前性能最好、价格最低、最受欢迎的单片机之一。

AT89才51为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8XC52相同,其主要用于汇聚调整时的功能控制。

功能包括对汇聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,汇聚调整控制,汇聚测试图控制等。

单片机外部结构

(1)主电源引脚Vss和Vcc:

Vss接地,Vcc正常操作时为+5V接地。

外接晶振引脚XTAL1和XTAL2

a、XTAL1内部振荡电路反相放大器的输出端,是外接晶体的一个引脚。

当采用外部振荡时,此引脚接地。

b、XTAL2内部振荡电路反相放大器的输出端,是外接晶体的的另一端。

当采用外部振荡时,此引脚接外部振荡源。

(2)控制或与其他电源复用引脚

a、RST/VPD当振荡器运行是,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,

以保持内部RAM中的数据。

b、ALE/PROG正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部存储器,ALE引脚以不变的频率(振荡器频率的1/6)周期性的发出正脉冲信号。

因此,它可以用作对外输出的时钟,或用于定时目的。

c、PSEN外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,PSEN在每个机器周期内两次有效。

d、EA/Vpp内部程序存储器和外部程序存储器选择端。

当EA/Vpp位高电平时,访问内部程序存储器,当EA/Vpp为低电平时,则访问外部程序存储器。

对于EPROM编程期间,此引脚上加21VEPROM编程电源(Vpp)。

(3)a、P0口(P0.0~P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。

b、P1,P3口(P1.0~P1.7)是一个带有内部上拉电阻的8位准双向I/O口。

能驱动四个LSTTL负载。

c、P2口(P2.0~P2.7)是一个带有内部上拉电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。

P2口可以驱动四个LSTTL负载。

1.3显示电路的选择与设计

对于数字显示电路,通常采用液晶显示或数码管显示。

对于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性差,不适合远距离观看;对于具有驱动电路和单片机接口的液晶显示模块,一般多采用并行接口,对单片机的接口要求较高,占用资源多;另外,AT89S52单片机本身没有专门的液晶驱动接口。

而数码管作为一种主动显示器件,具有亮度高、响应速度快、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜间或者远距离操作。

因此在本设计中,我们采用7段数码管作为显示介质。

数码管显示可以分为静态显示和动态显示两种。

由于本设计需要采用四位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂,所以采用动态显示。

动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。

通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。

动态方式显示时,各数码管轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管并送出相应的段码,在另一时刻选通另一数码管,并送出相应的段码,依次规律循环,即可以使各位数码管显示将要显示的字符,虽然这些字符是在不同时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。

1.4系统总体电路的设计

系统总体电路如下图所示

AT89才51单片机为主电路的核心部分,各个电路均与单片机相连,由单片机统筹协调各个电路的运行工作。

显示电路由四位数码管组成,采用动态显示方式,因此有8位段控制和4位位控制,8位段接控制接P0口,P0.0~P0.7分别控制数码管的abcdefgdp显示。

系统软件设计

2.1主程序设计

本系统程序主要模块由主程序、定时中断服务程序、程序组成。

主程序主要是对定时器赋初值,开总中断、定时器溢出中断。

2.2定时器T0中断服务程序

当T0一处后,向CPU发出中断请求信号。

CPU跳转到定时中断程序执行,当中断次数为2时为10ms。

具体流程如下:

定时器中断入口重置计数初值中断次数加1中断次数等于2?

中断次数清零,0.01秒位加10.01秒位到10?

0.01秒位清零,0.1秒位加10.1秒位到10?

0.1秒位清零,1秒位加11秒位到10?

1秒位清零,10秒位加110秒位到10?

10秒位清零中断返回。

2.3程序清单

#include

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uint)。

//延时程序

sbitk1=P3^4。

//定义开始键

sbitk2=P3^5。

//定义暂停键

sbitk3=P3^6。

//定义清零键

sbitdula=P2^6。

sbitwela=P2^7。

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f}。

uchartt,i,j,k,l。

voiddisplay(uchari,ucharj,uchark,ucharl)。

//数码管显示数

voidmain()

{

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=0。

while

(1)

{

if(k1==0)//判断是否按下开始键

{

delay(10)。

//消抖

if(k1==0)

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)。

//数码管显示

}

}

voiddelay(uintz)

{

uintx,y。

for(x=100。

x>0。

x--)

for(y=z。

y>0。

y--)。

//延时

}

voidexter0()interrupt1//定时器溢出中断

{

TH0=(65536-5000)/256。

//重装计时初值

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,清零

}

}

}

voiddisplay(uchari,ucharj,uchark,ucharl)

{

dula=1。

P0=table[i]。

//显示数值

dula=0。

wela=1。

P0=0xf7。

//0.01秒位显示

wela=0。

delay

(1)。

dula=1。

//数值显示

P0=table[j]。

dula=0。

wela=1。

P0=0xfb。

//0.1秒位显示

wela=0。

delay

(1)。

dula=1。

//数值显示

P0=table[k]|0x80。

//始终在1秒位后面显示小数点

dula=0。

wela=1。

P0=0xfd。

//1秒位显示

wela=0。

delay

(1)。

dula=1。

P0=table[l]。

//数值显示

dula=0。

wela=1。

P0=0xfe。

//10秒位显示

wela=0。

delay

(1)。

}

 

系统调试与设计结果

利用开发板显示结果:

通过STC-ISPV29Beta5,将程序与

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1