📄 keyscan.asm.bak
字号:
;/**************************************************************************
;* *
;* Copyright (c) 2006 by JINRUN Technology Co., Ltd. *
;* Title : FPPA TM demo board---PIC PARTY
;* Content: AD,LCM Drive,Key input,LED flash,etc.,
;* MCU : PIC16F877A(PIC),PDK80C08(PDK)[FPPA TM]
;* LCD : RT1602C
;* OSC : 8MHz(ext. HT)
;* WDT : OFF
;* Author : Raker.Yang *
;* FPPA TM 简介:FPPA TM是世界首创的多核心单晶片,所有RAM和ROM却能够共享
;* 目前支持8个核心(8路独立PC,STACK,ACC等)
;* 既然有了独立多核心,跑多任务程序也就更简单了。
;* 更重要的是,它可以非常方便的扩展MCU外围,如,PWM,IIC,UART等。
;* 如果你对FPPA TM技术感兴趣,欢迎访问笔者博客 http://gongkong.gkbk.com
;* 或加入作者QQ:595142970, QQ群25644462
;* 同时欢迎各路商家前来进行方案合作!
;*
;* 声明:本资料仅供个人学习PIC或FPPA TM的软件设计者参考用,任何人都可以转载此资料。
;* 但任何单位或个人都不能将此资料作为商业用品。本资料可能存在一些缺陷,
;* 如果你将本资料用于产品,所引起的一切后果,均由使用者承担
;* *
;**************************************************************************/
;
;
;--------KEY SCAN SUBROUTINE------------------------
; Name :KEY_SCAN
; Input :RC4,RC5,RC6(AUTO, STEP, MODE)
; Output :MODE_REG,MODE_CNT,KEY_VAL,KEY_VAL_BUF(valid value)
; Temp REG :TEMPI0 ,TEMPI1
; Function :MODE SW,AUTO SW,STEP SW scan
;--------------------------------------------------
KEY_SCAN:
BANKSEL TRISC
MOVF TRISC, W
BANKSEL TMR0
MOVWF TEMPI0
IORLW B'00110000'
BANKSEL TRISC
MOVWF TRISC
NOP
NOP
BANKSEL TMR0
MOVF PORTC, W
MOVWF TEMPI1
; BTFSS TEMPI1, 6 ;CHECK MODE SW
; GOTO NO_MODE_SW_IN
; INCF MODE_CNT, D
; MOVF MODE_CNT, W
; SUBLW 0x14 ;> 20 TIMES?
; BTFSC STATUS , C
; GOTO CHECK_OTHER_SW
;HI_ACTIVE:
; MOVF MODE_CNT, W
; XORLW 0x15
; MOVLW 0x14
; BTFSC STATUS, Z
; MOVWF MODE_CNT
; MOVLW 0x01
; MOVWF MODE_REG
; GOTO CHECK_OTHER_SW
;NO_MODE_SW_IN:
; DECFSZ MODE_CNT
; GOTO CHECK_OTHER_SW
; MOVLW 0x01
; MOVWF MODE_CNT
; CLRF MODE_REG
CHECK_OTHER_SW:
BTFSC KEY_STATUS, KEY_VALID
GOTO KEY_SCAN_END ;WAIT KEY PROCESS
MOVF TEMPI1,W
ANDLW B'00110000'
IORLW B'11001111'
XORLW B'11111111'
BTFSC STATUS, Z ;Z = 1:NO KEY
GOTO NO_KEY_INPUT
BTFSC KEY_STATUS, KEY_BUSY
GOTO KEY_SCAN_END
MOVWF KEY_VAL
SUBWF KEY_VAL_BUF,W
BTFSS STATUS,Z ;Z = 1: EQU LAST TIME
GOTO SAVE_KEY_VAL
INCF KEY_CNT
MOVF KEY_CNT, W
SUBLW 0x0a
BTFSS STATUS, C
BSF KEY_STATUS, KEY_VALID ;
GOTO KEY_SCAN_END
SAVE_KEY_VAL:
MOVF KEY_VAL, W
MOVWF KEY_VAL_BUF
BSF KEY_STATUS, KEY_BUSY
GOTO KEY_SCAN_END
NO_KEY_INPUT:
DECFSZ KEY_CNT
GOTO KEY_SCAN_END
BCF KEY_STATUS, KEY_BUSY
MOVLW 0x01
MOVWF KEY_CNT
KEY_SCAN_END:
MOVF TEMPI0,W
BANKSEL TRISC
MOVWF TRISC
BANKSEL TMR0
RETURN
;-------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -