|
发表于 2008-3-28 17:55:51
|
显示全部楼层
单键实现单片机开关机
1,控制流程,按下按键,Q1导通.单片机通电复位,进入工作.
2,检测 K-IN 是否低电平,否 不处理.是 单片机输出 K-OUT 为高电平,Q2导通,相当于按键长按.LED指示灯亮.
3,放开按键,K-IN 经过上拉电阻,为高电平.单片机可以正常工作.
4,在工作期间,按键按下,K-IN 为低电平,单片机检测到长按1秒,K-OUT 输出低电平,Q2截止.LED指示灯熄灭.放开按键,Q1截止,单片机断电.
5,通过软件处理,可以实现短按开机,长按关机.
单片机用PIC16F84A,通过简单的程序演示,证实此电路的可行性.
点击此处打开 ourdev_241142.jpg(文件大小:942K,只有300K以内的图片才能直接显示) (原文件名:LED.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_241143.jpg)
(原文件名:LED2.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_241144.jpg)
(原文件名:LED3.jpg)
;...............................
LIST P=16F84A
#include <p16F84A.inc>
;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 0FFH ;定义脚位
MOVWF PORTA ;
MOVLW 01H ;
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 PORTB,0 ;等待放开
GOTO $-2 ;
MOVLW 01H ;关机退出
MOVWF PORTB ;
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 |
|