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

📄 wanneng_remote.c

📁 随着家用电器种类的增多
💻 C
📖 第 1 页 / 共 5 页
字号:
	MOV A,KEY_VALUE1
	SUBB A,#34
	JNC FAMA_TAPE_001
	MOV A,KEY_VALUE1	
	CJNE A,#32,TAPE_001_FA20
	LJMP FAMA_TAPE_001
TAPE_001_FA20:
	CJNE A,#20,FAMA_TAPE_END	
	LJMP FAMA_TAPE_001
FAMA_TAPE_END:
	LJMP LOOP


FAMA_TAPE_001:
	MOV DPTR,#TAPE_001_LIST_LIB
	LCALL READ_LIST_LIB

	MOV VALUE11,#03H
	MOV VALUE21,#85H
	MOV VALUE31,#6AH

	MOV A,KEY_VALUE1
	MOV DPTR,#TAPE_001_KEYLIB
	MOVC A,@A+DPTR
	MOV VALUE41,A
	CPL A
	MOV VALUE51,A

	MOV VALUE61,#01H
	MOV VALUE62,#00H
	MOV VALUE71,#03H
	MOV VALUE81,#01H
	MOV VALUE82,#00H
	MOV VALUE83,#00H
	MOV VALUE84,#00H	
        LCALL SEND_BO
	LJMP LOOP

;-----------------------------------
CD_001:
; 14,15,16, 19, 20, 22到25    27,28,30到35  不发码
	MOV A,KEY_VALUE1
	CJNE A,#14,CD_001_KAN15
	LJMP LOOP
CD_001_KAN15:
	CJNE A,#15,CD_001_KAN16
	LJMP LOOP

CD_001_KAN16:
	CJNE A,#16,CD_001_KAN19
	LJMP LOOP

CD_001_KAN19:
	CJNE A,#19,CD_001_KAN20
	LJMP LOOP
CD_001_KAN20:
	CJNE A,#20,CD_001_KAN22
	LJMP LOOP
CD_001_KAN22:
	SUBB A,#22
	JNC CD_001_KAN
	LJMP FAMA_CD_001
CD_001_KAN:
	MOV A,KEY_VALUE1
	CJNE A,#26,CD_001_KAN29
	LJMP FAMA_CD_001
CD_001_KAN29:	
	CJNE A,#29,CD_001_KAN36
	LJMP FAMA_CD_001	
CD_001_KAN36:
	CJNE A,#36,CD_001_KANEND
	LJMP FAMA_CD_001
CD_001_KANEND:
	LJMP LOOP

FAMA_CD_001:
	MOV DPTR,#CD_001_LIST_LIB
	LCALL READ_LIST_LIB

	MOV VALUE11,#03H
	MOV VALUE21,#03H
	MOV VALUE31,#01H

	MOV A,KEY_VALUE1
	MOV DPTR,#CD_001_KEYLIB
	MOVC A,@A+DPTR
	MOV VALUE41,A

	MOV VALUE51,#01H
        LCALL SEND_BO
	LJMP LOOP

;------------------------------------
AMP_001:
;  14 到 18  21到31  不发码
	MOV A,KEY_VALUE1
	SUBB A,#14
	JNC KAN18
	LJMP FAMA_AMP_001
KAN18:
	MOV A,KEY_VALUE1
	SUBB A,#19
	JNC KAN21
	LJMP LOOP
KAN21:
	MOV A,KEY_VALUE1
	SUBB A,#21
	JNC KAN31
	LJMP FAMA_AMP_001
KAN31:
	MOV A,KEY_VALUE1
	SUBB A,#32
	JNC FAMA_AMP_001
	LJMP LOOP

FAMA_AMP_001:

	MOV DPTR,#AMP_001_LIST_LIB
	LCALL READ_LIST_LIB

	MOV VALUE11,#06H

	MOV A,KEY_VALUE1
	MOV DPTR,#AMP_001_KEYLIB
	MOVC A,@A+DPTR
	MOV VALUE21,A
	CPL A
	MOV VALUE61,A
		
	MOV VALUE31,#00H
	MOV VALUE41,#01H
	MOV VALUE42,#00H
	MOV VALUE51,#01H
	MOV VALUE71,#02H
	MOV VALUE81,#01H
	MOV VALUE82,#00H
        LCALL SEND_BO
	LJMP LOOP

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


;--------------------------------------------------  ;取反灯   ------------------
CPL_LED:             
	MOV A,LED
	JNZ LED11
	CPL P0.0
	LJMP LEDOUT
LED11:
	CJNE A,#1,LED22
	CPL P0.1
	LJMP LEDOUT
LED22:
	CJNE A,#2,LED33
	CPL P0.2
	LJMP LEDOUT
