| 
钻石会员 主题
回帖0
积分11931
阅读权限50
注册时间2009-7-18
最后登录1970-1-1
在线时间 小时
 
 | 
 
| 本帖最后由 LBQ691477940 于 2011-4-24 13:55 编辑 
 快到夏天了现在室内也就大概27~28度左右,就吹空调嘛又有点浪费,不吹嘛有时还是觉得有点热要是用风扇原来的机械式定时器普通型的一小时特别型的好像二小时经常都是睡到半梦半醒又被热醒了,只好拿风扇来“开刀”了,把它改成遥控三档八小时控制风扇,哈哈!
 ;**********************************风扇控制程序**************************
 ;用P3.0\P3.1\P3.7 分别控制   风速 定时 关机
 ;P3.3\P3.4\P3.5分别为  风速1 风速2 风速3
 ;P1.0~P1.7分别接共阳极数码管A~H指示(风速值)       \       1H~8H(以及长通不定时定时)      \          档位一~二~三
 ;长通不定时时只显示当前风速档数分别为 一、二、三。在有定时时轮流显示当前风速档数和定时时间值
 ;P1.7也作开机OUT控制,全部都是低电平有效。
 ;注意晶体: 4MHZ  MCU:89C2051系列
 ;程序设计:LBQ691477940  2011-04-15
 ;*****************************************************************************************************
 本电路为了关机后切断全部电源包括电路板的供电故开机键是直接与继电器的开关引脚组并联的当按下开机按钮时电路得电继电器自锁直到定时结束或按下关机按钮为止
   
 
 如下是电路板实物图与电路图:
 
      遥控三档八小时风扇.pdf
(378.38 KB, 下载次数: 5729) 程序:
 ORG    0000H
 SwFengSu BIT P3.0   ;风速
 SwTime  BIT   P3.1   ;定时
 SwOff   BIT   P3.7   ;关机
 FengSu1 BIT   P3.3   ;风速1
 FengSu2 BIT   P3.4   ;风速2
 FengSu3 BIT   P3.5   ;风速3
 JMP    START
 ORG    0003H
 JMP    YAO_KONG
 ORG    000BH  ;定时器0入口
 JMP    TIME    ;中断程序
 ORG    0030H
 START:
 MOV    SP,#60H
 MOV    P3,#0F7H ;11110111B ;默认为风速1
 MOV   22H,#09H ;使其取得一.的显示码
 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中断允许
 SETB   EX0
 SETB   IT0
 LOOP:
 JNB    20H.0,ON ;不是关机即转ON处
 OFF:    MOV    P1,#8EH   ;显示F且P1.7为高即关机
 MOV    P3,#0FFH ;风速全部关
 JMP    OFF
 ON:     MOV    DPTR,#TABLE
 MOV    A,R4  ;
 JB   20H.1,ON1 ;如果20H.1=1 即显示定时值
 MOV   A,22H  ;使其取得一.二.三.的显示码
 ON1:
 MOVC   A,@A+DPTR
 MOV    P1,A  ;送P1口显示
 CALL   SW_OFF
 CALL   SW_FengSu
 CALL   SW_Time
 JMP    LOOP
 SW_OFF:
 JB     SwOff,SWO   ;是否有关机键压下
 CALL   DELAY      ;防抖
 JB     SwOff,SWO
 JNB    SwOff,$
 SW1:
 SETB   20H.0       ;取反即为高电平故关闭总电源
 SWO:
 RET
 SW_FengSu:;调风速键
 JB     SwFengSu,LAO   ;是否有调风速键压下
 CALL   DELAY
 JB     SwFengSu,LAO
 LA1:    MOV    PSW,#00H
 CLR  20H.1  ;标志位置 0 显示风速值
 SETB 20H.2  ;延时轮流显示标志位
 MOV   21H,#8  ;延时轮流显示
 INC    R3
 JNB    SwFengSu,$
 C01:   ;风速2
 CJNE   R3,#01H,C02
 MOV   22H,#0AH    ;使其取得二.的显示码
 SETB    FengSu1  ;关风速1
 CALL   DELAY      ;延时防抖14946us
 CALL   DELAY      ;延时防抖14946us
 CLR   FengSu2     ;开风速2
 JMP    LAO
 C02:   ;风速3
 CJNE   R3,#02H,C03
 MOV   22H,#0BH ;使其取得三.的显示码
 SETB    FengSu2     ;关风速2
 CALL   DELAY      ;延时防抖14946us
 CALL   DELAY      ;延时防抖14946us
 CLR   FengSu3  ;开风速3
 JMP    LAO
 C03:  ;风速1
 MOV   22H,#09H ;使其取得一.的显示码
 SETB    FengSu3  ;关风速3
 CALL   DELAY      ;延时防抖14946us
 CALL   DELAY      ;延时防抖14946us
 CLR   FengSu1  ;开风速1
 MOV    R3,#00H
 LAO:    RET
 SW_Time:;调定时键
 JB     SwTime,LBO  ;是否有定时键压下
 CALL   DELAY
 JB     SwTime,LBO
 LB:
 MOV    PSW,#00H
 SETB   20H.1  ;标志位置 1 显示定时值
 SETB 20H.2  ;延时轮流显示/风速标志位置1
 JNB    SwTime,$
 MOV   21H,#8  ;延时轮流显示
 MOV    R7,#00H
 MOV    R6,#00H
 MOV    R5,#00H
 INC    R4   ;定时时间加 1 小时
 CJNE R4,#09H,C04 ;如果大于8即长通不会定时关机
 CLR   20H.1  ;标志位置 0 显示风速值
 MOV   R4,#00H
 CLR   TR0
 RET
 C04:
 SETB TR0
 LBO:
 RET
 DELAY:;延时防抖14946us
 MOV    R1,#10  ;1*3=3
 DD:     MOV    R0,#248  ;1*3=3
 DJNZ   R0,$  ;2*3*248*10=14880
 DJNZ   R1,DD  ;2*3*10=60
 RET
 TIME:
 PUSH   ACC
 PUSH   PSW
 MOV    TH0,#HIGH(65536-50000)
 MOV    TL0,#LOW(65536-50000);重置初定时值
 INC    R7
 INC   R5
 CJNE   R5,#7,TT1 ;150MS*7=1S到了吗?
 MOV   R5,#00H
 JNB   20H.2,TT2 ;延时轮流显示/风速标志位置
 DJNZ 21H,TT1
 CLR   20H.2
 TT2:
 CPL   20H.1  ;标志位置 0 显示风速值
 TT1:
 CJNE   R7,#200,TT ;150MS*200=30S到了吗?
 MOV    R7,#00H
 INC    R6
 CJNE   R6,#120,TT  ;30S*120=3600S到了吗?
 MOV    R6,#00H
 DJNZ   R4,TT   ;将R4的值减1
 SETB   20H.0  ;取反即为高电平故关闭总电源
 TT:     POP  PSW
 POP   ACC
 RETI
 YAO_KONG:
 PUSH    PSW
 PUSH    ACC
 CLR   EA
 MOV    PSW,#10H
 IR:  MOV   R6,#10
 SB:     ACALL   DELAY882
 JB    P3.2,REM_BAK
 DJNZ    R6,SB
 JNB     P3.2,$
 ACALL  DELAY2400
 JNB    P3.2,REM_BAK
 ACALL   DELAY2400
 MOV   R1,#1AH
 MOV    R2,#4
 PP:     MOV    R3,#8
 JJ:     JNB    P3.2,$
 LCALL   DELAY882
 MOV    C,P3.2
 JNC    UUU
 LCALL   DELAY1000
 UUU:
 MOV    A,@R1
 RRC   A
 MOV   @R1,A
 DJNZ   R3,JJ
 INC    R1
 DJNZ   R2,PP
 DAN_JI:
 NOP
 MOV    A,1AH
 XRL    A,#01H  ;用户码低八位01H
 JNZ    REM_BAK
 MOV    A,1BH
 XRL    A,#0FFH   ;用户码高八位FFH
 JNZ    REM_BAK
 MOV    A,1CH
 CPL    A
 XRL    A,1DH
 JNZ    REM_BAK
 MOV    A,1CH
 CJNE   A,#80H,E81
 CALL   SW1   ;关机
 JMP    REM_BAK
 E81:    CJNE  A,#81H,E82
 CALL   LB   ;定时
 JMP    REM_BAK
 E82:    CJNE  A,#82H,E83
 CALL   LA1   ;风速
 E83:    ;CJNE A,#83H,E84
 REM_BAK:
 POP    ACC
 POP    PSW
 SETB    EA
 RETI
 DELAY882: ;882us
 MOV   R7,#73 ;3*1=3
 ;NOP     ;3*1=3
 D3:     NOP     ;3*1*73=219
 NOP      ;3*1*73=219
 DJNZ   R7,D3 ;2*3*73=438
 RET
 DELAY1000: ;999us
 MOV   R7,#83 ;3*1=3
 D4:     NOP    ;3*1*83=249
 NOP    ;3*1*83=249
 DJNZ    R7,D4  ;2*3*83=498
 RET
 DELAY2400: ;2403us
 MOV   R7,#89 ;3*1=3
 D5:     NOP     ;3*89=267
 NOP     ;3*89=267
 NOP     ;3*89=267
 NOP      ;3*89=267
 NOP      ;3*89=267
 NOP      ;3*89=267
 NOP      ;3*89=267
 DJNZ   R7,D5 ;2*3*89=534
 RET
 TABLE:;P1.0-P1.7分别接共阳极数码管A-H
 DB      40H ;0.
 DB      79H ;1.
 DB      24H ;2.
 DB      30H ;3.
 DB      19H ;4.
 DB      12H ;5.
 DB      02H ;6.
 DB      58H ;7.
 DB      00H ;8.
 DB      3FH ;一.
 DB      37H ;二.
 DB      36H ;三.
 END
 | 
评分
查看全部评分
 |