单键实现单片机开关机
单键实现单片机开关机
1,控制流程,按下按键,Q1导通.单片机通电复位,进入工作.
2,检测 K-IN 是否低电平,否 不处理.是 单片机输出 K-OUT 为高电平,Q2导通,相当于按键长按.LED指示灯亮.
3,放开按键,K-IN 经过上拉电阻,为高电平.单片机可以正常工作.
4,在工作期间,按键按下,K-IN 为低电平,单片机检测到长按1秒,K-OUT 输出低电平,Q2截止.LED指示灯熄灭.放开按键,Q1截止,单片机断电.
5,通过软件处理,可以实现短按开机,长按关机.
单片机用PIC16F84A,通过简单的程序演示,证实此电路的可行性。
源程序:
LIST P=16F84A
#include
;PORTB,0=K_IN
;PORTB,1=K_OUT
;PORTB,2=LED
ORG 000H
;...........................
............................
RESET
BSF STATUS,5; //初始化程序
MOVLW 00H ; //定义脚位
MOVWF TRISA ;
MOVLW 01H ;
MOVWF TRISB ;
BCF STATUS,5 ; //初始化程序
MOVLW OFFH ; //定义脚位
MOVWF PORTA ;
MOVLW O1H ;
MOVWF PORTB ;
MOVLW 18H ; //分配比值
OPTION
;......................................
;......................................
LOOP
CLRWDT ; //短按开机
BTFSC PORTB,0 ; //按键检测
GOTO LOOP ;
CALL DELAY ; //防误处理
BTFSC PORTB,0 ;
GOTO LOOP ;
BSF PORTB,1 ; //正常开机
BSF PORTB,2 ; //LED ON
CALL DELAY
BTFSS PORTB,0 ; //按键长按
GOTO $-2 ; //原地打转
;......................................
;......................................
LOOS
CLRWDT ; //长按关机
MOVLW 64H ;
MOVWF 22H ;
BTFSC PORTB,0 ;
GOTO LOOS ;
CALL DELAY ;
BTFSC PORTB,0 ; //等待长按
GOTO LOOS ;
DECFSZ 22H,1 ;
GOTO $-4 ;
BCF PORTB,2 ; //LED OFF
;....................................
;....................................
LOOD
CALL DELAY ;
BTFSS BORTB,0 ; //等待放开
GOTO $-2 ;
MOVLW 01H ; //关机退出
MOVWF PO
RTB ;
GOTO $ ;
;....................................
;....................................
DELAY
CLRWDT ; //延时程序
MOVLW 64H ;
MOVWF 20H ;
D1
MOVLW 20H ;
MOVWF 21H ;
D2
DECFSZ 21H,1 ;
GOTO D2 ;
DECFSZ 20H,1 ;
GOTO D1 ;
RETLW 0 ;
;....................................
END