⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wanneng_remote.c

📁 随着家用电器种类的增多
💻 C
📖 第 1 页 / 共 5 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
随着家用电器种类的增多,
    遥控器的种类也随之增多,
    由于不同种类的遥控器不能相互代替,
    这给人们的生活带来些不便.若能有一种万能遥控器,
    它可同时控制不同类型的TV、 VCR、CBL、DVD、VCD、AMP、CD、TAPE、TUNER等,
    并且价格与现在的专用遥控器价格相当,
    这将方便人们的生活,
    改善人们的生活素质.

1、
     遥控键码发射方式分析





每种遥控发码都有自己的一套方式,以tv001为例,他的发码方式为:

7位数据码---------------延时--------------循环

 遥控器先发数据码,再发延时,
    若是只按键一次则发射结束,
    若按着键不放,
    则不断地发数据码和延时.这款遥控器只有一个数据码和延时,但有些型号有引导码、有的有用户码、有的有两个数据码、还有的两个数据码不相同等等,为了使程序结构的简单化,我们把所有这些码都看成是逻辑波,然后把他们一段段的发出去,最后根据循环位置来循环。

2、
     遥控器发码的调制方式分析





五种调制方式:

一、时间调制格式,是红外发射波形中最常用的一种调制格式。





二、相位调制格式,通常以高电平在逻辑中的位置不同来表示逻辑0与逻辑1。





三、电平调制格式,分别以每一个低电平或高电平来表示逻辑0与逻辑1,而且高低电平宽度通常相同。





四、无载波调制格式,波形的组成通常由多个单个的电平脉冲组成,且电平脉冲宽度通常很小。





五、特殊调制格式,此调制格式的逻辑表示方法通常为非常规的,除了逻辑0与逻辑1外,通常另外定有为逻辑2,逻辑3……





根据这五种调制方式我们采取模块化程序处理,分别对每种调制方式编写子程序进行处理。





3、
     遥控器数据存储结构分析





要能实现对8种设备1千多种型号的控制,
    就必须在遥控器中保存有这些数据(保存在ROM中),
    由于数据多,
    为减少占用ROM空间,
    就必须对其数据的存储结构进行优化.经过分析研究,
    决定每一种型号采用不同的数据结构,
    而每一遥控键码数据的初始地址存入一线性表中,
    遥控器根据型号从线性表中读取键码数据初始地址,
    初始地址的第一个字节为调制模式,
    根据该调制模式调用相应的发射程序模块,
    发射程序模块首先根据其数据结构读取时间参数和键的代码,
    根据时间参数发射键的代码.

一般如果要做成一个万能的摇控器你的前提条件就是要了解他们的调制方式,再就是买个万能的摇控器测出他们的发码方式(这个要花大量时间,也是必须要做的)



由于时间有限,现把已测试成功的万能摇控器源代码贴出来,大家一起研究,有兴趣的加qq:454280486 用的at89s52芯片,p0为八种设备的灯,p1为键盘的行输入,p3为键盘的列输出,为8*8距陈.  p2.2为红外发射脚,接三极管放大电路再加红外发射头。


;-------------------------------------- 内存单元分配 -------------------------;;
;前面的00到07作为特殊寄存器用 r0到r7
;键盘扫描用
HANNIE EQU 08H
HAN EQU 09H
NIE EQU 0AH
XNIE EQU 0BH
KEY_VALUE1 EQU 0CH
KEY_VALUE2 EQU 0DH
;暂存八种设备的型号
TV_X EQU 0EH
VCR_X EQU 0FH
CBL_X EQU 10H
DVD_X EQU 11H
TUNER_X EQU 12H
TAPE_X EQU 13H
CD_X EQU 14H
AMP_X EQU 15H
;输入型号的百,十,个位
XINHAO1 EQU 16H  
XINHAO2 EQU 17H
XINHAO3 EQU 18H
;
TIME1 EQU 70H
TIME2 EQU 71H
TIME3 EQU 72H
;程序用临时变量
BIT_TEMP EQU 19H
TYPE_TEMP EQU 1AH
DATA_TEMP1 EQU 1BH
DATA_TEMP2 EQU 1CH
DATA_TEMP3 EQU 1DH
DATA_TEMP4 EQU 1EH
LED EQU 1FH
;型号数据
IR_FORMAT EQU 21H 
CYCLE EQU 22H

