秒表时钟计时器的方案设计书Word下载.docx

上传人:b****5 文档编号:18308496 上传时间:2022-12-15 格式:DOCX 页数:24 大小:83.05KB
下载 相关 举报
秒表时钟计时器的方案设计书Word下载.docx_第1页
第1页 / 共24页
秒表时钟计时器的方案设计书Word下载.docx_第2页
第2页 / 共24页
秒表时钟计时器的方案设计书Word下载.docx_第3页
第3页 / 共24页
秒表时钟计时器的方案设计书Word下载.docx_第4页
第4页 / 共24页
秒表时钟计时器的方案设计书Word下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

秒表时钟计时器的方案设计书Word下载.docx

《秒表时钟计时器的方案设计书Word下载.docx》由会员分享,可在线阅读,更多相关《秒表时钟计时器的方案设计书Word下载.docx(24页珍藏版)》请在冰豆网上搜索。

秒表时钟计时器的方案设计书Word下载.docx

要达到1秒钟,可以采用两种方法:

采用一个定时器定时与软件计数相结合的方法;

或者采用两个定时器级联的方法。

由于秒表在计时功能时也需要用到1个定时器,因此,我们采用第一个方法,只使用1个定时器,例如使用T0。

为了达到较为准确的计时,使T0的溢出时间为50ms,使用一个字节作为软件计数器ST,计数值为20。

定时器的中断处理程序对ST进行减1操作,当ST为0时,1秒到达,此时更新存放小时、分钟、秒钟的显示缓存区。

2.计时功能

当秒表用作计时功能时,也需要一个定时器进行10MS的定时,在本例中使用单片机的TIMER1。

在TIMER1的中断处理程序中对SS和ss的缓存空间进行更新,与上面类似。

3.功能按键

再看按键的处理。

这3个键可以采用中断的方法,也可以采用查询的方法来识别。

对于A、B键,主要功能在于功能切换和数值复位,对于时间的要求不是很严格,而C键主要用于时间的锁定,需要比较准确的控制。

因此可以考虑,对A、B键采用查询的方式,而对于C键采用外部中断。

4.中断嵌套和控制

现在在我的方案中有3个中断,T0、T1中断和外部中断INT0。

这3个中断的特点是:

T0的工作是连续的,可以在误差范围内可以被打断但不可以停止;

T1的工作同样可以在误差范围内被打断,但可以被INT0停止;

INT0是用来启动或停止T1的。

2.系统硬件设计

2.1秒表/时钟计时器的硬件电路

秒表/时钟计时器的硬件电路如图所示,采用AT89C52单片机,最小化应用设计;

采用共阳七段LED显示器,P0口输出段码数据,P2.0-P2.5口作列扫描输出,P1.0、P1.1、P1.2口接三个按钮开关,用以调时及功能设置。

为了提供共阳LED数码管的驱动电压,用三极管8550作电源驱动输出。

采用12M晶振,有利于提高秒计时的精确性。

六位LED显示器

列驱动

AT89C52

P0

单片机

控制器

P2

图2.1硬件系统的总体设计框架

P3口引脚

特殊功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0外部输入)

P3.5

T1(定时器1外部输入)

图2.2P3口特殊功能

2.2电路原理图设计

电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。

设计电路原理图:

图2.3电路原理图

2.3AT89C2052单片机及其引脚说明

AT89C2052是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

图2.4AT89C52芯片

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

主要功能特性:

•兼容MCS51指令系统

•8k可反复擦写(>

1000次)FlashROM

•32个双向I/O口

•256x8bit内部RAM

•3个16位可编程定时/计数器中断

•时钟频率0-24MHz

•2个串行中断

•可编程UART串行通道

•2个外部中断源

•共6个中断源

•2个读写中断口线

•3级加密位

•低功耗空闲和掉电模式

•软件设置睡眠和唤醒功能

2.474ls244芯片说明

开关量输入的扩展经常使用的芯片是74LS244/74LS245/74LS240等;

这些芯片的特点是三态门,可以把多个芯片的输出,并联在一起而不会互相影响;

通过138、139、153等译码选通芯片,把RD/WR/地址的高位信号(高3位或者高4位,看单片机系统中的芯片的数量)接到译码芯片,把译码芯片的输出接到锁存器的锁存输入,或者缓冲器的选通输入。