LED33:
	CJNE A,#3,LED44
	CPL P0.3
	LJMP LEDOUT
LED44:
	CJNE A,#4,LED55
	CPL P0.4
	LJMP LEDOUT
LED55:
	CJNE A,#5,LED66
	CPL P0.5
	LJMP LEDOUT
LED66:
	CJNE A,#6,LED77
	CPL P0.6
	LJMP LEDOUT

LED77:
	CJNE A,#7,LEDOUT
	CPL P0.7
LEDOUT:
	RET
;---------------------------------------------------





;----------------------   发送波公用程序 ----------------------- 

SEND_BO:           ;发送波公用程序(在前面把临时表数据填完整转到些程序)
	LCALL SELECT_LED 		


BO1:
	MOV BIT_TEMP,BIT1
	MOV TYPE_TEMP,TYPE1
	MOV DATA_TEMP1,VALUE11
	MOV DATA_TEMP2,VALUE12
	MOV DATA_TEMP3,VALUE13
	MOV DATA_TEMP4,VALUE14


	LCALL  SENDDATA




BO2:
	MOV BIT_TEMP,BIT2
	MOV TYPE_TEMP,TYPE2
	MOV DATA_TEMP1,VALUE21
	MOV DATA_TEMP2,VALUE22
	MOV DATA_TEMP3,VALUE23
	MOV DATA_TEMP4,VALUE24
	LCALL SENDDATA

BO3:
	MOV BIT_TEMP,BIT3
	MOV TYPE_TEMP,TYPE3
	MOV DATA_TEMP1,VALUE31
	MOV DATA_TEMP2,VALUE32
	MOV DATA_TEMP3,VALUE33
	MOV DATA_TEMP4,VALUE34
	LCALL SENDDATA

BO4:
	MOV BIT_TEMP,BIT4
	MOV TYPE_TEMP,TYPE4
	MOV DATA_TEMP1,VALUE41
	MOV DATA_TEMP2,VALUE42
	MOV DATA_TEMP3,VALUE43
	MOV DATA_TEMP4,VALUE44
	LCALL SENDDATA

BO5:

	MOV BIT_TEMP,BIT5
	MOV TYPE_TEMP,TYPE5
	MOV DATA_TEMP1,VALUE51
	MOV DATA_TEMP2,VALUE52
	MOV DATA_TEMP3,VALUE53
	MOV DATA_TEMP4,VALUE54
	LCALL SENDDATA

BO6:
	MOV BIT_TEMP,BIT6
	MOV TYPE_TEMP,TYPE6
	MOV DATA_TEMP1,VALUE61
	MOV DATA_TEMP2,VALUE62
	MOV DATA_TEMP3,VALUE63
	MOV DATA_TEMP4,VALUE64
	LCALL SENDDATA

BO7:
	MOV BIT_TEMP,BIT7
	MOV TYPE_TEMP,TYPE7
	MOV DATA_TEMP1,VALUE71
	MOV DATA_TEMP2,VALUE72
	MOV DATA_TEMP3,VALUE73
	MOV DATA_TEMP4,VALUE74
	LCALL SENDDATA

BO8:
	MOV BIT_TEMP,BIT8
	MOV TYPE_TEMP,TYPE8
	MOV DATA_TEMP1,VALUE81
	MOV DATA_TEMP2,VALUE82
	MOV DATA_TEMP3,VALUE83
	MOV DATA_TEMP4,VALUE84
	LCALL SENDDATA

BO9:
	MOV BIT_TEMP,BIT9
	MOV TYPE_TEMP,TYPE9
	MOV DATA_TEMP1,VALUE91
	MOV DATA_TEMP2,VALUE92
	MOV DATA_TEMP3,VALUE93
	MOV DATA_TEMP4,VALUE94
	LCALL SENDDATA
 				
BO10:

	MOV BIT_TEMP,BIT0
	MOV TYPE_TEMP,TYPE0
	MOV DATA_TEMP1,VALUE01
	MOV DATA_TEMP2,VALUE02
	MOV DATA_TEMP3,VALUE03
	MOV DATA_TEMP4,VALUE04
	LCALL SENDDATA

	LJMP RE_SENDBO

SENDDATA:                         ;根据哪种调制调用这种调制的子程序
SENDDATA_T:
	MOV A,IR_FORMAT
	CJNE A,#1,SENDDATA_P
	LCALL SENDDATA_TIME
	LJMP SENDDATA_OUT
SENDDATA_P:
	MOV A,IR_FORMAT
	CJNE A,#2,SENDDATA_V
	LCALL SENDDATA_Phasic
	LJMP SENDDATA_OUT