BHT EQU 23H
BLT EQU 24H


LH EQU 25H
LL EQU 26H

LH2 EQU 27H
LL2 EQU 28H

L01 EQU 29H
L02 EQU 2AH

L11 EQU 2BH
L12 EQU 2CH

L21 EQU 2DH
L22 EQU 2EH

L31 EQU 2FH
L32 EQU 30H

D_H EQU 31H
D_L EQU 32H
D_L2 EQU 33H

;位数据

BIT1 EQU 34H
BIT2 EQU 35H
BIT3 EQU 36H
BIT4 EQU 37H
BIT5 EQU 38H
BIT6 EQU 39H
BIT7 EQU 3AH
BIT8 EQU 3BH
BIT9 EQU 3CH
BIT0 EQU 3DH
;类型数据

TYPE1 EQU 3EH
TYPE2 EQU 3FH
TYPE3 EQU 40H
TYPE4 EQU 41H
TYPE5 EQU 42H
TYPE6 EQU 43H
TYPE7 EQU 44H
TYPE8 EQU 45H
TYPE9 EQU 46H
TYPE0 EQU 47H

;值数据
VALUE11 EQU 6FH
VALUE12 EQU 48H
VALUE13 EQU 49H
VALUE14 EQU 4AH

VALUE21 EQU 4BH
VALUE22 EQU 4CH
VALUE23 EQU 4DH
VALUE24 EQU 4EH

VALUE31 EQU 4FH
VALUE32 EQU 50H
VALUE33 EQU 51H
VALUE34 EQU 52H
VALUE41 EQU 53H
VALUE42 EQU 54H
VALUE43 EQU 55H
VALUE44 EQU 56H

VALUE51 EQU 57H
VALUE52 EQU 58H
VALUE53 EQU 59H
VALUE54 EQU 5AH

VALUE61 EQU 5BH
VALUE62 EQU 5CH
VALUE63 EQU 5DH
VALUE64 EQU 5EH

VALUE71 EQU 5FH
VALUE72 EQU 60H
VALUE73 EQU 61H
VALUE74 EQU 62H

VALUE81 EQU 63H
VALUE82 EQU 64H
VALUE83 EQU 65H
VALUE84 EQU 66H

VALUE91 EQU 67H
VALUE92 EQU 68H
VALUE93 EQU 69H
VALUE94 EQU 6AH

VALUE01 EQU 6BH
VALUE02 EQU 6CH
VALUE03 EQU 6DH
VALUE04 EQU 6EH

 ;发波调制 为"1" TIME(时间调制) 为"2" Phasic(相位调制)
		   ;为"3" Voltage(电平调制)       为"4" Nothing(无载波调制)
		   ;为"5" Especial(特殊调制)


;-------------------------   初始化  ------------------------------------------------


ORG 0000H
LJMP START

START:
	MOV SP,#81H
	CLR P2.2       
	CLR p0.0         ;一上电tv灯亮自动进入tv_001
	LCALL DELAY1S
	mov p0,#0ffh
	CLR 01H          ;键有没有松开标志位    
        CLR 02H
	CLR 03H
	CLR 04H
	CLR 05H
	MOV TV_X,#1      ;八个设备的分别装的型号	
	MOV VCR_X,#1
	MOV CBL_X,#1
	MOV DVD_X,#1
	MOV TUNER_X,#1
	MOV TAPE_X,#1
	MOV CD_X,#1
	MOV AMP_X,#1
	MOV LED,#0      ;当前设备 0 "tv" 1="vcr" 2="sat" 3="dvd" 4="tuner" 5="tape" 6="cd" 7="amp"


;----------------------------  程序  -----------------------------------------  
LOOP:               	
	LCALL SCANKEY
	MOV A,KEY_VALUE1
	JZ LOOP
	CJNE A,#56,SWITCH_KEY
	MOV A,KEY_VALUE2
	JZ LOOP
	LJMP TWO_KEY_PRESS
SWITCH_KEY:
	LJMP DEVICE_SELECT


