家用电器定时控制器
家用电器定时控制器(可设置分、秒)
设计、实习要求:
设计一个家用电器的定时控制程序,要求显示定时时间,并可用键盘对定时时间进行设定。
程序功能:
(1)一开机数码管显示“good”,使某只发光二极管亮;
(2)用键可使定时控制器清零,允许对定时时间设定;
(3)用键可对分设定;用键可对秒设定;
(4)按“运行键”开始定时,并且运行过程中动态显示时间状态,时间到使八只发光二极管间隔亮。
程序功能附加要求:
在按“设定”键之前按任何键都无效的。
在进入倒计时状态后,仍可以对定时时间再次调节,即重新设定。
运行结束即时间到使八只发光二极管间隔亮,数码管显示“help”。
(型号:89C51)
源程序:
TICK EQU 10000
DBUF0 EQU 30H
TEMP EQU 40H
DIN BIT P0.4
CLK BIT P0.5
T100us EQU 156
C100us EQU 05H
ORG 0000H
LJMP START
ORG 000BH
LJMP T0INT
START:CLR P2.0
CLR P0.0
MOV 30H,#10H
MOV 31H,#10H
MOV 32H,#09H
MOV 33H,#0AH
MOV 34H,#0AH
MOV 35H,#0DH
MOV 36H,#10H
MOV 37H,#10H
ACALL DISP
SHEDING:MOV P1,#0FFH
MOV A,P1
JNB ACC.0,KEY
SJMP SHEDING
KEY:MOV P1,#0FFH
MOV A,P1
JNB ACC.0,CLEAR0
JNB ACC.1,BEGIN
JNB ACC.4,MH
JNB ACC.5,ML
JNB ACC.6,SH
JNB ACC.7,SL
SJMP KEY CLEAR0:ACALL CLEAR
SJMP KEY
MH:MOV A,33H
INC A
MOV 33H,A
CJNE A,#06H,JUMP
MOV 33H,#00H
LCALL DISP
SJMP KEY
ML:MOV A,34H
INC A
MOV 34H,A
CJNE A,#0AH,JUMP
MOV 34H,#00H
LCALL DISP
SJMP KEY
SH:MOV A,36H
INC A
MOV 36H,A
CJNE A,#06H,JUMP
MOV 36H,#00H
LCALL DISP
SJMP KEY
SL:MOV A,37H
INC A
MOV 37H,A
CJNE A,#0AH,JUMP
MOV 37H,#00H
LCALL DISP
SJMP KEY JUMP:LCALL DELAY
ACALL DISP
LJMP KEY
JUMP1:LJMP CLEAR0
JUMP2:LJMP KEY
JUMP3:CLR TR0
SJMP STOP
STOP:SJMP KEY
BEGIN:MOV TMOD, #02H
MOV TH0, #T100us
MOV TL0, #T100us
MOV IE, #10000010B
SETB TR0
MOV C100us, #HIGH(TICK)
MOV C100us+1, #LOW(TICK) W AIT:JNB P1.2,JUMP3
MOV A,33H
JNZ WAIT
MOV A,34H
JNZ WAIT
MOV A,36H
JNZ WAIT
MOV A,37H
JNZ WAIT
CLR TR0
LJMP HELP
SJMP W AIT
T0INT:PUSH PSW
MOV A, C100us+1
JNZ GOON
DEC C100us
GOON:DEC C100us+1
MOV A, C100us
ORL A, C100us+1
JNZ EXIT
MOV C100us, #HIGH(TICK)
MOV C100us+1, #LOW(TICK) TIMING:SETB P0.0
ACALL DELAY
MOV A,37H
DEC A
MOV 37H,A
CJNE A,#0FFH,DISP1
MOV 37H,#09H
MOV A,36H
DEC A
MOV 36H,A
CJNE A,#0FFH,DISP1
MOV 36H,#05H
MOV A,34H
DEC A
MOV 34H,A
CJNE A,#0FFH,DISP1
MOV 34H,#09H
MOV A,33H
DEC A
MOV 33H,A
CJNE A,#0FFH,DISP1
MOV 33H,#05H
MOV A,31H
DEC A
MOV 31H,A
CJNE A,#0FFH,DISP1
MOV 31H,#09H
MOV A,30H
DEC A
MOV 30H,A
CJNE A,#0FFH,DISP1
MOV 30H,#05H DISP1:ACALL DISP EXIT:POP PSW
RETI
HELP:MOV 30H,#10H
MOV 31H,#10H
MOV 32H,#0BH
MOV 33H,#0CH
MOV 34H,#0FH
MOV 35H,#0EH
MOV 36H,#10H
MOV 37H,#10H
ACALL DISP
CLR P0.0
FLASH:MOV A, #0FEH
MOV R5, #8 OUTPUT:JNB P1.3,RESET
MOV P2, A
RL A
LCALL DELAY
DJNZ R5, OUTPUT
SJMP FLASH
RESET:LJMP KEY
DELAY:MOV R6, #0
MOV R7, #0
DELAYLOOP:DJNZ R7, DELAYLOOP
DJNZ R6, DELAYLOOP
RET
DISP:MOV R0, #DBUF0
MOV R1, #TEMP
MOV R2, #8
DP10:MOV DPTR,#SEGTAB
MOV A, @R0
MOVC A, @A+DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R2, DP10
MOV R0, #TEMP
MOV R1, #8
DP12:MOV R2, #8
MOV A, @R0
DP13:RLC A
MOV DIN, C
CLR CLK
SETB CLK
DJNZ R2, DP13
INC R0
DJNZ R1, DP12
RET
SEGTAB: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,5CH,76H
DB 79H,5EH,73H,38H,00H,40H CLEAR:CLR A
MOV P1,#0FFH
MOV A,P1
JNB ACC.0,CLEAR1
SJMP CLEAR
CLEAR1:MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#11H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#11H
MOV 36H,#00H
MOV 37H,#00H LCALL DISP RET
END