SENDDATA_V:
	MOV A,IR_FORMAT
	CJNE A,#3,SENDDATA_N
	LCALL SENDDATA_Voltage
	LJMP SENDDATA_OUT
SENDDATA_N:
	MOV A,IR_FORMAT
	CJNE A,#4,SENDDATA_E
	LCALL SENDDATA_Nothing
	LJMP SENDDATA_OUT
SENDDATA_E:
	MOV A,IR_FORMAT
	CJNE A,#5,SENDDATA_OUT
	LCALL SENDDATA_Especial
	LJMP SENDDATA_OUT
SENDDATA_OUT:
	
	RET



RE_SENDBO:
	LCALL PREEKEY           ;判断键有没有松开
	JNB 01H,SEND_BOOUT      ;键没有松开01h就是1
	CLR 01H                 ;把01h清0以备下次在判断是否松开
	
	LCALL SELECT_LED        ;选择开哪个灯

CYCLE_1:
	
	MOV A,CYCLE              ;判断循环位置
	CJNE A,#1,CYCLE_2

	LJMP BO1
CYCLE_2:

	CJNE A,#2,CYCLE_3

	LJMP BO2
CYCLE_3:

	CJNE A,#3,CYCLE_4

	LJMP BO3
CYCLE_4:

	CJNE A,#4,CYCLE_5

	LJMP BO4
CYCLE_5:

	CJNE A,#5,CYCLE_6

	LJMP BO5
CYCLE_6:

	CJNE A,#6,CYCLE_7

	LJMP BO6
CYCLE_7:


	CJNE A,#7,CYCLE_8

	LJMP BO7
CYCLE_8:


	CJNE A,#8,CYCLE_9

	LJMP BO8

CYCLE_9:


	CJNE A,#9,CYCLE_0

	LJMP BO9

CYCLE_0:

	CJNE A,#10,SEND_BOOUT

	LJMP BO10

SEND_BOOUT:
	mov p0,#0ffh
	RET




KEY_POP:                          ;等键松开
	MOV A,P1
	CJNE A,#0FFH,KEY_POP1
	LJMP KEY_POPOUT
KEY_POP1:
	LJMP KEY_POP
KEY_POPOUT:
	RET

PREEKEY:                         ;是否键没有松开
	MOV A,P1
	CJNE A,#0FFH,NOPOP
	CLR 01H
	LJMP NOPOPOUT
NOPOP:
	SETB 01H
NOPOPOUT:
	RET	

;---------------------------   相位调制子程序  ----------------

SENDDATA_PHASIC:   
;相位调制(高位在前先发,延时不带一高电平) 
;根据位数可选三种数据类型,和连续发送四个字节数据值   子程序(相位调制)
;类型为1则是发逻辑0和1,为2则是发引导码的高和低,为3则是发延时的高和低
;类型为4时发延时2的高和低             
	MOV A,BIT_TEMP
	CJNE A,#0,P_SEND_4BYTE
	LJMP SENDDATA_P_OUT				
P_SEND_4BYTE:

P_1:                         ;根据数据的三种类型选择发哪种逻辑

	MOV A,TYPE_TEMP
	CJNE A,#1,P_2

	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	JC P_LOJI1
	LCALL LOJI0_P
	LJMP P_4BYTE_NEXTBIT
P_LOJI1:
	LCALL LOJI1_P
	LJMP P_4BYTE_NEXTBIT	

P_2:
	MOV A,TYPE_TEMP
	CJNE A,#2,P_3
	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A
	
	JC P_LOJIH
	LCALL LOJI_L
	LJMP P_4BYTE_NEXTBIT
P_LOJIH:
	LCALL LOJI_H
	LJMP P_4BYTE_NEXTBIT

P_3:
	MOV A,TYPE_TEMP
	CJNE A,#3,P_4
	MOV P0,#0FFH

	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	JC P_LOJID_H
	LCALL LOJID_L
	LJMP P_4BYTE_NEXTBIT
P_LOJID_H:
	LCALL LOJID_H
	LJMP P_4BYTE_NEXTBIT	
P_4:
	MOV A,TYPE_TEMP
	CJNE A,#4,SENDDATA_P_OUT1
	MOV P0,#0FFH
	
	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	JC P_LOJID_H2
	LCALL LOJID_L2
	LJMP P_4BYTE_NEXTBIT

SENDDATA_P_OUT1:
	LJMP SENDDATA_P_OUT


P_LOJID_H2:
	LCALL LOJID_H
	LJMP P_4BYTE_NEXTBIT

P_4BYTE_NEXTBIT:
	DEC BIT_TEMP
	LJMP SENDDATA_PHASIC


SENDDATA_P_OUT:
	RET


	 