;----------------------  两个键同时按下的判断      -----------------------
; 56键为 SET 键 57键为 TV键, 58键为 vcr 键, SET+TV选择tv型号  SET+vcr选择vcr型号 
TWO_KEY_PRESS:
	MOV A,KEY_VALUE2
	CJNE A,#57,VCR_TYPEINPUT1
	MOV LED,#0
	LJMP TYPEINPUT
VCR_TYPEINPUT1:
	CJNE A,#58,CBL_TYPEINPUT1
	MOV LED,#1
	LJMP TYPEINPUT
CBL_TYPEINPUT1:
	CJNE A,#59,DVD_TYPEINPUT1
	MOV LED,#2
	LJMP TYPEINPUT	
DVD_TYPEINPUT1:
	CJNE A,#60,TUNER_TYPEINPUT1
	MOV LED,#3
	LJMP TYPEINPUT	
TUNER_TYPEINPUT1:
	CJNE A,#61,TAPE_TYPEINPUT1
	MOV LED,#4
	LJMP TYPEINPUT		
TAPE_TYPEINPUT1:
	CJNE A,#62,CD_TYPEINPUT1
	MOV LED,#5
	LJMP TYPEINPUT
CD_TYPEINPUT1:
	CJNE A,#63,AMP_TYPEINPUT1
	MOV LED,#6
	LJMP TYPEINPUT
AMP_TYPEINPUT1:
	CJNE A,#64,TYPEINPUTOUT
	MOV LED,#7
	LJMP TYPEINPUT		
TYPEINPUTOUT:
	LJMP LOOP
;------------------------------------------------------






;-----------------   型号输入,输入三位   ---------------------------	
TYPEINPUT:          ;型号输入接收
	mov R2,#3

	MOV XINHAO1,#0
	mov r0,#XINHAO1
	LCALL KEY_POP    ;键弹起
TYPEINPUT1:
	LCALL CPL_LED

AAA:   MOV TIME3,#7
BBB:   MOV TIME2,#250
CCC:   MOV TIME1,#250
	
TYPEINPUT2:
	LCALL SCANKEY
	
	MOV A,KEY_VALUE1
	CJNE A,#0,KEYPRESS
	djnz TIME1,TYPEINPUT2
	DJNZ TIME2,CCC
	DJNZ TIME3,BBB

	LCALL CPL_LED
	LJMP loop

KEYPRESS:
	SUBB A,#11	
	JC KEYPRESS1
	MOV A,KEY_VALUE1
	SUBB A,#57
	JNC XINHAO_PD
	LJMP TYPEINPUT2
XINHAO_PD:
	LCALL CPL_LED
	LCALL KEY_POP    ;键弹起
	LJMP LOOP

KEYPRESS1:
	LCALL CPL_LED
	LCALL KEY_POP    ;键弹起

	MOV A,KEY_VALUE1
	CJNE A,#10,KEYPRESS2
	MOV A,#0
KEYPRESS2:
	MOV @R0,A
	INC R0
	DJNZ R2,TYPEINPUT1

;计算值
	
	MOV A,XINHAO1   ;如果三次输完毕,则计算值
	MOV B,#100
	MUL AB

	MOV XINHAO1,A
	
	MOV A,XINHAO2
	MOV B,#10
	MUL AB
	ADD A,XINHAO1

	ADD A,XINHAO3

	MOV XINHAO1,A

 ;根据值判断类型
	MOV A,LED
	JNZ VCR_TYPE
	MOV A,XINHAO1
	JZ TV_SELECT_TYPE_OUT
	SUBB A,#15
        JNC TV_SELECT_TYPE_OUT
	MOV TV_X,XINHAO1
	LJMP LOOP
TV_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT	

VCR_TYPE:
	CJNE A,#1,CBL_TYPE
	MOV A,XINHAO1
	JZ VCR_SELECT_TYPE_OUT
	SUBB A,#4
        JNC VCR_SELECT_TYPE_OUT
	MOV VCR_X,XINHAO1
	LJMP LOOP
VCR_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT	

CBL_TYPE:
	CJNE A,#2,DVD_TYPE
	MOV A,XINHAO1
	JZ CBL_SELECT_TYPE_OUT
	SUBB A,#2
        JNC CBL_SELECT_TYPE_OUT
	MOV CBL_X,XINHAO1
	LJMP LOOP
CBL_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT

