📄 三档八小时风扇控制程序.asm
字号:
;;;;;;;风扇控制程序;;;;;;; 14\4\07
;用P3.0\P3.1\P3.2 分别控制档位\定时\和关机
;P3.3\P3.4\P3.5分别为1\2\3档位
;P1.0~P1.7分别接共阳极数码管A~H指示(长通E.)\1H~8H定时
;P1.7也作开机OUT控制,全部都是低电平有效。
;注意晶体为12MHZ IC为89C2051系列
ORG 00H
JMP START
ORG 0BH ;定时器0入口
JMP TIME ;中断程序
ORG 30H
START:
MOV P3,#0F7H ;默认为1档
MOV R3,#00H
MOV R2,#00H
MOV R4,#00H
CLR 20H.0
MOV TMOD,#01H ;定时器0工作于方式1
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000);50MS(当4mhz晶体时为150MS)
SETB EA ;开总中断
SETB ET0 ;定时器0中断允许
LOOP:
JNB 20H.0,ON
OFF: MOV P1,#8EH
MOV P3,#0FFH
JMP OFF
ON: MOV DPTR,#TABLE
MOV A,R4
MOVC A,@A+DPTR
MOV P1,A
JB P3.2,LA ;是否有关机键压下
CALL DELAY ;防抖
JB P3.2,LA
SETB 20H.0 ;取反即为高电平故关闭总电源
;JNB P3.7,$
LA:
JB P3.0,LB ;是否有调档键压下
CALL DELAY ;防抖
JB P3.0,LB
INC R3
JNB P3.0,$
C01: ;2档
CJNE R3,#01H,C02
SETB P3.3
CLR P3.4
JMP LOOP
C02: ;3档
CJNE R3,#02H,C03
SETB P3.4
CLR P3.5
JMP LOOP
C03: ;1档
SETB P3.5
CLR P3.3
MOV R3,#00H
JMP LOOP
LB:
JB P3.1,LOOP ;是否有定时键压下
CALL DELAY
JB P3.1,LOOP
INC R2
JNB P3.1,$
SETB TR0 ;启动定时器0
CJNE R2,#01H,C002
MOV R4,#01H ;1小时
CALL CLRR
JMP LOOP
C002: ;2小时
CJNE R2,#02H,C003
MOV R4,#02H
CALL CLRR
JMP LOOP
C003: ;3小时
CJNE R2,#03H,C004
MOV R4,#03H
CALL CLRR
JMP LOOP
C004: ;4小时
CJNE R2,#04H,C005
MOV R4,#04H
CALL CLRR
JMP LOOP
C005: ;5小时
CJNE R2,#05H,C006
MOV R4,#05H
CALL CLRR
JMP LOOP
C006: ;6小时
CJNE R2,#06H,C007
MOV R4,#06H
CALL CLRR
JMP LOOP
C007: ;7小时
CJNE R2,#07H,C008
MOV R4,#07H
CALL CLRR
JMP LOOP
C008: ;8小时
CJNE R2,#08H,C009
MOV R4,#08H
CALL CLRR
JMP LOOP
C009: ;长通
MOV R2,#00H
MOV R4,#00H
CLR TR0 ;关闭定时器0
JMP LOOP
CLRR: ;清除软件计数器为0
MOV R7,#00H
MOV R6,#00H
MOV R5,#00H
RET
DELAY: ;防抖
MOV R1,#20
DD: MOV R0,#248
DJNZ R0,$
DJNZ R1,DD
RET
TIME: ;1小时基准
MOV TH0,#HIGH(65536-50000);重置初定时值
MOV TL0,#LOW(65536-50000)
INC R7
CJNE R7,#200,TT ;50MS*200=10S到了吗?
MOV R7,#00H
INC R6
CJNE R6,#30,TT ;10S*60=600S到了吗?(当4mhz晶体时改为#30)
MOV R6,#00H
INC R5
CJNE R5,#4,TT ;600S*6=3600S到了吗?(当4mhz晶体时改为#4)
MOV R5,#00H
DJNZ R4,TT ;将R4的值减1
SETB 20H.0
TT:
RETI
TABLE:
DB 06H,79H,24H,30H,19H,12H,02H,58H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -