找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2234|回复: 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 单片机教程网

快速回复 返回顶部 返回列表