⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 三档八小时风扇控制程序.asm

📁 51单片机汇编三档八小时风扇控制程序
💻 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 + -