黄金会员
主题
回帖0
积分7183
阅读权限40
注册时间2013-2-26
最后登录1970-1-1
在线时间 小时
|
本帖最后由 ldch 于 2013-8-16 10:14 编辑
;已改为GP1为长按控制,GP2为短按控制
processor 10F200
#include <P10F200.INC>
__CONFIG _MCLRE_OFF&_CP_ON&_WDT_OFF&_IntRC_OSC
;----------------------------------------------
CBLOCK 0X10 ;预定义开始地址
;---------------------------------------------------
DELY1 ;延时循环变量1
DELY2 ;延时循环变量2
KEY ;端口数据暂存
COUNT ;长按延时循环变量
;-------------------------------------
ENDC ;结束定义寄存器
;----------------------------------------------------------
LONGPRESS EQU 0FFH ;修改这个数值,可以调整长按延时
;----------------------------------------------------------
ORG 00H ;复位向量地址
STAR MOVLW 09H
TRIS GPIO
MOVLW 87H
OPTION ;允许弱上拉
CLRF GPIO
CLRF KEY
MOVLW LONGPRESS
MOVWF COUNT ;长按延时常数赋值
;-------------------------------------------------
LOOP
BTFSC GPIO,00H
GOTO LOOP
CALL DELAY20MS
BTFSC GPIO,00H
GOTO LOOP
LOOP1
BTFSS GPIO,00H
GOTO LOOP2
CALL DELAY20MS
BTFSS GPIO,00H
GOTO LOOP3
LOOP4
MOVLW LONGPRESS
MOVWF COUNT
SETGP2 ;短按出口,每次短按,翻转一次GP2状态
BTFSC KEY,02H
GOTO SETKEYGP2
BSF KEY,02H
MOVF KEY,W
MOVWF GPIO
GOTO LOOP
SETKEYGP2
BCF KEY,02H
MOVF KEY,W
MOVWF GPIO
GOTO LOOP
;-------------------------------------------------
LOOP2
CALL DELAY20MS
LOOP3
BTFSS GPIO,00H
GOTO LOOP5
GOTO LOOP4
LOOP5
DECFSZ COUNT,F
GOTO LOOP1
MOVLW LONGPRESS
MOVWF COUNT
SETGP1 ;长按出口,每次长按,翻转一次GP1状态
BTFSC KEY,01H
GOTO SETKEYGP1
BSF KEY,01H
MOVF KEY,W
MOVWF GPIO
GOTO LOOP6
SETKEYGP1
BCF KEY,01H
MOVF KEY,W
MOVWF GPIO
LOOP6 ;长按确定后,等待按键放开
BTFSS GPIO,00H
GOTO $-1
GOTO LOOP
;**************************************************
DELAY20MS
MOVLW 20H ;外循环常数
MOVWF DELY1 ;外循环寄存器
LP0
MOVLW 0E6H ;中循环常数
MOVWF DELY2 ;中循环寄存器
LP1
DECFSZ DELY2,F ;中循环寄存器递减
GOTO LP1 ;继续中循环
DECFSZ DELY1,F ;外循环寄存器递减
GOTO LP0 ;继续外循环
RETLW 00H
;----------------------------------------------------------
END |
|
|