秒表时钟计时器设计2文档格式.docx
《秒表时钟计时器设计2文档格式.docx》由会员分享,可在线阅读,更多相关《秒表时钟计时器设计2文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
P0
单
片
机
控
制
器
P1
列驱动
图1-2硬件系统总体设计框架
第2章系统硬件电路的设计
秒表/时钟计数器的硬件电路如图8,采用AT89S51单片机,最小化应用设计;
采用共阴极七段LED显示器,P0口输出端数据,P20~P25口作为扫描输出,P10、P11、P12口接三个按键开关,用以调时及功能设置。
为了提供共阴极LED数码管的驱动电压,用三极管8550作电源驱动输出。
采用12MHZ晶振,有利于提高秒表计时的精确性。
2.1电源电路:
JP1是电源输入插孔。
S5为电源开关。
电路采用7805三端稳压管,为单片机提供稳定的工作电压(工作电压为5V)其1脚为输入端,2脚为接地端,3脚为输出端。
D1是二极管IN4007,并联在7805上,作用是反接保护电路。
C2是电源滤波电容,其值为200UF。
C1为高频去偶电容其值为0.1UF。
D2是一只发光二极管,作用为电源指示灯
图2-1电源电路
2.2下载口电路:
此下载口为10针型。
2、4脚分别接地,8脚接电源,P15,P16,P17三脚分别接单片机P15,P16,P17三脚。
5脚接单片机的RESET脚。
图2-2下载口电路
2.3复位电路:
此电路由一只10UF的电解电容,一只10K的电阻和一只按键开关组成。
。
图2-3复位电路
2.4振荡电路:
由12KHZ晶振组成时钟产生电路,为单片机提供时钟源。
图2-4振荡电路
2.5显示电路:
此电路由一只9脚和6只共阴极数码管组成。
P00口~PO7口分别接数码管的a~g段。
排组一脚接电源,数码管的G0~G5接单片机的P20~P25口。
图2-5显示电路
2.6键盘电路:
三只电阻为1K,K1,K2,K3是三只控制按键。
此电路作用为对时间的调试和校正。
图2-6键盘
第3章系统程序设计
3.1主程序
本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能.
其主程序执行流程图如下:
图3-1主程序执行流程图
;
主程序
START:
LCALLST
MOVR0,#70H
MOVR7,#0BH
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H
MOV7AH,#0AH
MOVTMOD,#11H
MOVTL0,#0B0H
MOVTH0,#3CH
MOVTL1,#0B0H
MOVTH1,#3CH
SETBEA
SETBET0
SETBTR0
MOVR4,#14H
3.2显示子程序
数码管显示的数据存放在内存单元70H~75H中。
其中70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据,每一地址单元内均为十进制BCD码。
由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。
显示时,先取出70H~75H中的某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。
如果要显示小数点及“—”、“A”等特殊字符,在显示班级及计时时采用不同的显示子程序。
显示程序
显示数据在70H-75H单元内,用六位LED共阳数码管显示,P0口输出段数据,P2口作
扫描控制,每个LED数码管亮1ms时间,再逐位循环。
DISPLAY:
MOVR1,#70H
MOVR5,#0FEH
PLAY:
MOVA,R5
MOVP2,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
JBACC.2,LOOP5
SETBP0.7
LOOP5:
JBACC.4,LOOP6
LOOP6:
LCALLDL1MS
INCR1
JNBACC.5,ENDOUT
RLA
MOVR5,A
MOVP0,#00H
AJMPPLAY
ENDOUT:
MOVP2,#0FFH
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,77H,40H
共阳段码表"
0"
"
1"
2"
3"
4"
5"
6"
7"
8"
9"
不亮"
A"
-"
ST子程序,上电时显示年月班级用,采用移动显示
ST:
MOVR0,#40H
MOVR2,#20H
MOVR3,#00H
CLRA
MOVDPTR,#STAB
SLOOP:
MOV@R0,A
MOVA,R3
INCA
MOVR3,A
INCR0
DJNZR2,SLOOP
MOVR1,#5AH
MOVR3,#1BH
SSLOP:
MOVR2,#32H
SSLOOP1:
LCALLSDISPLAY
DJNZR2,SSLOOP11
MOVA,R1
SUBBA,#07H
MOVR1,A
DJNZR3,SSLOP
RET
SSLOOP11:
MOVA,R1
SUBBA,#06H
AJMPSSLOOP1
SDISPLAY,上显示程序
不带小数点显示,有"
"
显示功能
SDISPLAY:
SPLAY:
MOVDPTR,#TABS
JNBACC.5,ENDOUTS
AJMPSPLAY
ENDOUTS:
TABS:
STAB表,启动时显示2006-10-19(制作年月日),04-2-80(班级学号)
STAB:
DB0AH,0AH,0AH,0AH,0AH,0AH,00H,08H,0CH,02H,0CH,04H,00H,0AH,0AH,0AH
DB09H,01H,0CH,00H,01H,0CH,06H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH
注:
0A不亮,0B显示"
.0C显示
3.3定时器T0中断服务程序
定时器T0用于时间计时。
定时溢出中断周期可分别设为50ms和10ms。
中断进入后,先判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1S)时对秒计数单元进行加1操作,秒表计时每10ms进行加1操作。
时钟计数单元地址分别在70H~71H(秒)、76H~77H(分)和78H~79H(时),最大计时植为23时59分59秒。
而秒表计数单元地址也在70H71H(0。
01毫秒)、76H77H(秒)、和78H79H(分),最大计时为99分59.99秒。
7AHD单元内存放“熄灭符”数据(#0AH)。
在计数单元中采用十进制BCD码计数,满60进位,T0中断服务程序
执行流程图如下图:
时钟
图3-2T0中断服务程序
T0中断服务程序
INTT0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
JB03H,FSS
MOVA,#0B7H
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDCA,TH0
MOVTH0,A
DJNZR4,OUTT0
ADDSS:
MOVR0,#71H
ACALLADD1
MOVA,R3
CLRC
CJNEA,#60H,ADDMM
ADDMM:
JCOUTT0
ACALLCLR0
MOVR0,#77H
CJNEA,#60H,ADDHH
ADDHH:
MOVR0,#79H
JB03H,OUTT0
CJNEA,#24H,HOUR
HOUR:
OUTT0:
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
POPPSW
POPACC
RETI
秒表计时程序(10min加1),低2位为0.10.01秒,中间2位为秒,最高2位为分。
最大计数值为99分59.99秒
FSS:
MOVA,#0F7H
MOVA,#0