📄 key.asm
字号:
;/**************************************************************************
;* *
;* 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 :TEMP0 ,TEMP1
; Function :MODE SW,AUTO SW,STEP SW scan
;--------------------------------------------------
KEY_SCAN:
BCF TIMER_FLAG, KEY_SCAN_FLAG
BANKSEL TRISC
MOVF TRISC, W
BANKSEL TMR0
MOVWF TEMP0
IORLW B'00110000'
BANKSEL TRISC
MOVWF TRISC
NOP
NOP
BANKSEL TMR0
MOVF PORTC, W
MOVWF TEMP1
CHECK_OTHER_SW:
BTFSC KEY_STATUS, KEY_VALID
GOTO KEY_SCAN_END ;WAIT KEY PROCESS
MOVF TEMP1,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 ;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 0x02
BTFSC STATUS, C
GOTO KEY_SCAN_END
BSF KEY_STATUS, KEY_VALID ;
BSF KEY_STATUS, KEY_BUSY
GOTO KEY_SCAN_END
SAVE_KEY_VAL:
MOVF KEY_VAL, W
MOVWF KEY_VAL_BUF
BCF 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 TEMP0,W
BANKSEL TRISC
MOVWF TRISC
BANKSEL TMR0
RETURN
;-------------------------------------------------------------
;
;---------KEY PROCESS------------------------------------------
;Name :KEY_PROCESS
;Input :KEY_STATUS,KEY_VAL_BUF
;Output :MODE_REG,SYS_STATUS
;TEMP REG :
;FUNCTION :根据键的响应处理发送模式和显示模式
KEY_PROCESS:
BCF TIMER_FLAG, KEY_PROCESS_FLAG
BTFSS KEY_STATUS, KEY_VALID
GOTO KEY_PROCESS_RET
MOVF KEY_VAL_BUF, W
XORLW MODE_CHECK
BTFSC STATUS, Z
GOTO MODE_PROCESS
XORLW MODE_CHECK | ONOFF_CHECK
BTFSC STATUS, Z
GOTO ON_OFF_PROCESS
KEY_PROCESS_RET:
BCF KEY_STATUS, KEY_VALID
CLRF KEY_VAL_BUF
RETURN ;键值无效,返回
MODE_PROCESS:
INCF MODE_REG
MOVF MODE_REG, W
XORLW SentModeMax
MOVLW 0x00
BTFSC STATUS, Z
MOVWF MODE_REG
BSF LCD_DRV_REQ, S_LCD_DRV_REQ
BSF LCD_DRV_REQ, G_LCD_DRV_REQ
BSF LCD_DRV_REQ, SCREEN_DRV_REQ
GOTO KEY_PROCESS_RET
ON_OFF_PROCESS:
BTFSS SYS_STATUS, UART_SENT_EN
GOTO SENT_EN_PROCESS ;因为发送使能已经关闭,所以需要开启
BSF LCD_DRV_REQ, R_LCD_DRV_REQ
BSF LCD_DRV_REQ, G_LCD_DRV_REQ
BCF SYS_STATUS, UART_SENT_EN ;因为发送使能已经开启,所以需要关闭
BCF SYS_STATUS, UART_BUSY
ON_OFF_PROCESS_RET:
GOTO KEY_PROCESS_RET
SENT_EN_PROCESS:
BSF SYS_STATUS, UART_BUSY
BSF SYS_STATUS, UART_SENT_EN
BSF LCD_DRV_REQ, S_LCD_DRV_REQ
BSF LCD_DRV_REQ, G_LCD_DRV_REQ
BSF LCD_DRV_REQ, SCREEN_DRV_REQ
GOTO ON_OFF_PROCESS_RET
;-----------KEY PROCESS END--------------------
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -