基于单片机的秒表系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的秒表系统设计
组员:
一.设计内容:
1.设计精度为0.1s的秒表系统
2.设置启动、暂停、清零按钮
3.秒表的最长计时长度为9:59:9,超过此长度,则报警
二.方案设计
1.总体方案
本设计是基于AT89C51单片机设计的,我们是分为几个模块来设计的。首先对秒表的硬件进行了设计,它包括时钟电路设计、控制电路设计以及外部显示电路。利用89C51单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。计时精度为0.1s。其次是软件进行了设计,软件系统采用汇编语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等。
这次的试验要求进行计时并且在数码管上显示时间,先要基本了解硬件内在结构,确定用p2并行端口进行数码管控制输入,使用P1.6,P1.5,P1.4 ,P1.3进行选择0.1秒位,秒位,十位秒位,分钟位,以P3.0为开始控制,P3.1为停止控制,以P3.2为清零控制。
本次实验设计的基本思路是要求借助AT89C51单片机做出一个0-9.59.9s 的秒表从十位秒到0.1位秒数这些计时的位数是存在一个内嵌的结构,就是0.1秒位满足条件然后进行跳位使秒位加一的过程,当0.1s到0.9s时该位自动清零并且秒位加一,秒位达到9时也自动清零并向十秒位加一。当计数超过范围是所有数码管全部清零重新计数。其次开始控制,停止控制,清零控制等功能,我们采用蜂鸣器进行提示,该信号由P1.0输出由7406非门与外加电源驱动,通过一个延时子程序加以控制。最后就是根据硬件的条件进行编程,要求软硬件相互兼容。
2.硬件设计
本系统中,硬件电路主要有晶振电路,复位电路,显示电路以及一些按键控制电路。
(1)晶体振荡电路
利用12分频的晶振的一个机器周期为一微妙,通过循环延时产生0.1秒的延时,通过XTAL1和XTAL2外接晶体振荡器构成内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。
振荡电路
(2)复位电路
采用上电加按键复位电路,也就是手动复位,上电后,由于电容充电,使RET持续一段高电平时间,当单片机运行时,按下复位键也能使RET持续一段时间的高电平,从而实现上电加开关复位的操作。
上电加复位电路
(3)按键控制电路
我们只需要实现秒表的启动、暂停、清零、复位功能。用四个按键可以实现,因此采用按键电路。利用部分P3口进行控制,用P3.0、P3.1、P3.2分别作为S1、S2、S3的电路接口。按下S1时启动,按下S2时暂停,按下S3清零.
(4) LED显示电路
我们用LED数码管显示结果,用4个共阳极LED显示,用P2并行端口进行数码管的控制输入,使用 P1.6、P1.5、P1.4、P1.3进行选择0.1秒位、秒位、十秒位、分钟位。
电路原理图(网上参考图)
3.软件设计
主程序流程图
三.计划书
第一周(9月10日-16日):选好课题,熟悉任务要求。 第二周(9月17日-23日):总体方案设计 第三周(9月24日-30日):硬件设计,即画出电路原理图,软件设计,做好流程图就可以,列出实验所需清单。
第四周(10月1日-7日):国庆放假 第五周(10月8日-14日):完成软件编程,用C 语言或汇编都可以 第六周(10月15日-21日):完成系统的硬件组装,焊接实体电路 第七周(10月22日-28日):系统调试,改进、完善电路,整理实验设计报告
第八周(10月29日——):课堂考核
开 始
有进位吗?
初始化
有暂停指令吗?
Y
有清零指令吗?
0.1秒位加一
N N
N
Y
有进位吗? N
Y
秒位加一
十秒位加一
Y
有进位吗?
N
Y 声音提示
四.器材清单
AT89C51单片机(双列直插)×1
74LS244 芯片(双列直插)×1
7406芯片(双列直插)×5
晶振 12MHz ×1
电容(30pF)×2,
22pF ×1
电阻 470Ω×1
8.2kΩ×1
10 kΩ×5
按键开关×5
LED数码管×5
蜂鸣器×1
导线若干
五.源程序
HAOMIAO EQU 34H
MIAO EQU 35H
SHIMIAO EQU 36H
ORG 0000H
AJMP START
ORG 0030H
START: CLR C
SETB P1.6
SETB P1.5
SETB P1.4
MOV HAOMIAO,#0
MOV MIAO,#0
MOV SHIMIAO,#0
MOV DPTR,#TABLE
MOV A,#00H
MOVC A,@A+DPTR
CLR P1.6
MOV P2,A
MOV A,#00H
MOVC A,@A+DPTR
CLR P1.4
MOV P2,A
MOV DPTR,#TABLE1
MOV A,#00H
MOVC A,@A+DPTR
CLR P1.5
MOV P2,A
LCALL KAISHI
LCALL MAIN
SHIWEI : SETB P1.5
MOV DPTR,#TABLE ;十秒位显示
MOV MIAO,#0 ;使秒位从零位重新循环 INC SHIMIAO
MOV A,SHIMIAO
CLR C
SUBB A,#6
JZ START
AJMP MAIN
RET
TINGZHI: MOV A,#00H ;判断是否有清零指
MOV A,P3
ANL A,#04H
JZ START
MOV A,#00H ;判断是否有停止指令 MOV A,P3
CLR C
ANL A,#02H
LCALL YANSHI
JZ MAIN
LJMP TINGZHI
START1 : LJMP START
SHIWEI1: LJMP SHIWEI
MAIN : SETB P1.5
SETB P1.4
SETB P1.6
MOV A,#00H ; 判断是否有清零指令 MOV A,P3
ANL A,#04H
JZ START1