本次還是延續發表于 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 |