图2.574LS244芯片

244内部包含8个单向三态门,分为两组,同时作为总线芯片的另外一个特点是驱动能力加强了,可以提供比较大的输出电流,所以经常用来直接驱动光耦、发光管等,也可以用于驱动微型的继电器!

第3节系统程序的设计

3.1主程序

本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。

其主程序执行流程见下图

3.2显示子程序

数码管显示的数据存放在内存单元70H-75H中。

其中70H-71H存放秒数据,72H-73H存放分数据,74H-75H存放时数据,每一地址单元内均为十进制BCD码。

由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。

显示时,先取出70H-75H某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。

为了显示小数点及“-”、“A”等特殊字符,在显示班级及计时时采用不同的显示子程序。

3.3定时器T0中断服务程序

定时器TO用于时间计时,定时溢出中断周期可分别设为50ms和10ms.中断进入后,现判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1s)时,对秒计数单元进行加1操作,秒表计时每10ms进行加1操作。

时钟计数单元地址分别在70H-71H(秒)、76H-77H(分)和78H-79H(时),最大计时值为23时59分59秒。

而秒表计数单元地址也在70H-71H(0.01毫秒)、76H-77H(秒)和78H-79H(分),最大计时值为99分59.99秒。

7AH单元内存放“熄灭符”数据(#0AH)。

在计数单元中采用十进制BCD码计数,满60(秒表功能时有100)进位,T0中断服务程序执行流程见下图

图3.2

定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用;

P1.0,P1.1,P1.2为调整按钮,P0口为字符输出口,采用共阳显示管。

3.4T1中断服务程序

T1中断服务程序用于指示调整单元数字的亮闪。

在时间调整状态下,每过0.3s,将对应单元的显示数据换成“熄灭符”数据(#0AH)。

这样在调整时间时,对应调整单元的显示数据会间隔闪亮。

3.5调时功能程序

调时功能程序的设计方法时:

按下P1.0口按键,若按下时间短于1s,则进入省电状态(数码管不亮,时钟不停);

否则进入调分状态,等待操作,此时计时器停止走动。

当再按下按钮时,若按下时间短于0.5s,则时间加1分;

若按下时间长于0.5s,则进入小时调整状态。

在小时调整状态下,当按键按下的时间长于0.5s,退出调整状态,时钟继续走动。

P1.1口按键在调时状态下可实现减1功能。

3.6整点响程序

如果在时钟状态下,如果是整点那么就用P3.2这个引脚来控制蜂鸣器。

3.7时钟/秒表功能程序

在正常计时状态下,若按下P1.1口按键,则进行时钟/秒表功能的转换,转换后计时从开始。

当按下P1.2口的按键时,可实现清0、计时启动、暂停功能。

第四节控制源程序清单

/*AT89C52秒表/时钟程序*/

/*定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用*/

/*P1.0P1.1P1.2为字符输出口,采用共阳显示管。

*/

/*主程序*/

START:

MOVR0,#70H/*清零70H~7AH共11个内存单元*/

MOVR7,#0BH

CLEARDISP:

MOV@R0,#00H

INCR0

DJNZR7,CLEARDISP

MOV20H,#00H/*清20H(标志用)*/

MOV7AH,#0AH/*放入“熄灭符”数据*/

MOVTMOD,#11H/*设置T0、T1为16位定时器*/

MOVTL0,#0B0H/*50ms定时初值(T0计时用)*/

MOVTH0,#3CH

MOVTL1,#0B0H/*50ms定时初值(T1闪烁定时用)*/

MOVTH1,#3CH/*50ms定时初值*/

SETBEA/*总中断开放*/

SETBET0/*允许T0中断*/

SETBTR0

MOVR4,#14H

START1:

LCALLDISPLAY /*调用显示子程序*/

JNBP1.0,SETMM1/*P1.0口为0时,转时间调整程序*/

JNBP1.1,FUNSS/*秒表功能,P1.1按键调时时作减1操作*/

JNBP1.2,FUNPT/*STOP、PUSE、CLR*/

SJMPSTART1/*P1.0口为1时跳回START1*/

SETMM1:

LJMPSETMM/*转到时间调整程序SETMM*/

FUNSS:

LCALLDS20MS

JBP1.1,START1

WAIT11:

JNBP1.1,WAIT11

CPL03H

MOV70H,#00H

MOV71H,#00H

MOV76H,#00H

MOV77H,#00H

MOV78H,#00H

MOV79H,#00H

AJMPSTART1

ACALLZDBS

FUNPT:

LCALLDS20MS

JBP1.2,START1

WAIT22:

JNBP1.2,WAIT21

CLRET0

CLRTR0

WAIT33:

JBP1.2,WAIT31

JBP1.2,WAIT33

WAIT66:

JNBP1.2,WAIT61/*清70~79H共10个内存单元*/

MOVR0,#70H

MOVR7,#0AH

CLEARP:

MOV@R0,00H

INCR0

DJNZR7,CLEARP

WAIT44:

JBP1.2,WAIT41

LCALLDS20MS

JBP1.2,WAIT44

WAIT55:

JNBP1.2,WAIT51

SETBET0

SETBTR0

AJMPSTART1

WAIT21:

LCALLDISPLAY

AJMPWAIT22

WAIT31:

AJMPWAIT33

WAIT41:

AJMPWAIT44

WAIT51:

AJMPWAIT55

WAIT61:

AJMPWAIT66

/*中断入口程序*/

ORG0000H。

/*程序执行开始地址*/

LJMPSTART。

/*跳到标号START执行*/

ORG0003H。

/*外部中断0中断程序入口

RETI /*外部中断0中断返回*/

ORG000BH/*定时器T0中断程序入口*/

LJMPINTT0

ORG0013H/*外部中断1中断程序入口*/

TETI/*外部中断1中断返回*/

ORG001BH

LJMPINTT1/*跳至INTT1执行*/

ORG0023H/*串行中断程序入口地址*/

RETI

/*T0中断服务程序*/

INTT0:

PUSHACC/*累加器入栈保护*/

PUSHPSW /*状态字入栈保护*/

CLRET0/*关T0中断允许*/

CLR TR0/*关闭定时器T0*/

JB03H,FSS/*标志为1转秒表处理程序(10ms定时)*/

MOVA,#0B7H/*中断响应时间同步修正*/

ADDA,TL0/*低8位初值修正*/

MOVTL0,A/*重装初值(低8位修正值)*/

MOVA,#3CH/*高8位初值修正*/

ADCCA,TH0

MOVHT0,A/*重装初值(高8位修正值)*/

SETBTR0/*开始定时器T0*/

DJNZR4,OUTT0/*20次中断未到中断退出*/

ADDSS:

MOVR4,#14H/*20次中断到(1s)重赋初值*/

MOVR0,#71H /*指向秒计时单元(71H~72H)

ACALLADD1/*调用加1程序(加1s操作)

MOVA,R3

CLRC/*清进位标志*/

CJNEA,#60H,ADDMM

ADDMM:

JCOUTT0/*短于60s时中断退出*/

ACALLCLR0/*长与或者等于60s时对秒计时单元清零*/

MOVR0,#77H/*指向分计时单元(76H~77H)*/

ACALLADD1/*分计时单元加1min*/

MOVA,R3/*分数据放入A*/

CLRC/*清零位标志*/

CJNEA,#60H,ADDHH

ADDHH:

JCOUTT0/*短于60min时中断退出*/

ACALLLCR0/*长与或者等于60s时对秒计秒单元清零*/

MOVR0,#79H/*指向小时计时单元(78H~79H)*/

ACALL ADD1/*小时计时单元加1h*/

MOVA,R3/*时数据放入A*/

CLRC /*清进位标志*/

JB03H,OUTT0/*秒表时最大数为99*/

CJNEA,#24H,HOUR

HOUR:

JCOUTT0/*短于24h时中断退出*/

ACALLCLR0/*长与或者等于24h时对秒计时单元清零*/

OUTT0:

MOV72H,76H/*中断退出时将分、时计时单元数据移

MOV73H,77H入对应显示单元*/

MOV74H,78H

MOV75H,79H

POPPSW /*恢复状态字(出栈)*/

POPACC /*恢复累加器*/

SETBET0/*开放T0中断*/

RETI/*中断返回*/

/*秒表计时程序(10min加1),低2位为0.1、0.01秒,中间2位为秒,最高2位为分。

最大计数值为99分59.99秒

FSS:

MOVA,#0F7H

ADDA,TL0

MOVTL0,A

MOVA,#0D8H

ADDCA,THO

MOVTHO,A

SETBTHO

MOVR0,#71H

ACALLADD1

CLRC

MOVA,R3

JZFSS1

SETBC

FSS1:

AJMPADDMM

/*闪动调时程序*/

/*T1中断服务程序,用作时间调整时时调整单元闪烁指示*/

INTT1:

PUSHACC /*中断现场保护*/

PUSHPSW

MOVTL1,#0B0H/*装入定时器T1定时初值*/

MOVTH1,#3CH

DJNZR2,INTT1OUT

MOVR2,#06H

CPL02H

JB02H,FLASH1

MOV72H,76H

MOV73H,77H

INTT1OUT:

POPPSW/*恢复现场*/

POPACC

RET1

FLASH1:

JB01H,FLASH2/*01位为1时,转[小]时熄灭控制*/

MOV72H,7AH

MOV73H,7AH

AJMPINTT1OUT

FLASH2:

MOV74H,7AH

MOV75H,7AH

/*加1子程序*/ 

ADD1:

MOVA,@R0/*取当前计时单元数据到A*/

DECR0

SWAPA

ORLA,@R0

ADDA,#01H

DAA

MOVR3,A

ANLA,#0FH

MOV@R0,A

RET

/*分减1子程序*/

SUB1:

MOVA,@R0  /*取当前计时单元数据到A*/

JZSUB11

DECA

SUB111:

MOVR3,A/*移入R3中暂存数据*/

CLRC

SUBBA,#0AH

SUB1111:

JCSUB1110

MOV @R0,#09H

SUB110:

MOVA,R3/*取回R3中存数据*/

SUB11:

MOVA,#59H

AJMPSUB111

SUB1110:

MOVA,R3/*移入R3存储器*/

AJMPSUB110

/*时减1子程序*/

SUBB1:

JZSUBB11

SUBB111:

MOVR3,A/*移入R3存储器*/

SUBB1111:

JCSUBB1110

MOV@R0,#09H

SUBB110:

SUBB11:

MOVA,#23H

AJMPSUBB111

SUBB1110:

AJMPSUBB110

/*清0程序*/

/*为计时单元复0用*/

CLR0:

CLRA

/*时钟调整程序*/

当调时按键按下进入此程序

SETMM:

CLRET0/*关定时器T0中断*/

CLRTR0/*关定时器T0*/

LCALLDLIS

JBP1.0,CLOSEDIS

SETBET1

SETBTR1

SET2:

JNBP1.0,SET1/*P1口为0,等待*/

SETB00H

SET4:

JBP1.0,SET3/*等待键按下*/

LCALLDL05S

JNBP1.0,SETHH

MOVR0,#77H

LCALLADD1

CJNEA,#60H,HHH

HHH:

JCSET4

LCALLCLR0

AJMPSET4

CLOSEDIS:

SETBET0

CLOSE:

JBP1.0,CLOSE /*无键按下,等待*/

LCALLDISPLAY

JBP1.0,CLOSE

WAITH:

JNBP1.0,WAITH

LJMPSTART1

SETHH:

CLR00H

SETHH1:

JNBP1.0,SET5

SETB01H

SET6:

JBP1.0,SET7/*等待键按下*/

JNBP1.0,SETOUT

MOVR0,#79H

CJNEA,#24H,HOUU

HOUU:

JCSET6

AJMPSET6

SETOUT:

JNBP1.0,SETOUT1

CLR01H

CLR02H

CLRTR1

CLRET1

SET1:

LCALLDISPLAY/*键释放等待时调用显示程序(调分)*/

AJMPSET2/*防止键按下时无时钟显示*/

SET3:

JNBP1.1,FUNSUB

SET5:

LCALLDISPLAY/*键释放等待时调用显示程序(调时)*/

AJMPSETHH1

SET7:

JNBP1.1,FUNSUBB

SETOUT1:

AJMPSETOUT/*防止键按下时无时钟显示

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

当前位置:首页 > 成人教育 > 远程网络教育

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

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