欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2318|回復: 3
打印 上一主題 下一主題
收起左側

單片機紅外遙控切換視頻界面程序

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 yangxihai128 于 2019-10-17 16:05 編輯

;===========================================================
;硬盤盒紅外遙控源程序(HT48R05A-1方案)
;===========================================================
;用戶識別碼為:00H 0FFH
;POWER鍵8位數據碼: 14H       用于播放硬盤盒
;COPY鍵8位數據碼:  41H       用于接通USB口
;以下所有電平的描述都是針對接收端而言的(發射端則是反相的)
;晶振為4MHz
;===========================================================
;掩膜選項
;WDT:Enable
;CLRWDT:One clear instruction
;WDT clock source:T1(System clock/4)
;Wake-up PA0-7:Non wake-up
;Pull-high PA-PC:Non pull-high
;Output type:PB0-PB1:CMOS
;LVR:Enable
;OSC:Crystal
;==========================================================
INCLUDE HT48R05A-1.INC
DATA.SECTION 'DATA'
;========================定義變量=================================================
          ADD1 DB 60H              ;ADD1為前8位用戶識別碼,接收到的臨時數據
          ADD2 DB 61H              ;ADD2為后8位用戶識別碼,接收到的臨時數據
         DATA1 DB 62H              ;8位數據碼,接收到的臨時數據
         DATA2 DB 63H              ;8位數據的反碼,接收到的臨時數據

         USER1 DB ?                ;用戶識別碼高8位,原始數據
         USER2 DB ?                ;用戶識別碼低8位,原始數據
    POWER_DATA DB ?                       ;POWER鍵數據碼,原始數據
     COPY_DATA DB ?                      ;COPY鍵數據碼,原始數據
        COU122 DB ?                ;靜音廷時用
          COU8 DB ?                ;電源接通廷時用,8個周期約為64mS
          BUF1 DB ?                ;中斷數據臨時存儲
          BUF2 DB ?                ;中斷數據臨時存儲
            R2 DB ?
            R3 DB ?
            R6 DB ?
            R7 DB ?
           
       USB_VCC EQU PA.0            ;電腦電源檢測端,"1"表示電腦正在工作,"0"表示電腦關機
           LED EQU PA.4            ;低電平時亮,表示硬盤盒處于工作狀態,滅則為關機狀態
          IRIN EQU PA.6            ;紅外信號檢測端
          MCUC EQU PA.1            ;音視頻信號切換端,高電平時切換到硬盤盒,低電平時切換到電腦
         MCUSP EQU PA.2            ;靜音控制,高電平時靜音,低電平時恢復正常
     POWER_HDD EQU PB.0            ;電源切換,高電平時接通HDD電源,低電平斷開
     POWER_USB EQU PA.3            ;電源切換,高電平時接通USB電源,低電平斷開
         POWER DBIT                ;硬盤盒播放狀態位,“1”表示硬盤盒正處于播放狀態,“0”表示為關機
          COPY DBIT                ;USB狀態位,“1”表示正處于讀寫硬盤盒狀態,“0”表示關機
          MUTE DBIT                ;靜音狀態位,“1”表示靜音,“0”則無
          COU  DBIT                ;計數開關,“1”打開,“0”關閉
                     
CODE.SECTION 'CODE'         
;===========================================================
               ORG 00H
                JMP START

               NOP
               NOP
               JMP 00H             ;陷阱

               ORG 08H
               JMP TIMER           ;定時器中斷入口

               NOP
               NOP
               JMP 00H             ;陷阱
;=初始化====================================================
            
;---------------中斷初始化----------------------------------
         START:
               MOV A,10000111B
               MOV TMRC,A             ;將定時器均設為計數定時模式,預分頻數為256,
               CLR TMR                ;裝初值,定時長=256*64*0.25uS=16384uS

               SET INTC.0             ;開放中斷
               SET INTC.2
               
               ;MOV A,110B
               ;MOV WDTS,A             將看門狗的分頻比設為1:64,在電壓為5V時,溢出周期是65uS*256*64=1S
                           