LOJI0_P:          ;相们调制的逻辑0(低电平加高电平为逻辑0)
	MOV R2,L01
	MOV R4,L02
LOJI0_P_L:
	LCALL DELAY30US
	DJNZ R2,LOJI0_P_L
LOJI0_P_H:
	LCALL ZAIBO
	DJNZ R4,LOJI0_P_H
	RET

LOJI1_P:              ;相位调制逻辑1(高电平加低电平为逻辑1)
	MOV R2,L11
	MOV R4,L12
LOJI1_P_H:
	LCALL ZAIBO
	DJNZ R2,LOJI1_P_H
LOJI1_P_L:
	LCALL DELAY30US
	DJNZ R4,LOJI1_P_L
	RET

;------------------------  电平调制子程序  -----------------------------
SENDDATA_VOLTAGE:  
;电平调制(高位在前先发,延时不带高电平),高电平有载波的高,低电平为低
;根据位数可选四种数据类型,和连续发送四个字节数据值
;类型为1则是发短的逻辑0和1,为2则是另一种长的0和1
;类型为3引导码的高和低,为4则是发延时的低1,为5则是延时的低2
    

         
	MOV A,BIT_TEMP
	CJNE A,#0,V_SEND_4BYTE
	LJMP SENDDATA_V_OUT				
V_SEND_4BYTE:

V_1:                         ;根据数据的三种类型选择发哪种逻辑

	MOV A,TYPE_TEMP
	CJNE A,#1,V_2



	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	JC V_LOJI1
	LCALL LOJI0_V_S
	LJMP V_4BYTE_NEXTBIT
V_LOJI1:
	LCALL LOJI1_V_S
	LJMP V_4BYTE_NEXTBIT
	
V_2: 
	MOV A,TYPE_TEMP
	CJNE A,#2,V_3

	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	JC V_LOJI2
	LCALL LOJI0_V_L
	LJMP V_4BYTE_NEXTBIT
V_LOJI2:
	LCALL LOJI1_V_L
	LJMP V_4BYTE_NEXTBIT



V_3:
	MOV A,TYPE_TEMP
	CJNE A,#3,V_4
 
	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	
	JC V_LOJIH
	LCALL LOJI_L_V
	LJMP V_4BYTE_NEXTBIT
V_LOJIH:
	LCALL LOJI_H_V
	LJMP V_4BYTE_NEXTBIT

V_4:
	MOV A,TYPE_TEMP
	CJNE A,#4,V_5
	MOV P0,#0FFH
	
	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A

	JC V_LOJID_H
	LCALL LOJID_L_V
	LJMP V_4BYTE_NEXTBIT
V_LOJID_H:
	LCALL LOJID_H_V
	LJMP V_4BYTE_NEXTBIT	
V_5:
	MOV A,TYPE_TEMP
	CJNE A,#5,SENDDATA_V_OUT1
	MOV P0,#0FFH

	MOV A,DATA_TEMP4
	RRC A
	MOV DATA_TEMP4,A
	MOV A,DATA_TEMP3
	RRC A
	MOV DATA_TEMP3,A
	MOV A,DATA_TEMP2
	RRC A
	MOV DATA_TEMP2,A
	MOV A,DATA_TEMP1
	RRC A
	MOV DATA_TEMP1,A


	JC V_LOJID_H2
	LCALL LOJID_L2_V
	LJMP V_4BYTE_NEXTBIT

SENDDATA_V_OUT1:
	LJMP SENDDATA_V_OUT


V_LOJID_H2:
	LCALL LOJID_H2_V
	LJMP V_4BYTE_NEXTBIT

V_4BYTE_NEXTBIT:
	DEC BIT_TEMP

	LJMP SENDDATA_VOLTAGE


SENDDATA_V_OUT:
	RET


LOJI0_V_S:    ;适合高电平和低电平时间小于1ms的逻辑0

	MOV R4,L02   

	MOV A,BIT_TEMP      ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
	CJNE A,#1,LOJI0_VL
	MOV A,R4
	SUBB A,#9
	MOV R4,A
LOJI0_VL:            ;低电平为基数40us 加上循环次数* 5us
	CLR P2.2
	nop
	nop
	DJNZ R4,LOJI0_VL
	RET

LOJI1_V_S:   ;适合高电平和低电平时间小于1ms的逻辑1
	MOV R2,L11

	MOV A,BIT_TEMP      ;发另外一段波时有误差,在这里判断如果是最后一位就把误差减去
	CJNE A,#1,LOJI0_VL
	MOV A,R4
	SUBB A,#2
	MOV R4,A
LOJI1_VH:                ;高电平为 循环次数*( 载波)
	lcall zaibo
	DJNZ R2,LOJI1_VH
	RET

⌨️ 快捷键说明

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