本次还是延续发表于 2019-2-18 电路
本次更换芯片:STC 12C2052AD更换为STC 12C5608AD
本次增加交替显示: 秒钟和分钟时钟交替显示
/******************
语言: 汇编
项目: 4位数码管时间显示 时钟分钟和秒钟交替显示
芯片: STC 12C5608AD PDIP-20
日期: 2019.3.3
编写: ZCT
P3.5 接数码管COM
P3.4 接数码管COM
P3.3 接数码管COM
P3.2 接数码管COM
P1.0-P1.7 接数码管段位a b c d e f g dp
晶振:12M
******************/
/**************数码管显示时间初始化***************************/
LED0 BIT P3.5
LED1 BIT P3.4
LED2 BIT P3.3
LED3 BIT P3.2
SEC DATA 30H
MIN DATA 31H
HOUR DATA 32H
ORG 0000H
JMP MAIN
ORG 000BH
LJMP TIME_TF0
ORG 0030H
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P3,#0FFH
MOV SEC,#57 ;秒钟初值
MOV MIN,#58 ;分钟初值
MOV HOUR,#19 ;时钟初值
MOV 20H,#0
MOV DPTR,#TABLE
MOV TMOD,#11H ;设置定时器工作方式为1
MOV IE,#10001010B ;启动总中断;启动定时器0中断
MOV TH0,#HIGH(65535-50000) ;定时器0高8位赋值
MOV TL0,#LOW(65535-50000) ;定时器0低8位赋值
SETB TR0 ;启动定时器
MOV R0,#20 ;定时器中断循环次数
MOV R1,#20
LCALL DISPLAY_MIN ;显示分钟初值
LCALL DISPLAY_HOUR ;显示时钟初值
START:
LCALL DISPLAY_MIN
LCALL DISPLAY_HOUR
CJNE R4,#6,START ;分钟时钟显示时间
DIAPLAYSEC:
LCALL DISPLAY_SEC
CJNE R4,#13,DIAPLAYSEC ;秒钟显示时间
MOV 20H,#0 ;交替值清零
JMP START
/***************定时器中断程序******************/
TIME_TF0:
CLR TR0 ;关闭定时器
MOV TH0,#HIGH(65535-50000) ;定时器重新赋值
MOV TL0,#LOW(65535-50000)
SETB TR0 ;启动定时器
DJNZ R0,RETURN ;1秒定时。判断R0是否为零,返回到START。如等于零,执行下一条。*/
MOV R0,#20 ;重新赋值
INC SEC ;秒寄存器加1
INC 20H ;交替显示时间
MOV R4,20H
MOV R3,SEC ;秒的值载人R3
CJNE R3,#60,TIME_TF0 ;判断SEC不等于60,返回到定时器中断。 等于60下一条
MOV SEC,#0 ;秒值清零
JMP TIME_MIN ;跳到分钟寄存器
RETURN:RETI
TIME_MIN: ;注释同上
INC MIN
MOV R3,MIN
CJNE R3,#60,TIME_TF0
MOV MIN,#0
JMP TIME_HOUR
TIME_HOUR:
INC HOUR
MOV R3,HOUR
CJNE R3,#24,TIME_TF0
MOV HOUR,#0
JMP TIME_TF0 ;返回到定时器中断
/***************以下参考2月24日的注释****************/
/***************秒钟显示程序****************/
DISPLAY_SEC:
MOV A,SEC
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED1
CALL DELAY_10MS
SETB LED1
CALL DELAY_10MS
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED0
CALL DELAY_10MS
SETB LED0
CALL DELAY_10MS
RET
/***************分钟显示程序****************/
DISPLAY_MIN:
MOV A,MIN
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED1
CALL DELAY_10MS
SETB LED1
CALL DELAY_10MS
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED0
CALL DELAY_10MS
SETB LED0
CALL DELAY_10MS
RET
/***************时钟显示程序****************/
DISPLAY_HOUR:
MOV A,HOUR
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR LED3
CALL DELAY_10MS
SETB LED3
CALL DELAY_10MS
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR LED2
CALL DELAY_10MS
SETB LED2
CALL DELAY_10MS
RET
/**************延时程序****************/
DELAY_10MS:
MOV R7,#1
D1: MOV R6,#5
D2: DJNZ R6,D2
DJNZ R7,D1
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END |