GOTO KEY_RET
UP1: BSF SG_S2,0 ;第一次有 UP 键按下标志
GOTO KEY_RET
NOP
UP2: BTFSC SG_S2,2
GOTO UP3
MOVLW 14H ;确认有长键延时 200 ms
MOVWF TIM_CUNT2
BSF SG_S2,2
GOTO KEY_RET
UP3: MOVF TIM_CUNT2,W
BTFSS STATUS,Z
GOTO KEY_RET
BSF BIT_SG,KEY_U ;
MOVLW 14H ;长按键周期200 ms
MOVWF TIM_CUNT2
GOTO KEY_RET
;
KEY_SCH: BTFSS SG_S1,1
GOTO KEY_SCH1
BSF BIT_SG,KEY_DOK ;确认有 DOWN 键按下并放开
GOTO KEY_RET
KEY_SCH1: BTFSS SG_S2,1
GOTO NOKEY
BSF BIT_SG,KEY_UOK ;确认有 UP 键按下并放开
GOTO KEY_RET
NOKEY: CLRF SG_S1 ;排除干扰
CLRF SG_S2
KEY_RET: NOP
NOP
RETURN
;//////////////// ;LED显示 /////////////////////////////////////////////////////////
DISPLAY: NOP
BTFSC SG_DIS,0
GOTO DIS_H
DIS_L: BCF PORTB,DSH ;显示低位
MOVF LED_L,W
MOVWF PORTB
BSF PORTA,DSL
BSF SG_DIS,0
GOTO DIS_RET
DIS_H: BCF PORTA,DSL ;显示高位
MOVF LED_H,W
MOVWF PORTB
BSF PORTB,DSH
BCF SG_DIS,0
DIS_RET: NOP
RETURN
;//////////////// LED显示值获取 /////////////////////////////////////////////////////////
LED_HL: CLRF LED_NH
CLRF LED_NL
MOVF CH_X,W
MOVWF WW
LED0: MOVLW 0AH
SUBWF WW,W
BTFSS STATUS,C ;SKPC
GOTO LED_OK ;WW小于10
MOVWF WW
INCF LED_NH ;高位加一
GOTO LED0
LED_OK: MOVF WW,W
MOVWF LED_NL ;余数做低位
MOVLW LED_TAB ;取表LED_TAB
MOVWF WW
MOVF LED_NL,W
ADDWF WW,W ;
CALL LED_VALU
MOVWF LED_L
MOVLW LED_TAB ;取表LED_TAB
MOVWF WW
MOVF LED_NH,W
ADDWF WW,W ;
CALL LED_VALU
MOVWF LED_H
RETURN
;//////////////////////////////////////////////////////////////////////////////////
;///////////////频道设定///////////////////////////////////////////////////////////
CXA: BCF STATUS,RP0
BCF STATUS,RP1 ;BANK0
CLRWDT
MOVF CH_X,W ;VHF/UHF 判断
MOVWF UVHF
SUBLW 0DH ;CH_X 是否小于13?
BTFSC STATUS,C ;SKPC
GOTO VHF_GET ;小于则转VHF_GET
MOVLW 15H ; 21
SUBWF UVHF,F ;频道值入UVHF
UHF_GET: MOVLW CXA_TAB2 ;取表CXA_TAB2
MOVWF WW
BCF STATUS,C ;CLRC
RLF UVHF,F
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU2
MOVWF DATA2
INCF UVHF
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU2
MOVWF DATA3
GOTO I2C_SEND
DECF UVHF ;DATA1,DATA4
MOVLW CXA_TAB3 ;取表CXA_TAB3
MOVWF WW
;BCF STATUS,C ;CLRC
;RLF UVHF,F
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU3
MOVWF DATA1
INCF UVHF
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU3
MOVWF DATA4
GOTO I2C_SEND
;////////////////////////////////////////////////////////////
VHF_GET: MOVLW CXA_TAB1 ;取表CXA_TAB1
MOVWF WW
BCF STATUS,C ;CLRC
RLF UVHF,F
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU1
MOVWF DATA2
INCF UVHF
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU1
MOVWF DATA3
GOTO I2C_SEND
DECF UVHF ;DATA1,DATA4
MOVLW CXA_TAB3 ;取表CXA_TAB4
MOVWF WW
;BCF STATUS,C ;CLRC
;RLF UVHF,F
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU3
MOVWF DATA1
INCF UVHF
MOVF UVHF,W
ADDWF WW,W ;
CALL CXA_VALU3
MOVWF DATA4
GOTO I2C_SEND
;/////////////////////////////////////////////////////////////////////////////
I2C_SEND: NOP
MOVLW B’11101100’
MOVWF DATA1
MOVLW 00H;B’01100010’
MOVWF DATA4
I2C_START: NOP
CLRWDT
BCF INTCON,GIE
MOVLW 04H ;发送4个字节
MOVWF CUNT2
CALL STA ;启动I2C总线
MOVLW MD_ADDR_W ;I2C地址
MOVWF WW
CALL WRBYT
CALL CACK
BTFSC BIT_SG,F0
GOTO I2C_START ;非应答位则重发
MOVLW DATA1 ;所发4字节数据的首地址
MOVWF FSR
WRDA: MOVF INDF,W
MOVWF WW
CALL WRBYT
CALL CACK
BTFSC BIT_SG,F0
GOTO I2C_SEND ;发送有误,重发
INCF FSR
DECFSZ CUNT2,F
GOTO WRDA
CALL STOP
BSF INTCON,GIE
RETURN
上一页 [1] [2] [3] [4] 下一页
本文关键字:通信 程序 键盘 PIC单片机,单片机-工控设备 - PIC单片机