基于单片机的多功能秒表设计.docx
- 文档编号:5177749
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:22
- 大小:927.52KB
基于单片机的多功能秒表设计.docx
《基于单片机的多功能秒表设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的多功能秒表设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于单片机的多功能秒表设计
光电信息综合设计报告
多功能秒表设计
院(系)名称
信息工程学院
专业名称
光电信息科学与工程
姓名
学号
0
指导教师
2018年5月20日
摘要
近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。
本文阐述了基于单片机的多功能电子秒表设计。
本设计主要特点是具有倒计时功能,还可以按圈计时,而且误差在0.01s,是各种体育竞赛的必备设备之一,另外硬件部分设置了查看按键,还具备有定时提醒功能,让你时时刻刻都掌握时间。
本设计的数字电子秒表系统采用STC89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、数码管以及外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现4位LED显示,显示时间99s内,能正确地进行计时,同时能记录10组时间,并在暂停是对时间进行查询。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务延时程序等,并在KEIL中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键字:
单片机;数字电子秒表;提醒
1总体设计方案
多功能秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。
本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。
设计中包括硬件电路的设计和系统程序的设计。
其硬件电路主要有主控制器,时钟功能,倒计时,计时与显示电路和回零、启动和停表电路等。
主控制器采用单片机STC89C52,显示电路采用共阳极LED数码管显示计时时间。
本设计利用STC89C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。
利用中断系统使其能实现开始暂停的功能。
P0口输出段码数据,P2口作位扫描输出,P1^0,P1^1,P1^2,P1^3,P1^4口接5个按钮开关,分别实现开始、记录、清除,方向和调整。
电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。
硬件电路图按照图1-1进行设计。
STC89C52
单片机控制系统
四位数码管
灯光提示系统
控制开关
图1-1智能秒表显示硬件电路基本原理图
根据要求知道秒表设计主要实现的功能是倒计时、计时和时钟显示。
因此设置了五个按键和四位数码管显示时间,五个按键中,按键1是开始按钮:
可控制系统的开关;按键2为记录按键:
在秒表模式运行时,可保存数据,在其他状态时还有复用功能;按键3为清除键:
在系统计时时可以复位时间,在查看数据、调整时间时,还有其他功能;按键4为方向键,调节时间计时时的正反向;按键5为调整按键:
调整和设置时间。
利用这五个建来实现秒表的全部功能,而四个位数码管则能显示最多99秒内的计时。
计时采用定时器T0中断完成,定时溢出中断周期为10ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到2次就对十毫秒位进行加一,就是进位0.01,然后按时钟的取值范围进行进位。
再看按键的处理。
这六个键可以采用中断的方法,也可以采用扫描的方法来识别。
设计中包括硬件电路的设计和系统程序的设计。
其硬件电路主要有主控制器,显示电路和回零、启动、查看、停表电路等。
主控制器采用单片机STC89C52,显示电路采用共阳极LED数码管显示计时时间,五个按键均采用触点式按键。
2硬件设计
2.1单片机的选择
本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了STC公司的STC89C52。
STC公司的89系列单片机以其卓越的性能、完善的兼容性、快捷便利的电擦写操作,低廉的价格、超强的加密功能,完全替代87C51/62和8751/52,低电压、低电源、低功耗,有DIP、PLCC、QFP封装,有民用型、工业级、汽车级、军品级等多种温度等级,是当今世界上性能最好、价格最低、最受欢迎的八位单片机。
STC89C52R为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
单片机的外部结构
STC89C52单片机采用40引脚的双列直插封装方式。
图2-1为引脚排列图,40条引脚说明如下:
主电源引脚Vss和Vcc
①Vss接地
②Vcc正常操作时为+5伏电源
外接晶振引脚XTAL1和XTAL2
①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。
当采用外部振荡器时,此引脚接地。
②XTAL2内部振荡电路反相放大器的输出端。
是外接晶体的另一端。
当采用外部振荡器时,此引脚接外部振荡源。
图2-1单片机引脚图
控制或与其它电源复用引脚RST/VPD,ALE/
,
和
/Vpp
①RST/VPD当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。
②ALE/
正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。
对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(
功能)
③
外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,
在每个机器周期内两次有效。
同样可以驱动八LSTTL输入。
④
/Vpp、
/Vpp为内部程序存储器和外部程序存储器选择端。
当
/Vpp为高电平时,访问内部程序存储器,当
/Vpp为低电平时,则访问外部程序存储器。
对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。
输入/输出引脚P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。
①P0口(P0.0-P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
②P1口(P1.0-P1.7)是一个带有内部提升电阻的8位准双向I/O口。
能驱动(吸收或输出电流)四个LSTTL负载。
③P2口(P2.0-P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。
P2口可以驱动(吸收或输出电流)四个LSTTL负载。
④P3口(P3.0-P3.7)是一个带有内部提升电阻的8位准双向I/O口。
能驱动(吸收或输出电流)四个LSTTL负载。
STC89C52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
CPU是单片机的核心部件。
它由运算器和控制器等部件组成。
本设计采用STC的STC89C52微处理器,主要基于以下几个因素:
①STC89C52为51内核,仿真调试的软硬件资源丰富。
②性价比高,货源充足。
③功耗低,功能强,灵活性高。
④DIP40封装,体积小,便于产品小型化。
⑤为EEPROM程序存储介质,1000次以上擦写周期,便于编程调试。
工作电压范围宽:
2.7V-6V,便于交直流供电。
2.2显示电路的选择与设计
对于数字显示电路,通常采用液晶显示或数码管显示。
对于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性差,不适合远距离观看;对于具有驱动电路和单片机接口的液晶显示模块(字符或点阵),一般多采用并行接口,对单片机的接口要求较高,占用资源多;另外,STC89C52单片机本身无专门的液晶驱动接口。
而数码管作为一种主动显示器件,具有亮度高、响应速度快、防潮防湿性能好、温度特性极性、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜间或是远距离操作。
因此,本设计的显示电路采用7段数码管作为显示介质。
数码管显示可以分为静态显示和动态显示两种。
由于本设计需要采用四位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂。
所以采用动态显示。
图2-2显示电路基本原理图
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。
通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阳极位选线由另外的I/O口线控制。
动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
2.3按键电路的选择与设计
本设计中有五个按键,分别实现开始、记录、清除,方向和调整功能。
这五个键可以采用中断的方法,也可以采用查询的方法来识别。
系统采用的是扫描的查询方法来识别按键的五个按键均采用低电平有效,具体电路连接图如图2-3所示。
当按键没有按下时,单片机的I/O口直接连接电源,因此需要接上拉电阻来进行限流,本设计中选取阻值为2kΩ的电阻作为上拉电阻,根据计算可知此时的灌电流为2.5mA看STC89C52的资料得知次电流在安全范围内,符合安全设计要求。
图2-3按键电路
2.4时钟电路的选择与设计
单片机的时钟信号用来提供单片机内各种微操作的时间基准,89S52片内设有一个由反向放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入和输出端,89S52单片机的时钟信号通常用两种电路形式得到:
内部振荡方式与外部振荡方式。
外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。
对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。
时钟发生器把振荡频率两分频,产生一个两相时钟信号P1和P2供单片机使用。
P1在每一个状态S的前半部分有效,P2在每个状态的后半部分有效。
本设计采用的内部振荡方式,内部振荡方式所得的时钟信号比较稳定,实用电路中使用较多。
本设计系统的时钟电路如图1-5所示。
只要按照图2-4所示电路进行设计连接就能使系统可靠起振并能稳定运行。
图中,电容器C1 、C2起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。
但在时钟电路的实际应用中一定要注意正确选择其大小,并保证电路的对称性,尽可能匹配,选用正牌的瓷片或云母电容,如果可能的话,温度系数尽可能低。
本设计中采用大小为30pF的电容和12MHz的晶振。
图2-4内部振荡电路
2.5系统总电路的设计
系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。
系统总电路图如图2-5所示。
STC89C52单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。
STC89C52单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。
图2-5系统总电路图
复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。
按键电路与单片机的端口连接可以由用户自己设定,本设计中按键均设为低电平有效。
显示电路由四位数码管组成,采用动态显示方式,因此有8位段控制端和4位位控制端,八位段控制接P0口,P0.0~P0.7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,STC89C52的P0口没有集成上拉电阻,高电平的驱动能力很弱,所以需要接上拉电阻来提高P0的高电平驱动能力,对应的数码管导通显示。
通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。
3软件设计
3.1程序设计思想
本设计采用了C语言编写,汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。
汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。
使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
C语言具有下列特点:
1.C是中级语言
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3.C语言功能齐全
C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。
4.C语言适用范围大
C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。
3.2主程序设计
本系统程序主要模块由主程序、子程序、定时中断服务程序。
其中主程序是整个程序的主体。
可以对各个中断程序进行调用。
协调各个子程序之间的联系。
系统(上电)复位后,进入主程序,主程序流程图如图3-1所示。
开始
倒计时
正计时
倒计时模式
闹钟模式
秒表模式
时间到
计时等于0
计时大于99s
报警提示
报警提示
报警提示
返回
返回
返回
图3-1主程序流程图
3.3中断程序设计
现在方案中采用了定时中断T0。
CPU在响应中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理。
例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。
待服务结束,再继续执行原来较低级的中断服务程序。
而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套。
,合理分配中断对本设计的实现是至关重要的。
另外由于数字式电子秒表的最小精度位10ms。
定时器T0的定时周期也为10ms,为了使电子秒表暂停键按下后CPU能马上进行数据调整
3.4程序模块设计:
#include
#defineuintunsignedint
#defineucharunsignedchar//宏定义
sbitk1=P1^0;//开始按键定义
sbitk2=P1^1;//复位按键定义
sbitk3=P1^2;//切换按键定义
sbitp1=P2^7;//位选定义
sbitp2=P2^6;//位选定义
sbitp3=P2^5;//位选定义
sbitp4=P2^4;//位选定义
sbitdp=P0^7;//“:
”定义
inta,b,c,d;//数码管显示变量
longmiao=0;//时间变量
intmoshi=0;kaishi=0;count=0;//变量
ucharcodeLEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//数码管显示段码
/*****延时子程序*****/
voidDelay(uinti)//显示延迟
{
while(i--);
}
voidqudou(void)//去抖延迟
{inti;
for(i=0;i<2400;i++);
}
/*****显示子程序*****/
voidxianshi()
{p1=0;p2=0;p3=0;p4=0;//位选关闭
P0=LEDData[a];//发送数据段码
p1=1;p2=0;p3=0;p4=0;//位选开
Delay(300);//显示延迟
p1=0;p2=0;p3=0;p4=0;//位选关闭
P0=LEDData[b];//发送数据段码
if(moshi==1)
dp=0;
else
dp=1;
p1=0;p2=1;p3=0;p4=0;//位选开
Delay(300);//显示延迟
p1=0;p2=0;p3=0;p4=0;//位选关闭
P0=LEDData[c];//发送数据段码
p1=0;p2=0;p3=1;p4=0;//位选开
Delay(300);//显示延迟
p1=0;p2=0;p3=0;p4=0;//位选关闭
P0=LEDData[d];//发送数据段码
p1=0;p2=0;p3=0;p4=1;//位选开
Delay(300);//显示延迟
p1=0;p2=0;p3=0;p4=0;//位选关闭
}
voidshuju()//数据转换,转换成数码管显示代码
{if(moshi==0)
{a=miao/1000;
b=miao%1000/100;
c=miao%1000%100/10;
d=miao%1000%100%10;
}
else
{a=miao/60/10;
b=miao/60%10;
c=miao%60/10;
d=miao%60%10;
}
}
voidkey()//按键扫描
{if(k1==0)//开始按键按下
{qudou();//去抖延迟
if(k1==0)//确认按下
{kaishi=!
kaishi;//开始暂停切换
}while(k1==0);//退出
}
if(k2==0)//复位按键按下
{qudou();//去抖延迟
if(k2==0)//确认按下
{miao=0;//时间变成0
kaishi=0;//并且暂停
}while(k2==0);//退出
}
if(k3==0)//切换按键按下
{qudou();//去抖延迟
if(k3==0)//确认按下
{moshi=!
moshi;//显示模式切换
}while(k3==0);//退出
}
}
/*****主函数*****/
voidmain(void)
{TMOD=0x01;//定时器中断开启
TH0=0xb1;//20ms中断一次
TL0=0xe0;
EA=1;
ET0=1;
TR0=1;
while
(1)//无限循环
{key();//按键扫描
shuju();//数据转换
xianshi();//数码管显示
}
}
voidtime0(void)interrupt1//定时器中断
{TH0=0xb1;
TL0=0xe0;
if(kaishi==1)
{count++;//count计数器
if(count==50)//计数50次,50*20ms=1000ms=1S
{count=0;//计数器清零
miao++;//秒加1
if(miao>5999)miao=0;
}
}
}
4多功能秒表的安装与调试
4.1软件的仿真与调试
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件,它可以仿真、分析(SPICE)各种模拟器件和集成电路。
该软件的主要特点总结后有以下四点:
①实现了单片机仿真和SPICE电路仿真相结合的功能。
②支持目前主流单片机系统的仿真。
③提供了软件调试功能,并可以与Keil联合仿真调试。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
在电子领域中也起到了很大的作用,它的出现仿真不需要先焊接电路,可以先仿真调试通过后在焊电路,节省了不少在硬件调试上所花的时间。
ProteusISIS的工作界面是一种标准的Windows界面,如图4-1所示。
它包括标题栏、主菜单、状态栏、标准工具栏、绘图工具栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口等十几个工具,方便了使用者的使用。
ProteusISIS绘制原理图的操作与Protel99se绘制原理图的操作基本相同,在这里就不再作赘述。
下面拿本设计中的一个仿真例子作简述说明。
运行ProteusISIS后,绘制病床呼叫系统的原理图。
首先打开已经画好的proteusDSN文件,双击图中的AT89S52芯片,就弹出一个窗口,在ProgramFile项中通过路径选择在WAVE中生成的HEX文件,双击选中后确定,这样仿真图中的AT89S52芯片就已经读取了本设计中的HEX文件。
单击“三角形按钮”进行仿真。
通过对仿真结果的观察来对程序进行修改,最终使程序到达设计要求。
4.2硬件的安装与调试
按照之前设计好的数字电子秒表原理图,详细计算系统中各个元件的参数,选择相应器件,制作实际电路板。
由于考虑到万能板大小的问题及元件之间连线的方便,在焊接元器件前必须考虑元件的布局然后进行实际操作。
制作好的电路板可以用万用表(200欧姆档)的红、黑表笔测试电路板的每条走线,当其电阻非常小时,证明走线没有断开,当其电阻很大时,证明该条走线断了,应该重新走线,使电路板在电气上得到正确地连接。
选用万用表的20K欧姆档,检测电路中是否存在短路。
因为系统采用的是共阳极数码管作为显示
路,必须确保数码管的公共端接的是高电平。
图4-1ProteusISIS的工作界面
4.3实物调试
图4-2实物正面图
图4-2实物背面图
图4-2实物调试图
结论
本设计的多功能秒表是由STC89C52单片机、共阳数码显示管、控制按键、三极管等器件构成的,设有四位计时显示,开始、记录、清零、方向、调整按键以及一个系统整机复位按钮。
计时精度能到达10ms,能调看记录的计时时间,设计精简,使用简单易懂。
系统设计合理,线路简单、功能先进,性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 多功能 秒表 设计