📄 my_pt2314.asm
字号:
AJMP LINE1
KEY_WORK:
CLR RE_KEY
MOV A,KEYBUFF
CJNE A,#12,MUTE_EXT
LCALL OPREAT
AJMP LINE1
MUTE_EXT:
JNB MUTE_BIT,MUTE_D
AJMP LINE1
MUTE_D:
LCALL OPREAT
SETB RE_KEY
AJMP LINE1
;----------------
VOL_CONT:
AJMP MUTE_D
;**************************************
KEYWAIT:
ACALL KEYDELAY
ACALL KEYDELAY
;KW:
;MOV KEY_IO,#11110000B
;MOV A,KEY_IO
;CJNE A,#11110000B,KW
RET
KEYWAIT_SOTP:
ACALL KEYDELAY
;ACALL KEYDELAY
KW:
MOV KEY_IO,#11110000B
MOV A,KEY_IO
CJNE A,#11110000B,KW
RET
;**************************************
KEYDELAY:
PUSH 00H
PUSH 01H
MOV R0,#255
LOOP1:
MOV R1,#255
LOOP2:
;CPL BUZZER
DJNZ R1,LOOP2
DJNZ R0,LOOP1
POP 01H
POP 00H
RET
;*******************************
REMOTE:
push acc ;定时1中断子程序
push psw
CLR EX0 ;INT0请求中断
SETB rs1 ;选择寄存器组
clr rs0
MOV R5,#1
SB:
MOV R4,#203;220;转到882微秒延时判断子程序
irD0:
JB REMOTEIN,EXIT
DJNZ R4,irD0 ;延时882微秒中判断P3.3脚是否出现高电平如果有就退出解码程序
DJNZ R5, SB ;重复'R6次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB REMOTEIN, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒判断是否连发
;JB REMOTEIN,EXIT ;
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4 ;接收从1AH到1DH的4个内存,用于存放操作码和操作反码
PP: ;
MOV R3,#8 ;每组数据为8位
JJJJ: ;
JNB REMOTEIN,$ ;等待地址码第一位的高电平信号
LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,REMOTEIN ;将P3.2引脚此时的电平状态0或1存入C中
JNC UUU ;如果为0就跳转到UUU
LCALL YS3;JB P3.2,$ ;检测到高电平1的话延时882微秒等待脉冲高电平结束
UUU: ;
MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ ;接收满8位换一个内存
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH中
MOV A,1DH
CJNE A,#0FFH,IR_OK
AJMP EXIT ;如果不相等说明解码失败退出解码程序
IR_OK:
AJMP BIJIAO ;如果相等说明解码正确
AJMP EXIT ;如果不相等说明解码失败退出解码程序
;判断在118毫秒内是否有连发码
AA:
LCALL DELAY10
MOV R3,#25
XX:
ACALL YS2
JNB REMOTEIN,HH;跳转到判断连发代码是否正确的程序段
DJNZ R3,XX
;JNB REMOTEIN,HH;跳转到判断连发代码是否正确的程序段
JMP EXIT
;连发码判断程序段-----------
HH: MOV R4,#4
S:
ACALL YS1;调用882微秒延时子程序
JB REMOTEIN,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R4, S;重复4次,目的是确认连发码的低电平信号波形
JMP BIJIAO
JNB REMOTEIN, $ ;等待高电平
JMP AA
EXIT:
SETB EX0 ;INT0请求中断
SETB REMOTEIN
pop psw
pop acc
RETI
;-------------------------------------
YS1:
MOV R6,#18 ;精确延时882微秒(18:11.059M,20:12M)
D1:
MOV R7,#20
DJNZ R7,$
DJNZ R6,D1
RET
;
YS2:
MOV R6,#9 ;精确延时4740微秒(9:11.059M,10:12M)
D2:
MOV R7,#235
DJNZ R7,$
DJNZ R6,D2
RET
;
YS3:
MOV R6,#2 ;延时子程序3,精确延时1000微秒
D3:
MOV R7,#248
DJNZ R7,$
DJNZ R6,D3
RET
;
YS4:
MOV R6,#255 ;延时子程序3,精确延时4740微秒
D4:
MOV R7,#255
DJNZ R7,$
DJNZ R6,D4
RET
;-----------------------------------------------
BIJIAO:
mov ir_code,1Ah ;操作原码
mov ir_code_r,1Bh ;操作反码
mov ir_id_code,1Ch ;ID原码
mov ir_id_code_r,1Dh ;ID反码
JB IR_SET_BIT,IR_WORK0
LCALL DIS_IR_OK
;LCALL IR_SEL
JMP EXIT
IR_WORK0:
JMP IR_WORK
;----------------------------
IR_SEL:
MOV A,KEYBUFF
CJNE A,#0,SEL2
MOV IR_ADDR,#20H
LCALL IR_WR24
RET
;
SEL2:
CJNE A,#1,SEL3
MOV IR_ADDR,#24H
ACALL IR_WR24
RET
;
SEL3:
CJNE A,#2,SEL4
MOV IR_ADDR,#28H
ACALL IR_WR24
RET
;
SEL4:
CJNE A,#3,SEL5
MOV IR_ADDR,#2CH
ACALL IR_WR24
RET
;
SEL5:
CJNE A,#4,SEL6
MOV IR_ADDR,#30H
ACALL IR_WR24
RET
;
SEL6:
CJNE A,#5,SEL7
MOV IR_ADDR,#34H
ACALL IR_WR24
RET
;
SEL7:
CJNE A,#6,SEL8
MOV IR_ADDR,#38H
ACALL IR_WR24
RET
;
SEL8:
CJNE A,#7,SEL9
MOV IR_ADDR,#3CH
ACALL IR_WR24
RET
;
SEL9:
CJNE A,#8,SEL10
MOV IR_ADDR,#40H
ACALL IR_WR24
RET
;
SEL10:
CJNE A,#9,SEL11
MOV IR_ADDR,#44H
ACALL IR_WR24
RET
;
SEL11:
CJNE A,#10,SEL12
MOV IR_ADDR,#48H
ACALL IR_WR24
RET
;
SEL12:
CJNE A,#11,SEL13
MOV IR_ADDR,#4CH
ACALL IR_WR24
RET
;
SEL13:
CJNE A,#12,SEL14
MOV IR_ADDR,#50H
ACALL IR_WR24
RET
;
SEL14:
;CJNE A,#13,SEL15
;MOV IR_ADDR,#54H
;LCALL IR_WR24
RET
;
SEL15:
;CJNE A,#14,SEL16
;MOV IR_ADDR,#58H
;LCALL IR_WR24
RET
;
SEL16:
;CJNE A,#15,SEL17
;MOV IR_ADDR,#5CH
;LCALL IR_WR24
RET
SEL17:
RET
;
IR_WR24:
LCALL DELAY10
MOV A,IR_ADDR
MOV B,ir_code;操作原码
LCALL WT24
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#01H
MOV B,ir_code_r;操作反码
LCALL WT24
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#02H
MOV B,ir_id_code;ID原码
LCALL WT24
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#03H
MOV B,ir_id_code_r;ID反码
LCALL WT24
LCALL DIS_IR_SET_OK
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_WORK:
MOV IR_ADDR,#20H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_1
MOV A,ir_code_r
CJNE A,31H,REM_WORK_1
MOV A,ir_id_code
CJNE A,32H,REM_WORK_1
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_1
;JNB MUTE_BIT,MUTE_IR
;JMP EXIT
;MUTE_IR:
LCALL SET_M_VOL_DOWN
JMP aa;EXIT
;
REM_WORK_1:
MOV IR_ADDR,#24H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_2
MOV A,ir_code_r
CJNE A,31H,REM_WORK_2
MOV A,ir_id_code
CJNE A,32H,REM_WORK_2
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_2
;JNB MUTE_BIT,MUTE_IR1
;JMP EXIT
;MUTE_IR1:
LCALL SET_M_VOL_UP
JMP AA
;
REM_WORK_2:
MOV IR_ADDR,#28H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_3
MOV A,ir_code_r
CJNE A,31H,REM_WORK_3
MOV A,ir_id_code
CJNE A,32H,REM_WORK_3
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_3
JNB MUTE_BIT,MUTE_IR2
JMP EXIT
MUTE_IR2:
LCALL SET_BASS_VOL_DOWN
JMP AA
;
REM_WORK_3:
MOV IR_ADDR,#2CH
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_4
MOV A,ir_code_r
CJNE A,31H,REM_WORK_4
MOV A,ir_id_code
CJNE A,32H,REM_WORK_4
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_4
JNB MUTE_BIT,MUTE_IR3
JMP EXIT
MUTE_IR3:
LCALL SET_BASS_VOL_UP
JMP AA
;
REM_WORK_4:
MOV IR_ADDR,#30H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_5
MOV A,ir_code_r
CJNE A,31H,REM_WORK_5
MOV A,ir_id_code
CJNE A,32H,REM_WORK_5
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_5
JNB MUTE_BIT,MUTE_IR4
JMP EXIT
MUTE_IR4:
LCALL SET_TR_VOL_DOWN
JMP AA
;
REM_WORK_5:
MOV IR_ADDR,#34H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_6
MOV A,ir_code_r
CJNE A,31H,REM_WORK_6
MOV A,ir_id_code
CJNE A,32H,REM_WORK_6
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_6
JNB MUTE_BIT,MUTE_IR5
JMP EXIT
MUTE_IR5:
LCALL SET_TR_VOL_UP
JMP AA
;
REM_WORK_6:
MOV IR_ADDR,#38H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_7
MOV A,ir_code_r
CJNE A,31H,REM_WORK_7
MOV A,ir_id_code
CJNE A,32H,REM_WORK_7
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_7
JNB MUTE_BIT,MUTE_IR6
JMP EXIT
MUTE_IR6:
LCALL BALANCE_L
JMP AA
;
REM_WORK_7:
MOV IR_ADDR,#3CH
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_8
MOV A,ir_code_r
CJNE A,31H,REM_WORK_8
MOV A,ir_id_code
CJNE A,32H,REM_WORK_8
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_8
JNB MUTE_BIT,MUTE_IR7
JMP EXIT
MUTE_IR7:
LCALL BALANCE_R
JMP AA
;
REM_WORK_8:
MOV IR_ADDR,#40H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_9
MOV A,ir_code_r
CJNE A,31H,REM_WORK_9
MOV A,ir_id_code
CJNE A,32H,REM_WORK_9
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_9
JNB MUTE_BIT,MUTE_IR8
JMP EXIT
MUTE_IR8:
MOV IN_BUFF,#1
LCALL INSW
JMP EXIT
;
REM_WORK_9:
MOV IR_ADDR,#44H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_10
MOV A,ir_code_r
CJNE A,31H,REM_WORK_10
MOV A,ir_id_code
CJNE A,32H,REM_WORK_10
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_10
JNB MUTE_BIT,MUTE_IR9
JMP EXIT
MUTE_IR9:
MOV IN_BUFF,#2
LCALL INSW
JMP EXIT
;
REM_WORK_10:
MOV IR_ADDR,#48H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_11
MOV A,ir_code_r
CJNE A,31H,REM_WORK_11
MOV A,ir_id_code
CJNE A,32H,REM_WORK_11
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_11
JNB MUTE_BIT,MUTE_IR10
JMP EXIT
MUTE_IR10:
MOV IN_BUFF,#3
LCALL INSW
JMP EXIT
;
REM_WORK_11:
MOV IR_ADDR,#4CH
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_12
MOV A,ir_code_r
CJNE A,31H,REM_WORK_12
MOV A,ir_id_code
CJNE A,32H,REM_WORK_12
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_12
JNB MUTE_BIT,MUTE_IR11
JMP EXIT
MUTE_IR11:
MOV IN_BUFF,#4
LCALL INSW
JMP EXIT
;
REM_WORK_12:
MOV IR_ADDR,#50H
ACALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_13
MOV A,ir_code_r
CJNE A,31H,REM_WORK_13
MOV A,ir_id_code
CJNE A,32H,REM_WORK_13
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_13
CPL MUTE_BIT
LCALL MUTE_ON_OFF
JMP EXIT
;
REM_WORK_13:
;MOV IR_ADDR,#54H
;ACALL IR_RD24
;MOV A,ir_code
;CJNE A,30H,REM_WORK_14
;MOV A,ir_code_r
;CJNE A,31H,REM_WORK_14
;MOV A,ir_id_code
;CJNE A,32H,REM_WORK_14
;MOV A,ir_id_code_r
;CJNE A,33H,REM_WORK_14
;CPL P1.5
JMP EXIT
;
REM_WORK_14:
;MOV IR_ADDR,#58H
;ACALL IR_RD24
;MOV A,ir_code
;CJNE A,30H,REM_WORK_15
;MOV A,ir_code_r
;CJNE A,31H,REM_WORK_15
;MOV A,ir_id_code
;CJNE A,32H,REM_WORK_15
;MOV A,ir_id_code_r
;CJNE A,33H,REM_WORK_15
;CPL P1.6
JMP EXIT
;
REM_WORK_15:
;MOV IR_ADDR,#5CH
;ACALL IR_RD24
;MOV A,ir_code
;CJNE A,30H,REM_WORK_16
;MOV A,ir_code_r
;CJNE A,31H,REM_WORK_16
;MOV A,ir_id_code
;CJNE A,32H,REM_WORK_16
;MOV A,ir_id_code_r
;CJNE A,33H,REM_WORK_16
;CPL P1.7
JMP EXIT
;
REM_WORK_16:
JMP EXIT
;-------------------
IR_RD24:
MOV A,IR_ADDR
LCALL RD24
MOV 30H,A
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#01H
LCALL RD24
MOV 31H,A
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#02H
LCALL RD24
MOV 32H,A
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#03H
LCALL RD24
MOV 33H,A
RET
PT2314_WR:
ACALL START
MOV A,#PT2314_ADD
ACALL SENDDATE
ACALL ASKW
MOV A,PT2314_MSB
ACALL SENDDATE
ACALL ASKW
ACALL STOP
RET
;************************************
;以上为写PT2314各个控制数据到写的程序
;************************************
;以下为I2C总线的各个控制信号
;**************************************
;写存储器时等待ASK信号
ASKW: ACALL DELAY
SETB SDA ;释放SDA_P总线
ACALL DELAY
SETB SCL
WAITASKW: MOV C,SDA
JC WAITASKW
;LCALL DELAY10
CLR SCL
CLR SDA
RET
;**********************************
;MCU作为从器件不应答
NOASK: SETB SDA
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
CLR SDA
RET
;-----------------------------------
;启动信号
START: SETB SCL
SETB SDA
ACALL DELAY
CLR SDA
ACALL DELAY
CLR SCL
RET
;---------------------------
;停止信号
STOP: CLR SCL
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
SETB SDA
ACALL DELAY
RET
;---------------------------------
;读数据到总线上,A作为移位输出寄存器
SENDDATE: MOV R2,#8
LOOPW: RLC A
MOV SDA,C
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
DJNZ R2,LOOPW
CLR SDA
RET
;--------------------------------
;读24C08子程序。
RD24: PUSH ACC
SETB SDA
CLR SCL
CALL START
MOV A,#0A0H
CALL SENDDATE
CALL ASKW
POP ACC
CALL SENDDATE
CALL ASKW
CALL START
MOV A,#0A1H
CALL SENDDATE
CALL ASKW
SETB SDA
MOV R7,#8
CLR A
SETB SDA
RD000: RL A
SETB SCL
MOV C,SDA
MOV ACC.0,C
CLR SCL
DJNZ R7,RD000
RET
;-------------------------------
;写入24C02程序:
WT24: PUSH ACC
SETB SDA
CLR SCL
CALL START
MOV A,#0A0H
CALL SENDDATE
CALL ASKW
POP ACC
CALL SENDDATE
CALL ASKW
MOV A,B
CALL SENDDATE
CALL ASKW
CALL STOP
CALL DELAY
RET
; -------------------------------
DELAY: NOP
NOP
NOP
NOP
RET
LCM_RESET: MOV LCM_D, #0FFH
ACALL W_LCD1
LCALL DELAY10
ACALL W_LCD1
LCALL DELAY10
ACALL W_LCD1
LCALL DELAY10
ACALL W_LCD1
CLR LCD_BIT
MOV LCM_BUFF,#0CH
ACALL W_LCD
CLR LCD_BIT
MOV LCM_BUFF,#01H
ACALL W_LCD
CLR LCD_BIT
MOV LCM_BUFF,#06H
ACALL W_LCD
RET
;********************************
;以下为LCD各个子程序程序应用部分
;********************************
WRTC: ;写控制
CLR LCD_BIT
MOV LCM_BUFF,ZLING
ACALL W_LCD
RET
WRTS: ;写数值
SETB LCD_BIT
MOV LCM_BUFF,SHUJU
ACALL W_LCD
RET
;==========================================================================
;送控制指令程序
W_LCD1: CLR LCD_BIT ;送控制指令程序
MOV LCM_BUFF,#28H ;显示模式设置,4位数据,双行显示,5x7点阵
W_LCD: ACALL BUSY_WAIT ;BF查询子程序
MOV A,LCM_D
ANL A,#0FH ;取出P0口的控制,暂放在R7里
MOV R7,A
MOV A,LCM_BUFF ;取控制或数值
ANL A,#0F0H ;先取高位控制或数值
ORL A,R7 ;和P0口的控制一起送回P0口
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -