📄 mp3_ctrolert
字号:
LCALL disp_flat
LJMP M_EOPTION
M_3OPTION:
CJNE A,#03H,M_4OPTION
LCALL disp_class
LJMP M_EOPTION
M_4OPTION:
CJNE A,#04H,M_5OPTION
LCALL disp_rock
LJMP M_EOPTION
M_5OPTION:
M_EOPTION:
RET
MUSIC_OP:
DB 0X68,0X79;;POP
DB 0X69,0X78;FLAT
DB 0X6A,0X7B;CLASS
DB 0X6B,0X7A;ROCK
SETB_OP_MUSIC:
MOV DPTR,#MUSIC_OPTION
MOVX A,@DPTR
CJNE A,#0H,SETM1OPTION
MOV DPTR,#SOUND_OP+7
MOV R0,#vol_ctr+7
MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
MOVX A,@DPTR
MOV @R0,A
LJMP SETME5OPTION
SETM1OPTION:
CJNE A,#01H,SETM2OPTION
LJMP SETME5PTION
SETM2OPTION:
CJNE A,#02H,SETM3OPTION
LJMP SETME5PTION
SETM3OPTION:
CJNE A,#03H,SETM4OPTION
LJMP SETME5PTION
SETM4OPTION:
CJNE A,#04H,SETME5OPTION
LJMP SETME5PTION
SETME5PTION:
DEC A
MOV B,#2
MUL AB
MOV DPTR,#MUSIC_OP
ADD A,DPL
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R0,#vol_ctr+7
MOV @R0,A
CLR A
INC DPTR
MOVC A,@A+DPTR
MOV R0,#vol_ctr+8
MOV @R0,A
SETME5OPTION:
RET
READ_MAP: ;上电/初始化操作
LCALL RD_1MAP
MOV DPTR,#00FDH
MOVX A,@DPTR
CJNE A,#0FDH,ERROR
INC DPTR
MOVX A,@DPTR
CJNE A,#0FDH,ERROR
INC DPTR
MOVX A,@DPTR
CJNE A,#0FDH,ERROR
LJMP ALL_RIGNH
ERROR:
LCALL CLR_XRAM
MOV DPTR,#00FDH
MOV A,#0FDH
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
LCALL SETB_MAP
ALL_RIGNH:
ret
SETB_MAP:
MOV R0,#00H
MOV DPTR,#0000H
WER_MAP:
MOVX A,@DPTR
lcall write_1byte
INC R0
INC DPTR
MOV A,DPH
CJNE A,#01H,WER_MAP
RET
;-----------------------------
;eeram
;-----------------------------
RD_ERAOM:
CLR EA
lcall read_1bit
SETB EA
RET
read_1bit:
MOV DEECON,#00
MOV DEEADR,R0
NAD_ERAM1:
MOV A,DEECON
JB ACC.7,NAD_ERAM2
LJMP NAD_ERAM1
NAD_ERAM2:
MOV A,DEEDAT
ret
WD_EERAM:
PUSH 00H
CLR EA
lcall write_1byte
SETB EA
POP 00H
RET
write_1byte:
MOV DEECON,#00
MOV DEEDAT,A
MOV DEEADR,R0
WAD_ERAM1:
MOV A,DEECON
JB ACC.7,WAD_ERAM2
LJMP WAD_ERAM1
WAD_ERAM2:
ret
CLR_XRAM:
MOV DPTR,#0000H
CLR_1XRAM:
MOV A,#00H
MOVX @DPTR,A
INC DPTR
MOV A,DPH
CJNE A,#02H,CLR_1XRAM
LCALL ORI_STATION;电台默认
LCALL ORII_MODE;默认音量,模式设置
LCALL RADIO_SMAP;收音机设置默认设置
RET
RADIO_SMAP:
MOV DPTR,#DAT_REDIO;收音机参数存储地址
MOV A,#0x29
MOVX @DPTR,A
MOV R0,A
INC DPTR
MOV A,#0x9D
MOVX @DPTR,A
MOV R1,A
INC DPTR
MOV A,#0x29;;21;41;61
MOVX @DPTR,A
INC DPTR
MOV A,#0x11
MOVX @DPTR,A
INC DPTR
MOV A,#0x40
MOVX @DPTR,A
RET
ORII_MODE:;SOUND_OP: DB 0x88,0x1F,0x0c8,0x0e8,0x88,0x0a8,0x48,0x6A,0x7B
MOV DPTR,#SOUND_OP
MOV A,#88H
MOVX @DPTR,A
INC DPTR
MOV A,#1FH
MOVX @DPTR,A
INC DPTR
MOV A,#0CFH
MOVX @DPTR,A
INC DPTR
MOV A,#0EFH
MOVX @DPTR,A
INC DPTR
MOV A,#08FH
MOVX @DPTR,A
INC DPTR
MOV A,#0AFH
MOVX @DPTR,A
INC DPTR
MOV A,#48H
MOVX @DPTR,A
INC DPTR
MOV A,#68H
MOVX @DPTR,A
INC DPTR
MOV A,#78H
MOVX @DPTR,A
RET
ORI_STATION:
PUSH 00H
MOV DPTR,#STATION_FRE;频率参数存储地址
MOV R0,#30
DFG_MAP:
MOV A,#32H;29H
MOVX @DPTR,A
INC DPTR
MOV A,#3fH;9DH
MOVX @DPTR,A
INC DPTR
DJNZ R0,DFG_MAP
POP 00H
RET
RD_1MAP:
MOV R0,#00H
MOV DPTR,#0000H
SQS:
lcall read_1bit
MOVX @DPTR,A
INC DPTR
INC R0
MOV A,DPH
CJNE A,#01H,SQS
RET
WDT_OP:
MOV ACC,WDCON ;读取WDT控制寄存
ORL A,#0e0H
SETB ACC.2 ;置位ACC.2准备
MOV WDL,#0FFH ;设置8位倒计时器
MOV WDCON,ACC ;启动WDT
MOV WFEED1,#0A5H ;清零第一部分
MOV WFEED2,#5AH ;清零第二部分
RET
wtcg_reset:
MOV ACC,WDCON ;读取WDT控制寄存
ORL A,#080H
SETB ACC.2 ;置位ACC.2准备
MOV WDL,#0FFH ;设置8位倒计时器
MOV WDCON,ACC ;启动WDT
ret
CLR_WDT:
CLR EA; 禁止中断
MOV WFEED1,#0A5H; 执行清零第一部分
MOV WFEED2,#05AH; 执行清零第二部分
SETB EA ;使
RET
clr_wdt_nea:
MOV WFEED1,#0A5H; 执行清零第一部分
MOV WFEED2,#05AH; 执行清零第二部分
ret
INI_CPU:
mov P1M1,#02H
mov P1M2,#00H
mov P2M1,#00H
mov P2M2,#00H
mov P0M1,#44H
mov P0M2,#00H
MOV TMOD,#11H;定时器方式,16位
MOV TAMOD,#00H
MOV TCON,#05H
MOV TH0,#15H;延时20MS
MOV TL0,#0A0H
SETB ET0;
MOV P0,#0FFH
MOV P1,#0AFH
MOV P2,#03DH
MOV SCON,#50H
MOV SSTAT,#40H
MOV BRGR0,#61H; // setup BRG for 9600 baud @ 12MHz external Crystal
MOV BRGR1,#02H;
MOV BRGCON,#03H
MOV ADMODA,#0x01 ;0000 0001, 选择转换工作模式:单次转换模式
MOV ADMODB,#0x40 ;500Khz < ADC CLK < 3.3Mhz,,
MOV IP0,#10H
MOV IP0H,#10H
SETB ES
SETB TR0
SETB REN
RET
;------------------------
;中断服务区
;CPU 初始化
;--------------------------
SCRON:
PUSH 00H
PUSH PSW
PUSH ACC
jbc TI,SEND_com
CLR RI
MOV A,SBUF
JB COM_2BIT,RD1_com
JBC COM_1BIT,EXIT_2COM
CJNE A,#0F3H,exit_com
MOV CONNECTC,#30
SETB SCON_DINGSHIB
MOV S_COM_CU,#5
SETB COM_1BIT
LJMP exit_com
EXIT_2COM:
CJNE A,#0F3H,exit_com
MOV CONNECTC,#30
SETB COM_2BIT
MOV S_COM_CU,#5
MOV ADRESS,#MP3_RDATA
LJMP exit_com
RD1_com:
MOV CONNECTC,#30
SETB ACC.7
MOV R0,ADRESS
MOV @R0,A
INC R0
MOV ADRESS,R0
MOV S_COM_CU,#5
CJNE R0,#MP3_RDATA+5,exit_com
CLR SCON_DINGSHIB
MOV S_COM_CU,#5
SETB COM_3BIT
CLR COM_2BIT
LJMP exit_com
SEND_com:
exit_com:
POP ACC
POP PSW
POP 00H
reti
INT_T0:
PUSH PSW
PUSH ACC
PUSH 00H
PUSH 01H
PUSH DPH
PUSH DPL
PUSH B
MOV TH0,#15H
MOV TL0,#0A0H
LCALL OWNER_J;私位子判断
LCALL KEY_DEAL
;----------------------------------------------
JNB P_SELCMB,NEXT_T4
MOV DISP_TIMERC,#10
DJNZ P_SELCB,NEXT_T4
CLR P_SELCMB
MOV KEY_COUNT,#00
NEXT_T4:
JNB SELCMD_DONE,NEXT_T5
MOV SOUND_SC,#20
DJNZ SELCMC_DONE,NEXT_T5
MOV SELEC_C,#00
SETB SOUND_SB
MOV SOUND_SC,#1
JNB MUSIC_SET_AREA,NEXT_T5
CLR MUSIC_SET_AREA
LCALL SAV_MUSIC_OP
;---------------------------------------------
NEXT_T5:
JNB SOUND_SB,NEXT_T0
MOV DISP_TIMERC,#4
DJNZ SOUND_SC,NEXT_T0
LCALL COVERY_DISP
LCALL CLR_TESET
LCALL CLR_CARRY_BIT
CLR SOUND_SB
NEXT_T0:
JNB DISP_VMODE,NEXT_T1
MOV DISP_TIMERC,#10
DJNZ DISP_VMODC,NEXT_T1
CLR DISP_VMODE
NEXT_T1:
JNB P_MB,NEXT_T2
DJNZ P_CMB,NEXT_T2
CLR P_MB
MOV MKEY_COUNT,#00
SETB M_KEY_BAL
NEXT_T2:
JNB P_PMB,NEXT_T3
MOV DISP_TIMERC,#10
DJNZ P_PCMB,NEXT_T3
CLR P_PMB
MOV HAND_COUNT,#00
SETB HAND_BAKL
NEXT_T3:
JNB SCON_DINGSHIB,NEXT_T6
DJNZ S_COM_CU,NEXT_T6
CLR SCON_DINGSHIB
MOV S_COM_CU,#5
CLR COM_3BIT
CLR COM_2BIT
CLR COM_1BIT
NEXT_T6:
JNB CONNECT_1BITS,NEXT_T7
DJNZ CONNECTC,NEXT_T7
MOV CONNECTC,#10
CLR CONNECT_1BITS
NEXT_T7:
JNB DISPB_TEMP,NEXT_T8
DJNZ DISPC_TEMP,NEXT_T8
MOV DISPC_TEMP,#10
JBC DISPD_TEMP,NEXT_T71
SETB DISPD_TEMP
LCALL CLR_AXIO
LJMP NEXT_T8
NEXT_T71:
LCALL COVERY_LSD
NEXT_T8:
DJNZ DISP_TIMERC,TIMER_DISP
MOV DISP_TIMERC,#4
lcall clr_wdt_nea
SETB DISP_TIMERD
TIMER_DISP:
LCALL LJMP_MP3J
POP B
POP DPL
POP DPH
POP 01H
POP 00H
POP ACC
POP PSW
RETI
;----------------------------
;KEY_DO_DEAL:;
;----------------------------
OWNER_J:;私位子判断计数
CLR C
JNB P0.2,SADFSF
SETB C
SADFSF:
MOV A,swz_pt
RLC A
MOV swz_pt,A
MOV R0,#08H
MOV R1,#00H
UNTT_0:
RLC A
JNC UNTT_1
INC R1
UNTT_1:
DJNZ R0,UNTT_0
CJNE R1,#05H,DSD_76
DSD_76:
JNC SDSD_GOON1
lcall wtcg_reset
SDSD_GOON1:
RET
KEY_DEAL:
LCAll ADC_SETC0
LCAll ADC_SETC1
MOV R1,TEMP_AD0
MOV A,#CHANEL1
LCALL COMPARE_DAT
CJNE A,#0BBH,NEXT_CHANEL0
LCALL JUDG1_KEYL
LJMP NEXT_CHANEL2
NEXT_CHANEL0:
LCALL JUDG1_KEYH
NEXT_CHANEL:
MOV R1,TEMP_AD1
MOV A,#CHANEL2
LCALL COMPARE_DAT
CJNE A,#0BBH,NEXT_CHANEL1
LCALL JUDG2_KEYL
LJMP NEXT_CHANEL2
NEXT_CHANEL1:
LCALL JUDG2_KEYH
NEXT_CHANEL2:
RET
JUDG2_KEYH:
JNB KEY_2D,CH2H_KEY3
JNB KEY_2UPB,CH2H_KEY0
DJNZ KEY_2UPC,CH2H_KEY3
LCALL RESET_KEY
MOV A,POWER_TEMP
MOV POWER_TEMP,#00
CJNE A,#PW,CH2H_KEY3;PW
MOV A,POW_CDD
MOV POW_CDD,#00
JNB POW_RESET,CH2H_2K
CJNE A,#1,CH2H_2K1
CH2H_2K1:
JC CH2H_KEY3
anl p1,#0afh
lcall wtcg_reset
LJMP CH2H_KEY3
CH2H_2K:
SETB POW_RST
LJMP CH2H_KEY3
CH2H_KEY0:
SETB KEY_2UPB
CH2H_KEY3:
RET
JUDG2_KEYL:
CLR KEY_2UPB
MOV KEY_2UPC,#6
JB KEY_2D,CH2_KEY2
JB KEY_2C,CH2_KEY1
JNB KEY_2B,CH2_KEY0
LCALL RESET_KEY
SETB KEY_2C
LJMP CH2_KEY3
CH2_KEY0:
LCALL RESET_KEY
SETB KEY_2B
LJMP CH2_KEY3
CH2_KEY1:
MOV TEMP2_KEYD,TEMP_AD1
LCALL RESET_KEY
MOV KEY_2CC,#2
SETB KEY_2D
LJMP CH2_KEY3
CH2_KEY2:
DJNZ KEY_2CC,CH2_KEY3
MOV KEY_2CC,#13
MOV TEMP2_KEYD,TEMP_AD1
LCALL JUDG_2YDD
CH2_KEY3:
RET
JUDG_2YDD:
MOV POWER_TEMP,#00H
MOV R1,TEMP2_KEYD
MOV A,#PW
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD1
MOV POWER_TEMP,#PW
INC POW_CDD
MOV A,POW_CDD
CJNE A,#2,PPWOR
MOV POW_CDD,#1
JNB POW_RESET,PPWOR
anl p1,#0afh
LJMP EXIT_G2YD
PPWOR:
JB POW_RESET,EXIT_GXYD
orl p1,#5fh
EXIT_GXYD:
LJMP EXIT_G2YD
G_2YDD1:
MOV A,#AF_MO
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD2
;LCALL CLR_CARRY_BIT
SETB P_AF_MO
LCALL CLR_SELECTS_BIT
LJMP EXIT_G2YD
G_2YDD2:
MOV A,#MODE
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD3
;LCALL CLR_CARRY_BIT
SETB P_MODE
LCALL CLR_SELECTS_BIT
LJMP EXIT_G2YD
G_2YDD3:
MOV A,#MUTE
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD4
;LCALL CLR_CARRY_BIT
LCALL MUTE_PRESS
LCALL CLR_SELECTS_BIT
LJMP EXIT_G2YD
G_2YDD4:
MOV A,#SEL
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD5
JB SELECT_CTR_SGN,G_2YDD5
INC KEY_COUNT
mov SELCMC_DONE,#150
SETB P_SEL
SETB P_SELCMB
MOV P_SELCB,#15
mov a,KEY_COUNT
CJNE A,#0EH,G_2YDD5
SETB SELECT_CTR_SGN
LJMP EXIT_G2YD
G_2YDD5:
MOV A,#V_UP
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD6
SETB P_V_UP
LJMP EXIT_G2YD
G_2YDD6:
MOV A,#V_DN
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDD7
SETB P_V_DN
LJMP EXIT_G2YD
G_2YDD7:
MOV A,#CLK
LCALL COMPARE_DAT
CJNE A,#0AAH,G_2YDDD
;LCALL CLR_CARRY_BIT
SETB P_CLK
LCALL CLR_SELECTS_BIT
LJMP EXIT_G2YD
EXIT_G2YD:
LCALL CLR_DISPCOUNT
G_2YDDD:
RET
SELECT_CTR_DONE:
JNB SELECT_CTR_SGN,EXIT_YCTL
mov KEY_COUNT,#00
clr P_SELCMB
SETB MUSIC_SET_AREA
lcall SELECT_CTR
CLR SELECT_CTR_SGN
EXIT_YCTL:
RET
JUDG1_KEYH:
JNB KEY_1D,CH1H_KEY3
JNB KEY_1UPB,CH1H_KEYY
DJNZ KEY_2UPC,CH1H_KEY3
LCALL RESET_KEY
LJMP CH1H_KEY3
CH1H_KEYY:
SETB KEY_1UPB
LJMP CH1H_KEY3
CH1H_KEY3:
RET
JUDG1_KEYL:
CLR KEY_1UPB
MOV KEY_1UPC,#6
JB KEY_1D,CH1_KEY2
JB KEY_1C,CH1_KEY1
JNB KEY_1B,CH1_KEY0
LCALL RESET_KEY
SETB KEY_1C
LJMP CH1_KEY3
CH1_KEY0:
LCALL RESET_KEY
SETB KEY_1B
LJMP CH1_KEY3
CH1_KEY1:
MOV TEMP1_KEYD,TEMP_AD0
LCALL RESET_KEY
MOV KEY_1CC,#2
SETB KEY_1D
LJMP CH1_KEY3
CH1_KEY2:
DJNZ TIME_COUNT,CH1_KEY20
MOV TIME_COUNT,#50
INC TIME_COMP
CH1_KEY20:
DJNZ KEY_1CC,CH1_KEY3
MOV KEY_1CC,#13
MOV TEMP1_KEYD,TEMP_AD0
LCALL JUDG_1YDD
CH1_KEY3:
RET
RESET_KEY:
MOV KEY_1CC,#15
MOV KEY_2CC,#15
MOV KEY_2UPC,#6
MOV KEY_1UPC,#6
MOV TIME_COUNT,#50
MOV TIME_COMP,#00H
MOV 2FH,#00
CLR SAME_KEY
RET
JUDG_1YDD:
MOV R1,TEMP1_KEYD
MOV A,#M1
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD1
MOV MKEY_KJU,#00
LJMP PUT_DF
G_1YDD1:
MOV A,#M2
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD2
MOV MKEY_KJU,#01
LJMP PUT_DF
G_1YDD2:
MOV A,#M3
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD3
MOV MKEY_KJU,#02
LJMP PUT_DF
G_1YDD3:
MOV A,#M4
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD4
MOV MKEY_KJU,#03
LJMP PUT_DF
G_1YDD4:
MOV A,#M5
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD5
MOV MKEY_KJU,#04
LJMP PUT_DF
G_1YDD5:
MOV A,#M6
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD6
MOV MKEY_KJU,#05
PUT_DF:
LCALL CLR_WDT
JB SAV_MKEY_SIGN,G_1YDD6
SETB P_MB
MOV P_CMB,#18
MOV A,MKEY_KJU_BAK
CJNE A,MKEY_KJU,PUT_1DF
INC MKEY_COUNT
MOV A,MKEY_COUNT
CJNE A,#0EH,G_1YDD6
CLR P_MB
MOV MKEY_COUNT,#00
SETB SAV_MKEY_SIGN
LJMP EXIT_G1YD
PUT_1DF:
MOV MKEY_KJU_BAK,MKEY_KJU
MOV MKEY_COUNT,#00
LJMP EXIT_G1YD
G_1YDD6:
MOV A,#UP
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD7
MOV HAND_KEY,#5
LJMP G_1YDD7B
G_1YDD7:
MOV A,#DN
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD8
MOV HAND_KEY,#6
G_1YDD7B:
JB AUTO_SRHED,G_1YDD8
SETB P_PMB
MOV P_PCMB,#15
MOV A,HAND_KEY
CJNE A,HAND_KEY_BAK,G_1YDD7C
JB MP3_MODE,G_1YDD7C
INC HAND_COUNT
MOV A,HAND_COUNT
CJNE A,#03H,G_1YDD8
MOV HAND_COUNT,#00
mov HAND_KEY_BAK,#00
CLR P_PMB
SETB AUTO_SRHED
LJMP EXIT_G1YD
G_1YDD7C:
MOV HAND_KEY_BAK,HAND_KEY
MOV HAND_COUNT,#00
LJMP EXIT_G1YD
G_1YDD8:
MOV A,#BAND
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDD9
SETB P_BAND
LJMP EXIT_G1YD
G_1YDD9:
MOV A, #A_P
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDDA
SETB AUTO_SEACHJ
LJMP EXIT_G1YD
G_1YDDA:
MOV A,#SCAN
LCALL COMPARE_DAT
CJNE A,#0AAH,G_1YDDD
SETB P_SCAN
LJMP EXIT_G1YD
EXIT_G1YD:
LCALL CLR_DISPCOUNT
LCALL CLR_SELECTS_BIT
G_1YDDD:
RET
SEARCH_START:
JNB AUTO_SEACHJ,YUI_AUTO
LCALL CLR_CARRY_BIT
JB MP3_MODE,YUI_AUTO
LCALL CLR_FLASH;打开闪烁;
SETB DISPB_TEMP
SETB SEACH_BEGIN;开始搜索
lcall setb_lower
MOV STATION_COUNT,#30
MOV STATION_RV,#0
MOV DPTR,#STATION_FRE
MOV STA_DPH,DPH
MOV STA_DPL,DPL
YUI_AUTO:
RET
setb_higher:
MOV R1,#W_DWord
MOV @R1,#33H
INC R1
MOV @R1,#63H
ret
setb_lower:
MOV R0,#W_DWord
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -