实验九 电子时钟
一、实验目的
- 进一步掌握定时器的使用和编程方法
- 进一步掌握中断处理程序的编程方法
二、实验仪器
- 普中A2开发板(STC89C52)
- keil5
- stc-isp
三、实验内容
利用CPU的定时器定时,设计一个电子时钟,显示时分秒,由左向右分别为:时、分、秒,格式如下:
XX —XX— XX 由左向右分别为:时、分、秒
初始化的时间为学号后6位。开发板左边的八个数码管为共阴极数码管。
四、流程框图
五、实验程序
ORG 0000H
AJMP START
ORG 000BH
AJMP T0_INT
ORG 0030H
START:
SEC EQU R0 ;R0存放秒
MIN EQU R1 ;R1存放分
HOR EQU R2 ;R2存放时
SEC_G EQU 20H ;秒的个位
SEC_S EQU 21H ;
MIN_G EQU 22H ;
MIN_S EQU 23H ;
HOR_S EQU 24H ;
HOR_G EQU 25H ;
ACALL SEG_INIT ;数码管初始化
ACALL T0_INIT ;T0定时器初始
MOV SEC , #12 ;
MOV MIN , #40 ;
MOV HOR , #10 ;
MAIN:
ACALL DATA_GEN ;将时间数据为6位
ACALL DTSEG ;动态数码管显示
AJMP MAIN ;MAIN循环
T0_INIT:
ANL TMOD, #0F0H ;初始化定时器0
ORL TMOD, #01H ;
MOV TL0 , #00H ;
MOV TH1 , #4CH ;
CLR TF0
SETB TR0
SETB ET0
SETB EA
RET
SEG_INIT:
MOV DPTR, #TAB1 ;
MOV P0 , #00H ;
RET
DATA_GEN:
MOV B , #10 ;
MOV A , SEC ;
DIV AB ;
MOV SEC_G , B ;
MOV SEC_S , A ;
MOV B , #10 ;
MOV A , MIN ;
DIV AB ;
MOV MIN_G , B ;
MOV MIN_S , A ;
MOV B , #10 ;
MOV A , HOR ;
DIV AB
MOV HOR_G , B ;
MOV HOR_S , A ;
RET
DTSEG:
ONE:
CLR P2.2
CLR P2.3
CLR P2.4
MOV A , SEC_G ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
TWO:
SETB P2.2
CLR P2.3
CLR P2.4
MOV A , SEC_S ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
THREE:
CLR P2.2
SETB P2.3
CLR P2.4
MOV A , #16 ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
FOUR:
SETB P2.2
SETB P2.3
CLR P2.4
MOV A , MIN_G ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
FIVE:
CLR P2.2
CLR P2.3
SETB P2.4
MOV A , MIN_S ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
SIX:
SETB P2.2
CLR P2.3
SETB P2.4
MOV A , #16 ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
SEVEN:
CLR P2.2
SETB P2.3
SETB P2.4
MOV A , HOR_G ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
EIGHT:
SETB P2.2
SETB P2.3
SETB P2.4
MOV A , HOR_S ;
MOVC A , @A+DPTR ;
MOV P0 , A ;
ACALL DELAY100US
MOV P0 , #00H
RET
T0_INT:
MOV TL0 , #00H ;重装定时器初值 50ms
MOV TH0 , #4CH ;重装定时器初值
INC R3
CJNE R3 , #20 ,RETURN ;判断是否计数20次到达1S
MOV R3 , #00H ;B清0
INC SEC ;秒+1
CJNE SEC , #60 ,RETURN ;60秒进位
MOV SEC , #0 ;
INC MIN ;
CJNE MIN , #60 ,RETURN ;60分进位
MOV MIN , #0 ;
INC HOR ;
CJNE HOR , #24 ,RETURN ;24小时清零
MOV HOR , #0 ;
RETURN:
RETI
DELAY100US: ;@11.0592MHz
PUSH 30H
MOV 30H,#41
NEXT1:
DJNZ 30H,NEXT1
POP 30H
RET
TAB1:;0 - F共阴极字形码
DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0-9
DB 77H,7CH,39H,5EH,79H,71H
DB 40H
END
六、程序分析
很简单,没什么好讲的。😎😎😎