51单片机数字秒表设计.docx
《51单片机数字秒表设计.docx》由会员分享,可在线阅读,更多相关《51单片机数字秒表设计.docx(24页珍藏版)》请在冰豆网上搜索。
![51单片机数字秒表设计.docx](https://file1.bdocx.com/fileroot1/2023-1/9/e364f2bf-68d2-4055-b1a7-108201a42e3c/e364f2bf-68d2-4055-b1a7-108201a42e3c1.gif)
51单片机数字秒表设计
单片机系统
课
程设成绩评定表
计
设计课题
指导教师意见:
成绩:
签名:
年月日
单片机系统
课程设计
目录
第1章数字式秒表的设计介绍⋯⋯⋯⋯⋯⋯⋯⋯⋯5
1.1设计任务及功能要求说明⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5
1.2工作原理及其方法⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5第2章数字式秒表硬件系统的设计⋯⋯⋯⋯⋯⋯⋯7
2.1数字式秒表硬件系统各模块功能简要介绍⋯⋯⋯7
2.1.1AT89S52简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.7
2.1.2时钟电路⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.8
2.1.3键盘电路⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯8
2.1.4复位电路⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..9
2.1.5驱动及显示电路⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯9
2.1.6单片机下载口电路⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10
2.2数字式秒表的硬件系统设计图⋯⋯⋯⋯⋯⋯⋯11.
2.2.1电路原理图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.11.
2.2.2PCB图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯11.第3章数字式秒表软件系统的设计⋯⋯⋯⋯⋯⋯⋯.11.
3.1数字式秒表使用单片机资源情况⋯⋯⋯⋯⋯⋯11
3.2主程序流程图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12.
3.3中断服务程序流程图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12
3.4显示程序流程图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯14
3.5软件系统程序清单⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..14第4章设计总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯15
4.1数字式秒表的设计结论及使用说明⋯⋯⋯⋯⋯15
4.2程序仿真与结果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.15
4.3误差分析及解决方法⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯16..总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯16参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯17附录⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯17
第1章数字式秒表的设计介绍
1.1设计任务及功能要求说明
由单片机接收小键盘控制递增计时,由LED显示模块计时时间,显示格式为XX(分):
XX(秒).XX,精确到0.01s的整数倍。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
使用单片机AT89S52作为主要控制芯片,以四位一体共阳极数码显示管通过三极管驱动作为显示部分,设计一个具有特定功能的数字式秒表。
该数字式秒表上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该数字式秒表通过按键控制可实现开始计1时、暂停计时、连续计时、清零和停止功能。
1.2工作原理及其方法
使用AT89S52单片机作为核心控制部件,采用12M晶体振荡器及微小电容构成振荡电路;采用S8550作为数码管的驱动部分;用两个四位一体共阳极或共阴极数码显示管作为显示部分,构成数字式秒表的主体结构,配合独立式键盘和复位电路完成此秒表的复位、计时、连续、清零、停止各项功能。
对于时钟,它有两方面的含义:
一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:
一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。
LED数码显示器有如下两种连接方法:
共阳极接法:
把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻
与输入端相连。
共阴极接法:
把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。
每个发光二极管的阳极通过电阻与输入端相连。
键盘部分方案:
键盘控制采用独立式按键,每个按键的一端均接地,另一端直接和P1口相连,在按键和P1口之间通过10K电阻与+5V电源相连。
键盘通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单,比较适合按键较少或操作速度较高的场合,这种独立式接口的应用很普遍。
显示部分方案:
显示部分采用动态显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位
选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示是利用人眼视觉暂留特性来实现显示的。
事实上,显示器上任何时刻只有一个数码管有显示。
由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。
为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
本设计可采用P0口直接驱动八段数码管显示。
此方案成本低,而且单片机的I/O口占用较少,可以节约单片机接口资源,而且功耗更低。
此电路采用单片机的P0口作为数码显示管的段控,采用P2口作为数码管的位控。
8个独立式键盘分别接在单片机的P1口上,以及其他部分构成数字式秒表的硬件电路。
通过编写程序使用单片机的定时计数器,以及软件延时,中断资源来实现秒计时和相关控制。
此数字式秒表的硬件整体结构如图1-1所示。
图1-1数字式秒表的硬件结构图
第2章数字式秒表硬件系统的设计
2.1数字式秒表硬件系统各模块功能简要介绍
2.1.1AT89S52简介
(1)与MCS-51产品相兼容;
(2)具有8KB可改写的Flash内部程序存储器,可写/擦1000次;
(5)256字节内部RAM;
(6)32根可编程I/O口;
(7)3个16位定时器/计数器。
(8)8个中断源;
(9)可编程中串行口;
(10)低功耗空闲和掉电方式。
它的价格便宜,功能强大,能耗低。
很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。
其芯片引脚图如图2-1所示。
图2-1单片机AT89S52引脚图
2.1.2时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
在AT89S52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚TXAL2,在芯片的外部通过这两个引角跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
此电路采用12MHz的石英晶体。
时钟电路如图2-2:
图2-2时钟电路
2.1.3键盘电路
本设计使用独立式键盘接在单片机的P1口上但通过软件赋予其中三个按键功能,其中S2是计时开始按键,第二功能为停止,S3为计时暂停按键,第二功能为继续计时按键,S4是清零按键。
注意使用时只有在暂停状态下才能继续计时,只有在停止状态下才能清零,在停止时不能继续计时,在暂停时不能清零。
键盘电路如图2-3:
2.1.4复位电路
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。
RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
复位操作有上电自动复位和按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。
按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。
在本设计中采用了按键电平复位方式,其复位电路如图2-4所示:
2.1.5驱动及显示电路
数码管实际上是由二极管构成发光二级管正常工作时,其两端正向压降约为
1.6v,正向电流约为10mA,为了使数码管达到一定的亮度而又不至于由于电流过大而损坏,我们使用三极管S8550作为数码管的驱动,同时在P0口和P2口上
串上470欧姆的电阻。
此处使用四位一体共阴极数码管,由于驱动电路决定了此处共阴极数码管和共阳极数码管均可以采用而且均采用共阳极代码来编写显示程序,具体电路如图2-5所示。
图2-5数码管驱动及显示电路图
2.1.6单片机下载口电路下载口主要是一个十芯的座子,可以通过使用USB下载线对单片机进行程序下载。
方便整个软件的设计,也能让我们使用起来更加方便。
图2-6单片机下载口电路图
2.2数字式秒表的硬件系统设计图
2.2.1电路原理图
此处电路原理图以及PCB原理图的绘制均使用protel99软件完成,Protel99是基于Win95/WinNT/Win98/Win2000的纯32位电路设计制版系统。
Protel99提供了一个集成的设计环境,包括了原理图设计和PCB布线工具,集成的设计文档管理,支持通过网络进行工作组协同设计功能。
根据硬件接线要求设计绘制电路原理图及PCB。
具体电路图见附录A与附录B。
2.2.2PCB图
PCB图设计时,首先要使元器件尽量少,这样既可以节约材料,又可以是布线更加短,减少干扰,同时还应注意尽量减少线路之间的寄生电容和电感,布线时需要将线宽设置得比较宽这样可以提高腐蚀电路板时的成功率,焊盘大小也要设置的比较大,这样在腐蚀环节和焊接环节比较容易成功。
不易出现短线的现象和焊盘剥离的现象。
双面布线时芯片和针脚多的元件需将焊接点置于底层,这样才能比较方便的焊接。
制作电路板PCB图见附录B。
第3章数字式秒表软件系统的设计
3.1数字式秒表使用单片机资源情况本次电子钟设计除了了使用单片机工作所必须的硬件资源(如连接晶振的引脚XTAL1和XTAL2,复位引脚RESE)T外,对单片机的硬件资源还做了具体的安排。
(1).P0口:
P0.0-P0.7作为数码管显示器的段控。
(2).P1口:
P1.0-P1.3作为独立式键盘的输入端。
(3).P2口:
P2.0-P2.7分别控制数码管LED0-LED7的位控码驱动。
(4).定时/计数器:
使用定时器0工作方式2实现数字式计数器的运行。
(5).专用寄存器:
定时器控制寄存器TCON,通过设置该寄存器TR0位的状态来控制定时/计数器0的启动/停止;中断允许寄存器IE,通过设置该寄存器EA/ET0位的状态来设置定时/计数器0中断允许/禁止;定时/计数器工作方式寄存器TMO,D设置定时/计数器0的工作方式。
3.2主程序流程图
图3-1主程序流程图
3.3中断服务程序流程图
图3-2中断服务程序流程图
3.4显示程序流程图
图3-3显示程序流程图
3.5软件系统程序清单
按照流程图应用软件keil汇编语言编程实现秒表功能。
程序见附录C。
第4章设计总结
4.1数字式秒表的设计结论及使用说明
通过设计和调试,数字式秒表能顺利完成各项功能。
上电或复位后显示“P.”提示符,此时按1键便可开始计时。
在计数状态下,按下2键即可实现暂停,再次按下2键即可实现继续计数,在计数状态下按下1键,实现计数停止,在停止状态下按下3键,便可实现计数清零。
计数状态下按下清零键,无效。
4.2程序仿真与结果
我们是在Keil软件里编写程序并编译通过才能被硬件电路所应用。
Keil的功能比较强大但还是有一定的缺点。
他编译过程中他只能检查出所编写的语法错误,所以我们一步一步的去在硬件电路里仿真去达到我们所设计要求的功能。
经仿真修改和完善均已达到设计要求.“P.”显示,电子钟准备状态与电子钟自动运行状态的仿真如下图所示。
(1).“P.”显示如图4-1所示。
图4-1“P”显示图
(2).数字式秒表准备状态仿真的显示如图4-2所示
图4-2准备计时状态
(3).数字式秒表运行状态的仿真如图4-3所示
图4-3
4.3误差分析及解决方法
我们可以发现数字式秒表计数一段时间的我们的标准时间相比较出现了误差,所设计的数字式秒表比我们的标准时间要慢,而且相比较的时间越长他的时差越大。
经过分其主要原因与硬件和软件都有关。
软件原因:
我们从外部中断请求有效到转向中断区入口地址所需的机器周期数来计算中断时间,51系列单片机最短响应时间为3个机器周期。
在一般情况下中断响应时间通常无需考虑,但在精确定时的应用场合需知道中断响应时间,以保证定时的精确控制。
硬件原因:
单片机的时钟信号是由外部的振荡电路所提供,在芯片的外部通过接XATL1与XATL2这两个引角跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
因为电子原件不可以就有我们所设计的那么理想(电容的容量,振晶的输出频率)所以会造成我们的时间准确。
针对这样的问题我们就能只能从上述两个方面入手去解决。
软件方面我们可以通过计算设计子程序去减少响应的时差。
硬件部分我们可以采用一些稳定,精确度比较高的电子元件去完善,但是在最后调试出的还是有误差但我尽可能的减少差误差接近理想。
总结:
同过这几天的实验设计,让自己对AT89S52单片机有了更深的了解,其具有计时开始、暂停及清零功能,计时最大值为59分
59.99秒,计时精度为0.01秒。
利用Proteus和Keil软件进行了仿真,达到了预期的效果。
整体电路的计时精度高,电路结构简单,抗干扰能力强,具有广泛的应用前景。
作为仅仅上了一个学期单片机课后就看这些课程设计题目,感觉压力比较大,毕竟自己还是初学者,对各方面都不是了解的很透彻,因为都看上去都比较有难度,熟悉了单片机的内容后觉得还是可以做的出来了,一开始不知道从哪里开始下手,于是问了一些人上网查了点资料,有些是c编还有些是汇编,于是参考了一下,也和别人一起探讨了一下,在不断地求知中前进,最终编成了一个完整的程序,是自己对与多练有了跟进一步的认识,明白动手的重要性,努力走的更远,尽自己的力为社会做一点贡献,也为自己创造一个未来!
参考文献
[1]李朝青.单片机原理及接口技术[M].北京:
北京航空航天大学出版社,1988.[1]LiZhaoqing.SCMTheoryandInterfaceTechnology[M].Beijing:
BeijingAerospaceUniversityPress,1988.
[2]李勋等.单片机实用教程[M].北京:
北京航空航天大学出版社,2000
[2]LiXunandsoon.microcontrollerPracticalGuide[M].Beijing:
BeijingAerospaceUniversityPress,2000
[3]王幸之等.单片机应用系统抗干扰技术[M].北京:
北京航空航天大学出版社,1999
[3]Wangxingtheother.microcomputerapplicationsysteminterferencetechnology[M].Beijing:
BeijingAerospaceUniversityPress,1999
[4]何为民.低功耗单片微型计算机系统设计[M].北京:
北京航空航天大学出版社,1994
[4]Whatthepeople.low-powersingle-chipmicro-computersystemdesign
[M].Beijing:
BeijingAerospaceUniversityPress,1994
[5]李杏春等.8090单片机原理及实用接口技术[M].北京:
北京航空航天大学出版社,1996
[5]LiXingchunsuch.8090SCMTheoryandpracticalinterfacetechnology[M].Beijing:
BeijingAerospaceUniversityPress,1996
附录A原理图
ilteT
niivsoveR
fottehS
:
yBnrbaw订r)ddabD.
rebmuN
订修后最最系图统(系管码管码数料资资业作术技机片单
li:
eF
izeSB
口载下
1DEL
路电灯水流
2
DDV
1CCV
2DEL
2DEL
2NOC
12
源电
BSU3J
12
73P
63P
CC
V
6
7
8
9
01
6
1
7
8
IPS
3
01
EW
5
1
51P
2
3
TE
R
4
71P
5
61P
3
VCC
kR.47K
V
2B03P2N
J1X212CNO
帽路短
O
NESP92
P/ELA03
0P
10P
20P
30P
40P
50P
60P
70P
02P
12P2P
32P
42P
52P
62P
72P
D
X
D
TXD
/LAEPPESNAP
2
89TS
A
01P
11P
21P
31P
41P
51P
61P
71P
ITN
0TIN
1T
0T
P
/VAE
1X
2
TESE
R
RDRW
O
8DDEL
70P74R
6PR
5PR53P
074
4PR43P
074
3PR33P
23P
20P74R
附录B程序清单
;项目名称:
秒表;
;设计者:
高金科;
;设计日期:
2013年12月;
;LED数码管显示器设定;
;P0.7---P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,a;
;P2.7-P2.0位控线从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0;)
;显示缓冲区设定从左至右依次为78H,79H,7AH,7BH,7CH,7DH,7EH,7FH;;独立式键盘设定与功能;
;8个按键S1至S8分别依次接在P1.0至P1.7口线;
;K0的功能为复位
;K1的功能为启动/停止(标识符为22H.0当它为1时启动,为0时停止)
;K2的功能为暂停/继续(标识符为22H.1当它为1时暂停,为0时继续)
;K3的功能为清零
;常数表格;
;DISBH(系统提示符P.字型代码序号表);
;TAB(共阳数码管字型代码表);
;子程序;
;TIME_1M(S定时1ms子程序);
;KEY(键扫描子程序);
;KEYCHULI(P1口数据处理子程序);
;DISP(数码管显示子程序);
;DL(2毫秒延时子程序);
;ADD01(入口地址为R0);存储器内容的安排;;堆栈栈底7FHH;;
;20H作为按键标志(20H.0——20H.7分别对应的是按键K1——K8);
;专用寄存组1,用在显示子程序中;系统起始程序区
ORG0000H
START:
LJMPMAIN
ORG000BH
LJMPPDJW
;系统监控程序区
ORG0030H
MAIN:
MOVPSW,#00H
MOVSP,#7FH;确立堆栈区
;RAM区首地址
;RAM区单元个数
;系统初始化后提示符“P.”字符
MOVR0,#20H
MOVR7,#96
MOVTMOD,#01H
SETBEA
SETBET0
ML:
MOV@R0,#00H
INCR0
DJNZR7,ML
TSF:
MOVDPTR,#DISBH代码表首地址
MOVR5,#08H
MOVR0,#78H
DISPTSF:
CLRA
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCDPTR
DJNZR5,DISPTSF
KEY0:
LCALLDISP
LCALLKEY
JB
20H.0,
K1
JB
20H.1,
K2
JB
20H.2,
K3
LJMP
KEY0
MOV
7DH,
#12H
MOV
7FH,
#10H
MOV
78H,
#00H
MOV
79H,
#00H
K01:
MOV7AH,#12H
KEY00:
LCALLKEYLCALLDISPJB20H.2,K3LJMPKEY00
K1:
JB
22H.1,KEY0
;如果此时为暂停状态,本次按键K1无效
CPL
22H.0
JB
22H.0,K01
;高电平则计时
CLR
TR0
;低电平则停止
LCALLDISP
LJMP
KEY00
;从零开始计时
MOV
7BH,
#00H
MOV
7CH,
#00H
MOV
7EH,
#00H
MOV
7FH,
#00H
LCALL
DISP
MOV
TH0,
#0D8H
MOV
TL0,
#0F0H
SETBTR0
LJMPKEY0
K2:
JB22H.0,K21状态则此次按键无效LJMPKEY0
K21:
CPL22H.1JB22H.1,K22SETBTR0LJMPKEY0
K22:
CLRTR0LCALLDISPLJMPKEY0
K3:
JB22H.0,KEY0MOVR0,#79HLCALLCLR00MOVR0,#7CHLCALLCLR00MOVR0,#7FHLCALLCLR00LJMPKEY0
;启动定时器
;判断秒表是否启动,如不是启动
;继续计时
;暂停秒表
;只有当停止是,清零键才有效
;秒表清零
PUSH
A