;-----------------------------------------------------------
;---------------變量初始化----------------------------------
               CLR ADD1              ;將臨時接收數據區清零
               CLR ADD2              ;將臨時接收數據區清零
               CLR DATA1             ;將臨時接收數據區清零
               CLR DATA2             ;將臨時接收數據區清零
               CLR USER1             ;用戶識別碼高8位置初值
               SET USER2             ;用戶識別碼低8位置初值
               MOV A,14H
               MOV POWER_DATA,A      ;開關機鍵數據碼置初值
               MOV A,41H
               MOV COPY_DATA,A       ;切換鍵數據碼置初值
               SET LED               ;關LED,表示為關機狀態
               SET IRIN              ;設置IRIN端為輸入狀態
               CLR MCUC              ;切換在電腦信號接通狀態
               CLR MCUSP             ;關靜音
               CLR MUTE              ;無靜音標志
               CLR COU               ;關閉計數開關
               CLR POWER_HDD         ;關HDD電源
               CLR POWER_USB         ;關USB電源
               CLR POWER             ;設為關機狀態
               CLR COPY              ;設為電腦接通狀態
               MOV A,255
               MOV COU122,A        
               MOV A,8
               MOV COU8,A

               CLR PAC               ;將PA.6設為輸入,其它端口設為輸出
               SET PAC.6
               CLR PBC
                           SET PAC.0
;-----------------------------------------------------------
;===========================================================


          MAIN:
               SZ IRIN              ;遙控掃描
               JMP MAIN             ;在正常無遙控信號時,紅外接收頭輸出是高電平,程序一直在循環。
;===========================================================
;解碼程序
;以下對遙控信號的9000 微秒的初始低電平信號的識別
            IR:
               MOV A,10
               MOV R6,A
         IR_SB:
               CALL DELAY840        ;調用0.84ms延時子程序
;JB IRIN,IR_ERROR
               SZ IRIN
               JMP IR_ERROR
                     
               SDZ R6               ;重復10 次,目的是檢測在8820 微秒內如果出現高電平(誤碼)就轉到錯誤處理程序
               JMP IR_SB
               
;(51)JNB IRIN, $
          IR0: SNZ IRIN             ;一直等到9 毫秒低電平引導脈沖結束
               JMP IR0
               CALL DELAY2400       ;2.25ms+0.25ms/2=2.375ms(約為2.4ms),結束碼為2.25ms的高電平加0.25ms的低電平
;(51)JNB IRIN,IR8  
               SNZ IRIN
               JMP IR8              ;如這里為低電平,則接收信號為連發碼
               CALL DELAY2400       ;延時4.8ms(前面還有2400us)避開4.5ms的結果碼

;---------------------------------- 以下是32數據碼的解碼 ,即0和1的識別
               MOV A,60H  
               MOV MP,A             ;設定(ADD1)為起始RAM 區,用于存放接收到的32位數據碼
               MOV A,4
               MOV R2,A             ;32位數據碼所需RAM空間的長度
           IR2:
               MOV A,8
               MOV R3,A            ;即一個字節的位數
;(51)JNB IRIN,$  
           IR4:SNZ IRIN
               JMP IR4             ;避開0.56ms低電平,等待高電平信號(以此判斷0與1)
               CALL DELAY840       ;高電平開始后用0.84ms的時間尺去判斷信號此時的高低電平狀態
;MOV C,IRIN         
;JNC IR6      
               SZ IRIN
               JMP IR41
               CLR C
               JMP IR42
          IR41:SET C
          IR42:SZ IRIN             ;如果IRIN 為0 就跳轉到IR6
               CALL DELAY1000      ;如果為1,則延時避開bit“1”的高電平
           IR6:RRC IAR             ;將C中的值0 或1 移入MP所指存儲器的最低位
;DJNZ R3,IR4      
               SDZ R3              ;接收地址碼的高8位
               JMP IR4
               
               INC MP              ;指針加1,換下一個RAM
;DJNZ R2,IR2        
               SDZ R2              ;接收完16 位地址碼和8 位數據碼和8 位數據,存放在ADD1開始的4個連續的RAM 中,解碼成功
               JMP IR2
               JMP IR_DONE

               NOP
               NOP
               JMP 00H             ;陷阱

           IR8:                    ;這里為重復碼執行處
                                   ;按住遙控按鍵時,每過108ms 就到這里來
               JMP MAIN

               NOP
               NOP
               JMP 00H             ;陷阱
      IR_ERROR:                    ;錯誤處理
               JMP MAIN            ;退出解碼子程序

               NOP
               NOP
               JMP 00H             ;陷阱
               

;===========================================================
       IR_DONE:
;這里還要判斷系統碼或用戶碼,用于識別不同的遙控器
               MOV A,ADD1
               SUB A,USER1
               SZ ACC
               JMP IR_ERROR               ;用戶碼1不對則退出           
               MOV A,ADD2
               SUB A,USER2
               SZ ACC
               JMP IR_ERROR                ;用戶碼2不對則退出
;判斷兩個數據碼是否相反               
               CPLA DATA1
               SUB A,DATA2
               SZ ACC
               JMP IR_ERROR                ;兩個數據碼不相反則退出
;遙控執行部份      
               SET TMRC.4                  ;起動定時器,供靜音與電源轉換時定時用
               MOV A,DATA1
               SUB A,POWER_DATA
               SZ ACC
               JMP ROMT1
               
               SZ POWER                    ;POWER鍵有按下則將POWER標志取反
               JMP ROMT00                  ;
               SET POWER                   ;
               JMP ROMT01                  ;
        ROMT00:CLR POWER                   ;
        ROMT01:
               SNZ POWER
               JMP ROMT71                   ;關機則跳到ROMT8                           
;JNB POWER,ROMT8            ;關機則跳到ROMT8
               CLR LED                    ;點亮LED
               
               ;關USB狀態
               CLR COPY                  
               CLR POWER_USB
               
               ;開播放器
               SET MCUSP                  ;靜音  
               MOV A,255                  ;置靜音初值,可廷時4S左右
               MOV COU122,A            
               SET MUTE                   ;靜音狀態位置1
               MOV A,8
               MOV COU8,A
               SET COU                    ;打開計數開關
               CLR POWER_HDD
               CLR POWER_USB
               JMP ROMT12                 ;然后跳到ROMT12
               
               NOP
               NOP
               JMP 00H                   ;陷阱
               
       ROMT1:  
;JB USB_VCC,ROMT4           ;如果電腦處于開機狀態下則響應COPY鍵,否則不響應
               SZ USB_VCC
               JMP ROMT4
;JB COPY,ROMT8              ;COPY為1則表示關電腦前USB是連通的,所以需要先關硬盤盒(也就關了USB)
               SZ COPY
               JMP ROMT8
               JMP ROMT12
               
               NOP
               NOP
               JMP 00H                   ;陷阱
              
       ROMT4:         
               MOV A,DATA1
;CJNE A,COPY_DATA,ROMT12
               SUB A,COPY_DATA
               SZ ACC
               JMP ROMT12                  
               SZ COPY                  ;COPY鍵有按下,則將COPY標志取反
               JMP ROMT41               ;
               SET COPY                 ;
               JMP ROMT43               ;
        ROMT41:CLR COPY                 ;
        ROMT43:
;JNB COPY,ROMT8            ;關機則跳到ROMT8
               SNZ COPY
               JMP ROMT8
               CLR LED
               ;關播放器
               CLR POWER_HDD
              
               ;開USB
               SNZ POWER
               JMP ROMT7
               CLR POWER                  ;清除POWER,表示已經轉換到USB狀態
               SET MCUSP                  ;靜音
               MOV A,60                   ;置靜音初值,可廷時1S
               MOV COU122,A
               SET MUTE                   ;靜音狀態位置1
         ROMT7:MOV A,8
               MOV COU8,A
               SET COU                    ;打開計數開關
               CLR POWER_HDD
               CLR POWER_USB
               JMP ROMT12                 ;然后跳到ROMT12

               NOP
               NOP
               JMP 00H                   ;陷阱
            
        ROMT71:SET MCUSP                  ;靜音
               MOV A,60                  ;置靜音初值,可廷時1S
               MOV COU122,A
               SET MUTE                   ;靜音狀態位置1

         ROMT8:SET LED                   ;關LED
               CLR MCUC                  ;切換在電腦信號接通狀態              
               CLR POWER_HDD             ;關HDD電源
               CLR POWER_USB             ;關USB電源
               CLR POWER                 ;設為關機狀態
               CLR COPY                  ;設為關機狀態

        ROMT12:
               CLR ADD1                  ;將臨時接收數據區清零
               CLR ADD2                  ;將臨時接收數據區清零
               CLR DATA1                 ;將臨時接收數據區清零
               CLR DATA2                 ;將臨時接收數據區清零
               JMP MAIN

               NOP
               NOP
               JMP 00H                   ;陷阱

;==============定時中斷執行程序=============================
      
    TIMER PROC
               MOV BUF1,A                ;
               MOV A,STATUS              ;
               MOV BUF2,A                ;暫存寄存器數據
               
               SNZ MUTE                  ;廷時后關靜音
               JMP TIMER2
               DEC COU122
               SZ COU122
               JMP TIMER2
               CLR TMRC.4                ;關定時器
               CLR MCUSP
               CLR MUTE
               
               
        TIMER2:SNZ COU                   ;廷時8*8.192mS后切換電源與音視頻
               JMP TIMER_END                                         
               DEC COU8
               SZ COU8
               JMP TIMER_END
               MOV A,8
               MOV COU8,A
               CLR COU
               SNZ POWER
               JMP TIMER4
               CLR POWER_USB
               SET POWER_HDD
               SET MCUC
               JMP TIMER_END
      TIMER4:
               SNZ COPY
               JMP TIMER_END
               CLR POWER_HDD
               SET POWER_USB
               CLR MCUC                 
    TIMER_END:
               MOV A,BUF2               ;返回寄存器數據   
               MOV STATUS,A             ;
               MOV A,BUF1               ;
               RETI
    TIMER ENDP           
;===========================================================

               NOP
               NOP
               JMP 00H                   ;陷阱

;=============延時子程序====================================
;延時0.84ms
      DELAY840:
               MOV A,167
               MOV R7,A
               NOP
    DELAY840_A:
               NOP
               NOP
               SDZ R7
               JMP DELAY840_A
               RET
;-----------------------------------------------------------
               NOP
               NOP
               JMP 00H                   ;陷阱
;延時1ms
     DELAY1000:
               MOV A,199
               MOV R7,A
               NOP
   DELAY1000_A:
               NOP
               NOP
               SDZ R7
               JMP DELAY1000_A
               RET
;-----------------------------------------------------------
               NOP
               NOP
               JMP 00H                    ;陷阱

;延時2.4ms
     DELAY2400:
               MOV A,240
               MOV R7,A
   DELAY2400_A:
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               NOP
               SDZ R7
               JMP DELAY2400_A
               RET
;-----------------------------------------------------------
               NOP
               NOP
               JMP 00H                     ;陷阱
;===========================================================

               END

接口電路.png (37.34 KB, 下載次數: 30)

接口電路

接口電路

MCU電路.png (32.91 KB, 下載次數: 28)

控制部分

控制部分
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-10-17 15:53 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

板凳
ID:451677 發表于 2019-10-17 15:54 | 只看該作者
第一次開發案子寫的程序,效果不錯
回復

使用道具 舉報

地板
ID:385637 發表于 2019-10-17 16:43 | 只看該作者
用繪編寫的,厲害!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表