单键实现单片机开关机

单键实现单片机开关机
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





相关文档
最新文档