DVD_TYPE:
	CJNE A,#3,TUNER_TYPE
	MOV A,XINHAO1
	JZ DVD_SELECT_TYPE_OUT
	SUBB A,#2
        JNC DVD_SELECT_TYPE_OUT
	MOV DVD_X,XINHAO1
	LJMP LOOP
DVD_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT
	
TUNER_TYPE:
	CJNE A,#4,TAPE_TYPE
	MOV A,XINHAO1
	JZ TUNER_SELECT_TYPE_OUT
	SUBB A,#2
        JNC TUNER_SELECT_TYPE_OUT
	MOV TUNER_X,XINHAO1
	LJMP LOOP
TUNER_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT	

TAPE_TYPE:
	CJNE A,#5,CD_TYPE
	MOV A,XINHAO1
	JZ TAPE_SELECT_TYPE_OUT
	SUBB A,#2
        JNC TAPE_SELECT_TYPE_OUT
	MOV TAPE_X,XINHAO1
	LJMP LOOP
TAPE_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT	

CD_TYPE:
	CJNE A,#6,AMP_TYPE
	MOV A,XINHAO1
	JZ CD_SELECT_TYPE_OUT
	SUBB A,#2
        JNC CD_SELECT_TYPE_OUT
	MOV CD_X,XINHAO1
	LJMP LOOP
CD_SELECT_TYPE_OUT:	
	LJMP TYPE_OUT	


AMP_TYPE:
	CJNE A,#7,TYPE_OUT
	MOV A,XINHAO1
	JZ TYPE_OUT
	SUBB A,#2
        JNC TYPE_OUT
	MOV AMP_X,XINHAO1
	LJMP LOOP
	
TYPE_OUT:
        LCALL CPL_LED
	LCALL DELAY600MS
        LCALL CPL_LED
	LCALL DELAY600MS
        LCALL CPL_LED
	LCALL DELAY600MS
        LCALL CPL_LED
	LCALL DELAY600MS
	LJMP TYPEINPUT
;---------------------------------------









;----------------------  设备强制选择 -----------------
; 任何时候按 57 到 64这几个键都会转到强制转换(如果转换到的设备有选择型号则转到
;选择型号,如果没有则还是当前的型号)


DEVICE_SELECT:        
	MOV A,KEY_VALUE1
	CJNE A,#57,SWITCH_2
	MOV LED,#0
	LJMP DEVICE_OUT
SWITCH_2:
	CJNE A,#58,SWITCH_3
	MOV LED,#1
	LJMP DEVICE_OUT	
SWITCH_3:
	CJNE A,#59,SWITCH_4 
        MOV LED,#2
	LJMP DEVICE_OUT	
SWITCH_4:
	CJNE A,#60,SWITCH_5 
        MOV LED,#3
	LJMP DEVICE_OUT	
SWITCH_5:
	CJNE A,#61,SWITCH_6  
        MOV LED,#4
 	LJMP DEVICE_OUT
SWITCH_6:
	CJNE A,#62,SWITCH_7
 	MOV LED,#5
	LJMP DEVICE_OUT		
SWITCH_7:
	CJNE A,#63,SWITCH_8 
        MOV LED,#6
	LJMP DEVICE_OUT	
SWITCH_8:
	CJNE A,#64,SWITCH_9 
   	MOV LED,#7
	LJMP DEVICE_OUT	
SWITCH_9:
	LJMP CURRENT_TYPE
DEVICE_OUT:
        LCALL CPL_LED
	LCALL DELAY600MS
	LCALL CPL_LED
	LCALL KEY_POP    ;键弹起
	LJMP LOOP

;--------------------------------------------------------------





;-------------------------------  判断类型 -------------------


CURRENT_TYPE:


;屏蔽 37 致 55键(未用的按键)
	MOV A,KEY_VALUE1

	SUBB A,#36
	JC DEVICE_TYPE
	LJMP LOOP


DEVICE_TYPE:
	MOV A,LED
	CJNE A,#0,VCR_PANDUAN_TYPE
TV_PANDUAN_TYPE:            ; tv型号判断
	
	MOV A,TV_X
	CJNE A,#1,TV_TYPE2
	LJMP TV_001
TV_TYPE2:

	CJNE A,#2,TV_TYPE3
	LJMP TV_002

