📄 wanneng_remote.c
字号:
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 + -