;------------------------------------------------------------------------ ; AQUOSをパソコンのモニタとして使うための入力切り替え赤外線リモコン ; 2009.10.24 naka ; 機能:(1) AQUOSの電源ON/OFF ; (2) AQUOSの入力をPCに切り替える ; (3) AQUOSの入力をTVに切り替える ; ; 本プログラムは下記サイトからの流用・改造です。オリジナル著作権はそれぞれ ; の作者に帰属します。 ; ; 大きく変えたのは以下の通り。 ; ・PIC12F683 (8MHz動作) → PIC12F675(4MHz動作)に変更(WAIT時間見直し) ; ・3つのタクトスイッチに対応した3機能にした ; ・割り込み処理、SLEEPなどを行わないようにした ; ・赤外LEDをTrでドライブするために、出力極性を変更 ; ;------------------------------------------------------------------------ ; diskless Fun's Wiki氏のAQUOS(アクオス)用マクロ・リモコン ; (http://wikiwiki.jp/disklessfun/?macro-remocon) ; ; 赤外線リモコン(マクロ用)(16のモードを選んで実行できる) ; ; 用途の例 ; タイマーを使って定期的に命令発行(タイマー使用) ; 長大なマクロ・実行(デモ等) ; 赤外線命令の動作確認 ; ; アクオスLC-32GD4付属リモコンの全命令を内包 ; ;赤外線送信ルーチンの著作権はRUU氏(http://www.mars.dti.ne.jp/~ogura/)に帰属します ;------------------------------------------------------------------------ errorlevel -205 ; Suppress message 205 errorlevel -207 ; Suppress message 207 errorlevel -302 ; Suppress message 302 errorlevel -305 ; Suppress message 305 list p=12f675 include CB = _INTRC_OSC_NOCLKOUT CB &= _WDT_OFF CB &= _PWRTE_OFF CB &= _MCLRE_OFF CB &= _CPD_OFF CB &= _CP_OFF __CONFIG CB ;--------------------------------------------------------------------------- ; Sub Routines ; 赤外線フォーマットを設定するルーチンは数が多いので省略 ; SubInitIR ; SEND_DATA RUUさんの学習リモコンから持ってきた上で小改造 ; SEND_BIT RUUさんの学習リモコンから持ってきた上で小改造 ; WAIT_CARRIER RUUさんの学習リモコンから持ってきた上で小改造 ; WAIT_15MS やまもっちのお部屋で入手したPICのWAIT計算機で自動生成 ; WAIT_75MS やまもっちのお部屋で入手したPICのWAIT計算機で自動生成 ; WAIT_400MS やまもっちのお部屋で入手したPICのWAIT計算機で自動生成 ;--------------------------------------------------------------------------- ; Declaration ;--------------------------------------------------------------------------- #define IR_OUT GPIO,4 ; 赤外線出力ピン BUF_ADR SET H'24' ; バッファアドレス CBLOCK H'20' ;; データメモリ(SAVE/LOAD対象分) BIT_LEN ; データビット総数 START_HI ; 以下、リモコンデータ各Hi/Lo長カウンタ START_LO STOP_HI DATA_BUF ; リモコンデータ本体 (adr=2chから6bytes) DATA_BUF1,DATA_BUF2,DATA_BUF3,DATA_BUF4,DATA_BUF5 ;; データメモリ(その他) CNT ; カウンタ(汎用) WORK ; いろいろつかう WORK2 ; 〃 BIT_CNT ; リモコンデータbitカウンタ HI_1 ; 以下、ビット送信インタフェース HI_0 LO_1 LO_0 HI_TIME LO_TIME @WAIT1 @WAIT1_IN @WAIT2 @WAIT2_IN @WAIT3 @WAIT3_IN ENDC org h'0' goto Init ;--------------------------------------------------------------------------- ; Interrupt Routin ;--------------------------------------------------------------------------- org h'4' goto Init ;-------------------------------------------- ; Init ;-------------------------------------------- ;---------------------------- ; Initialize PIC12F675 ;---------------------------- Init movlw B'00000111' movwf CMCON ; CMCON = CM0/CM1/CM2 ON (COMPARATOR OFF) bsf STATUS, RP0 ; Bank 1 clrf ANSEL movlw b'00001011' movwf TRISIO ; Port I/O Set bcf STATUS, RP0 ; Bank 0 bcf IR_OUT call SubInitIR ;----------------------------------- ; Main Loop ;----------------------------------- MAIN_LOOP BTFSS GPIO,0 ; タクトSW0状態 GOTO CMDPWR BTFSS GPIO,1 ; タクトSW1状態 GOTO SETPC BTFSS GPIO,3 ; タクトSW2状態 GOTO SETTV GOTO MAIN_LOOP ; CMDPWR CALL SubCmdPower BTFSS GPIO,0 GOTO $-1 CALL WAIT_15MS GOTO MAIN_LOOP ; SETPC CALL SubCmdInputChange ; 入力切り替え CALL SubCmdUp ; 上へ CALL SubCmdEnter ; 決定 BTFSS GPIO,1 GOTO $-1 CALL WAIT_15MS GOTO MAIN_LOOP ; SETTV CALL SubCmdInputChange ; 入力切り替え CALL SubCmdDown ; 下へ CALL SubCmdEnter ; 決定 BTFSS GPIO,3 GOTO $-1 CALL WAIT_15MS GOTO MAIN_LOOP ; 電源 SubCmdPower movlw b'01101000' movwf DATA_BUF4 movlw b'10001011' movwf DATA_BUF5 call SEND_DATA return ; 画面表示 SubCmdDisp movlw b'11011000' movwf DATA_BUF4 movlw b'10000000' movwf DATA_BUF5 call SEND_DATA return ; オフタイマー SubcmdOffTimer movlw b'01011000' movwf DATA_BUF4 movlw b'10001000' movwf DATA_BUF5 call SEND_DATA return ; Dolbyバーチャル SubCmdDolby movlw b'00001100' movwf DATA_BUF4 movlw b'10001001' movwf DATA_BUF5 call SEND_DATA return ; i.LINK SubCmdIlink movlw b'11111110' movwf DATA_BUF4 movlw b'01001000' movwf DATA_BUF5 call SEND_DATA return ; 3桁入力 SubCmdInputTreble movlw b'01011010' movwf DATA_BUF4 movlw b'01000110' movwf DATA_BUF5 call SEND_DATA return ; お好み選局/登録 SubCmdFavorite movlw b'11110001' movwf DATA_BUF4 movlw b'01000111' movwf DATA_BUF5 call SEND_DATA return ; 1 SubCmd1 movlw b'01110010' movwf DATA_BUF4 movlw b'01001100' movwf DATA_BUF5 call SEND_DATA return ; 2 SubCmd2 movlw b'11110010' movwf DATA_BUF4 movlw b'01000100' movwf DATA_BUF5 call SEND_DATA return ; 3 SubCmd3 movlw b'00001010' movwf DATA_BUF4 movlw b'01000011' movwf DATA_BUF5 call SEND_DATA return ; 4 SubCmd4 movlw b'10001010' movwf DATA_BUF4 movlw b'01001011' movwf DATA_BUF5 call SEND_DATA return ; 5 SubCmd5 movlw b'01001010' movwf DATA_BUF4 movlw b'01000111' movwf DATA_BUF5 call SEND_DATA return ; 6 SubCmd6 movlw b'11001010' movwf DATA_BUF4 movlw b'01001111' movwf DATA_BUF5 call SEND_DATA return ; 7 SubCmd7 movlw b'00101010' movwf DATA_BUF4 movlw b'01000001' movwf DATA_BUF5 call SEND_DATA return ; 8 SubCmd8 movlw b'10101010' movwf DATA_BUF4 movlw b'01001001' movwf DATA_BUF5 call SEND_DATA return ; 9 SubCmd9 movlw b'01101010' movwf DATA_BUF4 movlw b'01000101' movwf DATA_BUF5 call SEND_DATA return ; 10/0 SubCmd10 movlw b'11101010' movwf DATA_BUF4 movlw b'01001101' movwf DATA_BUF5 call SEND_DATA return ; 11 SubCmd11 movlw b'00011010' movwf DATA_BUF4 movlw b'01000010' movwf DATA_BUF5 call SEND_DATA return ; 12 SubCmd12 movlw b'10011010' movwf DATA_BUF4 movlw b'01001010' movwf DATA_BUF5 call SEND_DATA return ; 地上A SubCmdGroundAnalogue movlw b'01110001' movwf DATA_BUF4 movlw b'01001111' movwf DATA_BUF5 call SEND_DATA return ; 地上D SubCmdGroundDigital movlw b'10010001' movwf DATA_BUF4 movlw b'01000001' movwf DATA_BUF5 call SEND_DATA return ; BS SubCmdBS movlw b'01010001' movwf DATA_BUF4 movlw b'01001101' movwf DATA_BUF5 call SEND_DATA return ; CS1/2 SubCmdCS movlw b'11010001' movwf DATA_BUF4 movlw b'01000101' movwf DATA_BUF5 call SEND_DATA return ; テレビ/ラジオ/データ SubCmdData movlw b'11010110' movwf DATA_BUF4 movlw b'01000010' movwf DATA_BUF5 call SEND_DATA return ; 消音 SubCmdMute movlw b'11101000' movwf DATA_BUF4 movlw b'10000011' movwf DATA_BUF5 call SEND_DATA return ; 音量UP SubCmdVolumelUp movlw b'00101000' movwf DATA_BUF4 movlw b'10001111' movwf DATA_BUF5 call SEND_DATA return ; 音量DOWN SubCmdVolumeDown movlw b'10101000' movwf DATA_BUF4 movlw b'10000111' movwf DATA_BUF5 call SEND_DATA return ; 選局UP SubCmdChannelUp movlw b'10001000' movwf DATA_BUF4 movlw b'10000101' movwf DATA_BUF5 call SEND_DATA return ; 選局DOWN SubCmdChannelDown movlw b'01001000' movwf DATA_BUF4 movlw b'10001001' movwf DATA_BUF5 call SEND_DATA return ; データ連動 SubCmdSync movlw b'01111010' movwf DATA_BUF4 movlw b'01000100' movwf DATA_BUF5 call SEND_DATA return ; 入力切換 SubCmdInputChange movlw b'11001000' movwf DATA_BUF4 movlw b'10000001' movwf DATA_BUF5 call SEND_DATA return ; 番組情報 SubCmdProgramInfo movlw b'11111010' movwf DATA_BUF4 movlw b'01001100' movwf DATA_BUF5 call SEND_DATA return ; 番組表 SubCmdProgramSche movlw b'00000110' movwf DATA_BUF4 movlw b'01001111' movwf DATA_BUF5 call SEND_DATA return ; 裏番組表 SubCmdOtherProgram movlw b'10101110' movwf DATA_BUF4 movlw b'01001101' movwf DATA_BUF5 call SEND_DATA return ; メニュー SubCmdMenu movlw b'00100011' movwf DATA_BUF4 movlw b'10000100' movwf DATA_BUF5 call SEND_DATA return ; 上 SubCmdUp movlw b'11101010' movwf DATA_BUF4 movlw b'10000001' movwf DATA_BUF5 call SEND_DATA return ; 左 SubCmdLeft movlw b'11101011' movwf DATA_BUF4 movlw b'10000000' movwf DATA_BUF5 call SEND_DATA return ; 右 SubCmdRight movlw b'00011011' movwf DATA_BUF4 movlw b'10001111' movwf DATA_BUF5 call SEND_DATA return ; 下 SubCmdDown movlw b'00000100' movwf DATA_BUF4 movlw b'10000001' movwf DATA_BUF5 call SEND_DATA return ; 決定 SubCmdEnter movlw b'01001010' movwf DATA_BUF4 movlw b'10001011' movwf DATA_BUF5 call SEND_DATA return ; 終了 SubCmdEnd movlw b'10101111' movwf DATA_BUF4 movlw b'10000000' movwf DATA_BUF5 call SEND_DATA return ; 戻る SubCmdReturn movlw b'00100111' movwf DATA_BUF4 movlw b'10000000' movwf DATA_BUF5 call SEND_DATA return ; 青 SubCmdBlue movlw b'00000001' movwf DATA_BUF4 movlw b'01001000' movwf DATA_BUF5 call SEND_DATA return ; 赤 SubCmdRed movlw b'10000001' movwf DATA_BUF4 movlw b'01000000' movwf DATA_BUF5 call SEND_DATA return ; 緑 SubCmdGreen movlw b'01000001' movwf DATA_BUF4 movlw b'01001100' movwf DATA_BUF5 call SEND_DATA return ; 黄 SubCmdYellow movlw b'11000001' movwf DATA_BUF4 movlw b'01000100' movwf DATA_BUF5 call SEND_DATA return ; 2画面 SubCmdTwoScreens movlw b'00111010' movwf DATA_BUF4 movlw b'10001100' movwf DATA_BUF5 call SEND_DATA return ; デジタル登録 SubCmdDigitalRegist movlw b'00010110' movwf DATA_BUF4 movlw b'01001110' movwf DATA_BUF5 call SEND_DATA return ; GR SubCmdGhostReduction movlw b'00010010' movwf DATA_BUF4 movlw b'01001010' movwf DATA_BUF5 call SEND_DATA return ; AVポジション SubCmdAvPosition movlw b'11100111' movwf DATA_BUF4 movlw b'10001100' movwf DATA_BUF5 call SEND_DATA return ; 操作切換 SubCmdOperationChange movlw b'10010000' movwf DATA_BUF4 movlw b'01000000' movwf DATA_BUF5 call SEND_DATA return ; 映像切換 SubCmdImageChange movlw b'01100110' movwf DATA_BUF4 movlw b'01001001' movwf DATA_BUF5 call SEND_DATA return ; 音声切換 SubCmdVoiceChange movlw b'00011000' movwf DATA_BUF4 movlw b'10001100' movwf DATA_BUF5 call SEND_DATA return ; 字幕 SubCmdTitle movlw b'11100110' movwf DATA_BUF4 movlw b'01000001' movwf DATA_BUF5 call SEND_DATA return ; 静止 SubCmdStill movlw b'10011010' movwf DATA_BUF4 movlw b'10000110' movwf DATA_BUF5 call SEND_DATA return ; 画面サイズ SubCmdScreenSize movlw b'10101011' movwf DATA_BUF4 movlw b'10000100' movwf DATA_BUF5 call SEND_DATA return ;-------------------------------------------- SubInitIR movlw b'00110000' movwf BIT_LEN movlw b'00000111' movwf HI_1 movwf HI_0 movlw b'00010111' movwf LO_1 movlw b'00001001' movwf LO_0 movlw b'00111110' movwf START_HI movlw b'00011110' movwf START_LO movlw b'00001000' movwf STOP_HI movlw b'01010101' movwf DATA_BUF movlw b'01011010' movwf DATA_BUF1 movlw b'11110001' movwf DATA_BUF2 movlw b'01001000' movwf DATA_BUF3 return ;;;;;;;;;;;; SEND_DATA ;;;;;;;;;;;; SEND_DATA ; データバッファ内容を赤外線LEDで送信する call SEND_DATA_SUB ; 2回送信の為に追加 call WAIT_75MS ; 2回送信の為に追加 call SEND_DATA_SUB ; 2回送信の為に追加 call WAIT_400MS ; コマンドの連続を可能とする為に追加 return ; 2回送信の為に追加 SEND_DATA_SUB ; 2回送信の為に追加 MOVF BIT_LEN,W MOVWF WORK2 MOVLW BUF_ADR MOVWF FSR MOVLW D'8' MOVWF BIT_CNT MOVF INDF,W MOVWF WORK SEND_MAIN MOVF START_HI,W MOVWF HI_TIME MOVF START_LO,W MOVWF LO_TIME CALL SEND_BIT SEND_LOOP BTFSC WORK,7 GOTO SEND_1 SEND_0 MOVF HI_0,W MOVWF HI_TIME MOVF LO_0,W MOVWF LO_TIME CALL SEND_BIT GOTO BYTE_E_CHK SEND_1 MOVF HI_1,W MOVWF HI_TIME MOVF LO_1,W MOVWF LO_TIME CALL SEND_BIT BYTE_E_CHK DECFSZ BIT_CNT,F GOTO SEND_SFT INCF FSR,F MOVF INDF,W MOVWF WORK MOVLW D'8' MOVWF BIT_CNT GOTO SEND_E_CHK SEND_SFT RLF WORK,F SEND_E_CHK DECFSZ WORK2,F GOTO SEND_LOOP NOP NOP MOVF STOP_HI,W MOVWF HI_TIME MOVF STOP_HI,W MOVWF LO_TIME CALL SEND_BIT SEND_END RETURN ;;;;;;;;;;;; SEND_BIT ;;;;;;;;;;;; SEND_BIT ; 1bit分のデータを送信する SEND_B_HI ; 'Hi'信号 BSF IR_OUT CALL WAIT_CARRIER BCF IR_OUT CALL WAIT_CARRIER BSF IR_OUT CALL WAIT_CARRIER BCF IR_OUT CALL WAIT_CARRIER DECFSZ HI_TIME,F GOTO SEND_B_HI SEND_B_LO ; 'Lo' CALL WAIT_CARRIER CALL WAIT_CARRIER CALL WAIT_CARRIER CALL WAIT_CARRIER NOP NOP NOP NOP DECFSZ LO_TIME,F GOTO SEND_B_LO RETURN ;;;;;;;;;;;; WAIT_CARRIER ;;;;;;;;;;;; WAIT_CARRIER ; 赤外線キャリアの半サイクル時間を消費 MOVLW D'3' MOVWF CNT LOOP_CARR DECFSZ CNT,F GOTO LOOP_CARR RETURN WAIT_15MS MOVLW D'22' MOVWF @WAIT1_IN MOVLW D'52' MOVWF @WAIT2_IN MOVLW D'2' MOVWF @WAIT3_IN CALL @WAIT_3LOOP NOP NOP RETURN WAIT_75MS MOVLW D'91' MOVWF @WAIT1_IN MOVLW D'91' MOVWF @WAIT2_IN MOVLW D'1' MOVWF @WAIT3_IN CALL @WAIT_3LOOP NOP RETURN WAIT_400MS MOVLW D'78' MOVWF @WAIT1_IN MOVLW D'47' MOVWF @WAIT2_IN MOVLW D'26' MOVWF @WAIT3_IN CALL @WAIT_3LOOP NOP RETURN ;****************** @WAIT_3LOOP MOVF @WAIT1_IN,W MOVWF @WAIT1 @WAIT3_T3 MOVF @WAIT2_IN,W MOVWF @WAIT2 @WAIT3_T2 MOVF @WAIT3_IN,W MOVWF @WAIT3 @WAIT3_T1 DECF @WAIT3 BTFSS STATUS,Z GOTO @WAIT3_T1 DECF @WAIT2 BTFSS STATUS,Z GOTO @WAIT3_T2 DECF @WAIT1 BTFSS STATUS,Z GOTO @WAIT3_T3 RETURN END