TV_TYPE3:

	CJNE A,#3,TV_TYPE4
	LJMP TV_003
TV_TYPE4:

	CJNE A,#4,TV_TYPE5
	LJMP TV_004
TV_TYPE5:

	CJNE A,#5,TV_TYPE6
	LJMP TV_005
TV_TYPE6:

	CJNE A,#6,TV_TYPE7
	LJMP TV_006
TV_TYPE7:

	CJNE A,#7,TV_TYPE8
	LJMP TV_007
TV_TYPE8:                        ;电平调制

	CJNE A,#8,TV_TYPE9
	LJMP TV_008
TV_TYPE9:

	CJNE A,#9,TV_TYPE10
	LJMP TV_009
TV_TYPE10:

	CJNE A,#10,TV_TYPE11
	LJMP TV_010
TV_TYPE11:

	CJNE A,#11,TV_TYPE12
	LJMP TV_011
TV_TYPE12:

	CJNE A,#12,TV_TYPE20
	LJMP TV_012

TV_TYPE20:                        ;无载波调制

	CJNE A,#13,TV_TYPE39
	LJMP TV_020

TV_TYPE39:                 ;电平调制

	CJNE A,#14,TV_TYPE40
	LJMP TV_039
TV_TYPE40:
	LJMP LOOP



VCR_PANDUAN_TYPE:
	CJNE A,#1,CBL_PANDUAN_TYPE

	MOV A,VCR_X
	CJNE A,#1,VCR_TYPE2
	LJMP VCR_001
VCR_TYPE2:
	CJNE A,#2,VCR_TYPE3
	LJMP VCR_002
VCR_TYPE3:
	CJNE A,#3,VCR_TYPE4
	LJMP VCR_003
VCR_TYPE4:

	LJMP LOOP
;--------------------
CBL_PANDUAN_TYPE:
	CJNE A,#2,DVD_PANDUAN_TYPE
	MOV A,CBL_X
	CJNE A,#1,CBL_TYPE2
	LJMP CBL_001

CBL_TYPE2:
	LJMP LOOP


;----------------------
DVD_PANDUAN_TYPE:
	CJNE A,#3,TUNER_PANDUAN_TYPE
	MOV A,DVD_X
	CJNE A,#1,DVD_TYPE2
	LJMP DVD_001

DVD_TYPE2:
	LJMP LOOP


;-------------------------------------
TUNER_PANDUAN_TYPE:
	CJNE A,#4,TAPE_PANDUAN_TYPE
	MOV A,TUNER_X
	CJNE A,#1,TUNER_TYPE2
	LJMP TUNER_001

TUNER_TYPE2:
	LJMP LOOP


;------------------------------
TAPE_PANDUAN_TYPE:
	CJNE A,#5,CD_PANDUAN_TYPE
	MOV A,TAPE_X
	CJNE A,#1,TAPE_TYPE2
	LJMP TAPE_001

TAPE_TYPE2:
	LJMP LOOP


;-----------------------------
CD_PANDUAN_TYPE:
	CJNE A,#6,AMP_PANDUAN_TYPE
	MOV A,CD_X
	CJNE A,#1,CD_TYPE2
	LJMP CD_001

CD_TYPE2:
	LJMP LOOP

;------------------------------------
AMP_PANDUAN_TYPE:
	CJNE A,#7,AMP_TYPE2
	MOV A,AMP_X
	CJNE A,#1,AMP_TYPE2
	LJMP AMP_001

AMP_TYPE2:
	LJMP LOOP



	
	
;---------------------   各种类型   -------------------------------------------------------



TV_001: 
; PAUSE(20) MENU(21) OK(26) EXIT(27) 四个键不发码
	
	MOV A,KEY_VALUE1
	CJNE A,#20,TV_001_MASKMENU
	LJMP LOOP
TV_001_MASKMENU:
	CJNE A,#21,TV_001_MASKOK
	LJMP LOOP	

TV_001_MASKOK:
	CJNE A,#26,TV_001_MASKEXIT
	LJMP LOOP
TV_001_MASKEXIT:
	CJNE A,#27,FAMA_TV_001
	LJMP LOOP
	
     
FAMA_TV_001:
	MOV DPTR,#TV_001_LIST_LIB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -