📄 mp3_ctrolert
字号:
#include "Reg935.inc"
#include "KEY_DEF.INC"
I2cSDA BIT P2.5;收音机I2C
I2cSCL BIT P2.4
LCD_SCK BIT P1.2;LCD的I2C
LCD_DATA BIT P1.3
LCD_STB BIT P0.1
POWER_2 BIT P1.6;电源
POWER_1 BIT P1.4
MP3_STATE BIT P0.6;检测MP3信号
MUTE_CTROL BIT P0.3;禁音控制
SDA_AMPLIFY BIT P2.6;放大器的I2C
SCLK_AMPLIFY BIT P2.7
Set_disp DATA 0dH
Status_c DATA 84H
DATA_TY DATA 05H
ABS_H DATA 03H
SAV_BAND DATA 0000H;波段存储
STAT_COUNT DATA 0001H;电台计数
VOLMODE_SAV DATA 0002H;收音机播放模式控制
MUSIC_OPTION DATA 0003H;音场控制
PLAY_MODE DATA 0004H;播放模式选择
SOUND_OP DATA 0010H;音量控制参数9位
DAT_REDIO DATA 0020H;收音机控制参数
STATION_FRE DATA 0080H;电台频率参数存储位置
DL5US DATA 08H
DL9US DATA 020H
G_SENDSD DATA 0130H;
G_RECI DATA 0140H;
vol_ct_TEMP DATA 0100H;
DISP_PROTECT DATA 0160H;
W_DWord_BAK DATA 0190H
COMM_L1 DATA 0A3H
COMM_L2 DATA 0AFH
COMM_L3 DATA 0BBH
COMM_L4 DATA 0C8H
W_DWord DATA 09EH;收音机发送缓冲
R_DWord DATA 099H;收音机接收缓冲
vol_ctr DATA 08FH
MP3_RDATA DATA 088H;MP3返回数据缓冲
MP3_RV_DAT DATA 0120H;
AUDIO_EQ DATA 0AH
ORDER_CMD EQU 08H
DISP_ADRESS EQU 09H
DISP_COM1 EQU 0AH
DISP_COM2 EQU 0BH
DISP_COM3 EQU 0CH
CHAR_ADR EQU 0DH
DISP_COLUM EQU 0EH
DELAY_COUNT EQU 0FH
SEND_DATA EQU 10H
READ_DATA EQU 11H
TEMP_AD0 EQU 12H
TEMP_AD1 EQU 13H
TEMP_AD2 EQU 14H
TEMP_AD3 EQU 15H
KEY_1CC EQU 16H
KEY_2CC EQU 17H
TEMP1_KEYD EQU 18H
TEMP2_KEYD EQU 19H
TEMPC EQU 1AH
STA_COUNT EQU 1BH
DISP_TIMERC EQU 1CH
ii_data EQU 1DH
POW_COUNT EQU 1EH
POW_CDD EQU 1FH
DIV_C EQU 30H
DIV_L EQU 31H
DIV_M EQU 32H
DIV_H EQU 33H
D_TEMP1 EQU 34H
D_TEMP2 EQU 35H
D_INT EQU 3AH
D_DIV EQU 3BH
STATION_COUNT EQU 3CH
STA_DPH EQU 3DH
STA_DPL EQU 3EH
STATION_RV EQU 3FH
SOUND_SC EQU 40H
SELEC_C EQU 41H
TIME_COUNT EQU 42H
TIME_COMP EQU 43H
KEY_2UPC EQU 44H
KEY_1UPC EQU 45H
DISP_VMODC EQU 46H
ADRESS EQU 47H
P_CMB EQU 48H
P_CMC EQU 49H
P_PCMB EQU 4AH
P_PCMC EQU 4BH
P_SELCB EQU 4CH
P_SELCC EQU 4DH
SELCMC_DONE EQU 4EH
SEND_ADRESS EQU 4FH;
SEND_LENGTH EQU 50H
MUSIC_OPTC EQU 51H
S_COM_CU EQU 52H
POWER_TEMP EQU 53H
CONNECT EQU 54H
CONNECTC EQU 55H
swz_pt EQU 56H
DISP_TEMPS EQU 57H
DISPC_TEMP EQU 58H
KEY_COUNT EQU 59H
MKEY_KJU EQU 5AH
MKEY_KJU_BAK EQU 5BH
MKEY_COUNT EQU 5CH
HAND_KEY EQU 5DH
HAND_KEY_BAK EQU 5EH
HAND_COUNT EQU 5FH
MP3_J EQU 60H
DISP_TIMERD BIT 01H
ERROR_SF BIT 02H
RADIO_ERR BIT 03H
SEACH_BEGIN BIT 04H
SOUND_SB BIT 05H
MUTE_KNOCK BIT 06H
P_DN BIT 07H
P_AF_MO BIT 08H
P_V_DN BIT 09H
P_CLK BIT 0AH
P_MODE BIT 0BH
P_V_UP BIT 0CH
P_SEL BIT 0DH
P_MUTE BIT 0EH
P_BAND BIT 0FH
P_A_P BIT 10H
P_SCAN BIT 11H
P_M1 BIT 12H
P_M2 BIT 13H
P_M3 BIT 14H
P_M4 BIT 15H
P_M5 BIT 16H
P_M6 BIT 17H
P_UP BIT 18H
SAME_KEY BIT 19H
DISP_VMODE BIT 20H
P_MB BIT 21H
P_MD BIT 22H
P_PMB BIT 23H
P_PMD BIT 24H
SEACH_QUICK BIT 25H
P_SELCMB BIT 26H
P_SELCMD BIT 27H
SELC_QUICK BIT 28H
SEND_END BIT 29H
SCON_DINGSHIB BIT 2AH
CONNECT_1BITS BIT 2BH
CONNECT_BS BIT 2CH
DISPB_TEMP BIT 2DH
DISPD_TEMP BIT 2EH
MUSIC_SET_AREA BIT 2FH
AUTO_SRHED BIT 30H
M_KEY_BAL BIT 31H
HAND_BAKL BIT 32H
SAV_MKEY_SIGN BIT 33H
AUTO_SEACHJ BIT 34H
SELECT_CTR_SGN BIT 35H
power_colse bit 59h
HAND_PRESS BIT 5AH
WAIT_B BIT 5BH
ALLOW_OP BIT 5CH
SETB_FADRF BIT 5DH
SETB_FADLF BIT 5EH
SETB_BALRR BIT 5FH
SETB_BALLR BIT 60H
TRE_SETB BIT 61H
BASS_SETB BIT 62H
SELCMD_DONE BIT 63H
VOL_SETB BIT 64H
sign_INT BIT 65H
AREAO_ON BIT 66H
sign_ROCK BIT 68H
sign_POP BIT 69H
sign_CLASS BIT 6AH
sign_FLAT BIT 6BH
sign_stop BIT 6CH
sign_rpt BIT 6DH
sign_rdm BIT 6EH
S_SCAN BIT 6FH
MP3_MODE BIT 70H
COM_3BIT BIT 71H
COM_1BIT BIT 72H
COM_2BIT BIT 73H
RADIO_MODE BIT 74H
POW_CLOSE BIT 75H
POW_RESET BIT 76H
POW_RST BIT 77H
KEY_2UPB BIT 78H
KEY_1B BIT 79H
KEY_1C BIT 7AH
KEY_1D BIT 7BH
KEY_1UPB BIT 7CH
KEY_2B BIT 7DH
KEY_2C BIT 7EH
KEY_2D BIT 7FH
ORG 0000H
LJMP BEGIN
ORG 000BH
LJMP INT_T0
ORG 0023H
LJMP SCRON
ORG 00078H
BEGIN:
CLR RS0
CLR RS1
MOV R0,#02H
MOV R1,#0FDH
CLR_RAM:
MOV @R0,#00
INC R0
DJNZ R1,CLR_RAM
MOV SP,#0C8H
LCALL INI_CPU
LCALL READ_MAP
LCALL WDT_OP ;看门狗初始化
mov swz_pt,#0ffh
SETB EA
MAIN_CT:
LCALL CLR_WDT
JB POW_RESET,POWER_ER
JNB POW_RST,MAIN_CT
LCALL POWER_RESET;带电复位
LJMP MAIN_CT
POWER_ER:
JNB DISP_TIMERD,NEXE_1TASK
LCALL HIST_COVERY
NEXE_1TASK:
LCALL DEAL_KEYS;按键处理
JB HAND_PRESS,NEXT_3TASK
JB MP3_MODE,NEXT_2TASK
JB MP3_STATE,NEXT_2TASK
LCALL DGNE_MP3
clr MUTE_CTROL
LJMP MAIN_CT
NEXT_2TASK:
JB HAND_PRESS,NEXT_3TASK
JNB MP3_MODE,NEXT_3TASK
JNB MP3_STATE,NEXT_3TASK
LCALL DGNE_RADIO
clr MUTE_CTROL
NEXT_3TASK:
; LCALL LJMP_MP3J
LJMP MAIN_CT
LJMP_MP3J:
MOV C,MP3_STATE
MOV A,MP3_J
RLC A
MOV MP3_J,A
ANL A,#03FH
CJNE A,#03FH,MP_XMP3J
LJMP MP_XMP4J
MP_XMP3J:
CLR HAND_PRESS
MP_XMP4J:
RET
DEAL_KEYS:
PUSH 00H
PUSH 01H
LCALL ST_MONO;单-双声道控制
LCALL ADD_1VOL
LCALL SUBB_1VOL
LCALL MODE_RVL;工作模式选择
LCALL RECI_MP3DAT
LCALL M_KEY
LCALL SELECT_CTR
LCALL SELECT_CTR_DONE
LCALL HAND_SEARCH
JB MP3_MODE,EXIT_1KEYS
LCALL SAV_MKEY
LCALL SEARCH_MAN
LCALL BAND_KEY;
LCALL SEARCH_START
LCALL AUTO_SEACH;搜索处理
EXIT_1KEYS:
POP 01H
POP 00H
RET
HAND_SEARCH:
JBC HAND_BAKL,D_1SEARCH
LJMP EXIT_3SH
D_1SEARCH:
SETB MUTE_CTROL
MOV A,HAND_KEY
JNB MP3_MODE,EXIT_0SH
lcall tedr_sbuf
lcall reci_datmp3
LJMP EXIT_2SH
EXIT_0SH:
CJNE A,#05,EXIT_1SH
LCALL UP_5SEARCH_SET
LJMP EXIT_2SH
EXIT_1SH:
CJNE A,#06,EXIT_2SH
LCALL DOWN_5SEARCH
LJMP EXIT_2SH
EXIT_2SH:
clr MUTE_CTROL
EXIT_3SH:
RET
UP_5SEARCH_SET:
PUSH 06H
PUSH 07H
lcall up_sethig
LCALL JUDG_PLK;四舍5入补偿后设置
POP 07H
POP 06H
RET
up_sethig:
LCALL CLR_WDT
LCALL COVER_DATA
LCALL TOP_JUDGE;高极限判断
MOV R1,#W_DWord
INC R1
CLR C
MOV A,@R1
ADD A,#06H
MOV @R1,A
MOV R6,A
DEC R1
MOV A,@R1
ADDC A,#00
MOV @R1,A
MOV R7,A
ret
DOWN_5SEARCH:
PUSH 07H
PUSH 06H
lcall down_ssh
LCALL JUDG_PLK
POP 07H
POP 06H
RET
down_ssh:
LCALL COVER_DATA
LCALL DOWN_JUDGE
MOV R1,#W_DWord
INC R1
CLR C
MOV A,@R1
SUBB A,#06H
MOV @R1,A
MOV R6,A
DEC R1
MOV A,@R1
SUBB A,#00
MOV @R1,A
MOV R7,A
ret
SEARCH_MAN:
JB AUTO_SRHED,CH_0MAN
LJMP AUTO_END
CH_0MAN:
SETB MUTE_CTROL
MOV A,HAND_KEY
CJNE A,#5,H_AUTODOWN
LCALL UP_SEARCH
LJMP AUTO_END
H_AUTODOWN:
CJNE A,#6,AUTO_END
LCALL DOWN_SEARCH
AUTO_END:
CLR MUTE_CTROL
RET
DOWN_SEARCH:;
PUSH 06H
PUSH 07H
LCALL CLR_FLASH
SETB DISPB_TEMP
UP_BOTT:
lcall down_ssh
MOV R1,#W_DWord
MOV A,@R1
ORL A,#0C0H
MOV @R1,A
MOV R1,#W_DWord+2
MOV A,@R1
CLR ACC.7
MOV @R1,A
LCALL WriteSTR
LCALL DEALY_50
BOTT_0DP:
LCALL CLR_WDT
LCALL READSTR
MOV R0,#R_DWord
MOV A,@R0
JB ACC.7,BOTT_1DP
LJMP BOTT_0DP
BOTT_1DP:
JNB ACC.6,BOTT_2DP
lcall setb_higher
LJMP UP_BOTT
BOTT_2DP:
LCALL CLR_WDT
LCALL JUDG_SDOWN
CJNE A,#0AAH,UP_BOTT
LCALL MEM_SUB
LCALL CLR_FLASH
LCALL CLR_DISPT
POP 06H
POP 07H
RET
DOWN_JUDGE:
lcall sav_zhip
LCALL DIV_4FGH
LCALL FIVE_ADC
MOV R0,#36H
LCALL COMP_108
JC EXIT_1BOTTOM
LJMP EXIT_3BOTTOM
EXIT_1BOTTOM:
MOV R0,#36H
LCALL COM_875
JNC EXIT_4BOTTOM
EXIT_3BOTTOM:
lcall setb_higher
EXIT_4BOTTOM:
RET
JUDG_SDOWN:
PUSH DPL
PUSH DPH
LCALL SAV_DATA_STA
MOV R4,#01H
YUID_2IOP:
MOV R1,#W_DWord
MOV A,@R1
ANL A,#3FH
MOV @R1,A
INC R1
CLR C
MOV A,@R1
SUBB A,#1;1
MOV @R1,A
DEC R1
MOV A,@R1
SUBB A,#00
MOV @R1,A
LCALL SETB_SEARCH
CLR ACC.7
LCALL JUDG_OPLH
CJNE A,02H,YUID_S4IOP
INC R1
MOV A,@R1
CJNE A,03H,YUID_S4IOP
INC R4
LJMP YUID_2IOP
YUID_S4IOP:
CJNE R4,#03H,YUID_S5IOP
YUID_S5IOP:
LCALL SET_SCVB
POP DPH
POP DPL
RET
JUDG_PLK:
GO_0ONADD:
LCALL DIV_4FGH
LCALL JUDG_HALF
CJNE R1,#0AAH,GO_1ONADD
LJMP GO_3ONADD
GO_1ONADD:
CJNE R1,#0ADH,GO_2ONADD
LCALL ADDC_1
LJMP GO_0ONADD
GO_2ONADD:
CJNE R1,#0DAH,EXIT_DSCHED
LCALL SUBB_1
LJMP GO_0ONADD
GO_3ONADD:
LCALL WriteSTR
LCALL SAV_DATA_STA
LCALL SEARCH_V
EXIT_DSCHED:
RET
UP_SEARCH:;
PUSH 06H
PUSH 07H
LCALL CLR_FLASH
SETB DISPB_TEMP;打开闪烁
UP_TOP:
lcall up_sethig
MOV R1,#W_DWord
MOV A,@R1
ORL A,#0C0H
MOV @R1,A
MOV R1,#W_DWord+2
MOV A,@R1
SETB ACC.7
MOV @R1,A
LCALL CLR_WDT
LCALL WriteSTR
LCALL DEALY_50
TOP_0DP:
LCALL READSTR
MOV R0,#R_DWord
MOV A,@R0
JB ACC.7,TOP_1DP
LJMP TOP_0DP
TOP_1DP:
JNB ACC.6,TOP_2DP
lcall setb_lower
LJMP UP_TOP
TOP_2DP:
LCALL JUDG_SENDSD
CJNE A,#0AAH,UP_TOP
LCALL MEM_SUB
LCALL CLR_FLASH
POP 07H
POP 06H
RET
MEM_SUB:
LCALL SEARCH_V
MOV R0,#W_DWord
MOV A,@R0
ANL A,#3FH
MOV @R0,A
LCALL WriteSTR
CLR AUTO_SRHED
RET
TOP_JUDGE:
lcall sav_zhip
LCALL DIV_4FGH
LCALL FIVE_ADC
MOV R0,#36H
LCALL COM_875
JNC EXIT_1TOP
LJMP EXIT_2TOP
EXIT_1TOP:
MOV R0,#36H
LCALL COMP_108
JC EXIT_3TOP
EXIT_2TOP:
lcall setb_lower
EXIT_3TOP:
RET
COM_875:
CJNE @R0,#0H,EXIT_0BOTTOM
INC R0
CJNE @R0,#8H,EXIT_0BOTTOM
INC R0
CJNE @R0,#7H,EXIT_0BOTTOM
INC R0
CJNE @R0,#5H,EXIT_0BOTTOM
EXIT_0BOTTOM:
RET
COMP_108:
CJNE @R0,#1H,EXIT_BOTTOM
INC R0
CJNE @R0,#0H,EXIT_BOTTOM
INC R0
CJNE @R0,#8H,EXIT_BOTTOM
INC R0
CJNE @R0,#0H,EXIT_BOTTOM
EXIT_BOTTOM:
RET
sav_zhip:
MOV R0,#W_DWord
MOV 07H,@R0
INC R0
MOV 06H,@R0
ret
COVER_DATA:
MOV R1,#W_DWord
MOV A,@R1
ANL A,#3FH
MOV @R1,A
RET
M_KEY:
JBC M_KEY_BAL,M_1KEY
LJMP EXIT_Y
M_1KEY:
JNB MP3_MODE,EXIT_1Y
LCALL MP3_MEKEY
LJMP EXIT_Y
EXIT_1Y:
LCALL DEAL_SHORTMEY
EXIT_Y:
RET
JUDG_MEKEY:
LCALL CLR_CARRY_BIT
MOV R1,MKEY_KJU
MOV DPTR,#SAV_BAND
MOVX A,@DPTR
lcall tedr_sbuf
DEC A
MOV B,#06H
MUL AB
ADD A,R1
MOV DPTR,#STAT_COUNT
MOVX @DPTR,A
MOV R1,A
MOV R0,DPL
LCALL WD_EERAM
MOV A,R1
MOV B,#02
MUL AB
NEXT_ME:
RET
DEAL_SHORTMEY:
LCALL JUDG_MEKEY
MOV DPTR,#STATION_FRE
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOVX A,@DPTR
MOV R1,#W_DWord
MOV @R1,A
INC R1
INC DPTR
MOVX A,@DPTR
MOV @R1,A
lcall RADIO_VMOD;显示RADIO截面
LCALL WriteSTR
RET
SAV_MKEY:
JB SAV_MKEY_SIGN,SDD_1EXITF
LJMP SDD_EXITF
SDD_1EXITF:
LCALL JUDG_MEKEY
MOV DPTR,#STATION_FRE
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV R1,#W_DWord
MOV A,@R1
MOVX @DPTR,A
MOV R0,DPL
LCALL WD_EERAM
INC R1
INC DPTR
MOV A,@R1
MOVX @DPTR,A
MOV R0,DPL
LCALL WD_EERAM
lcall RADIO_VMOD;显示RADIO截面
LCALL WriteSTR
CLR SAV_MKEY_SIGN
SDD_EXITF:
RET
MP3_MEKEY:
MOV R1,MKEY_KJU
CJNE R1,#00H,MP3_1MMKEY
JB sign_INT,MP3_5MMKEY
CLR sign_rpt
CLR sign_rdm
JBC sign_stop,MP3_4MMKEY
setb sign_stop
LJMP MP3_4MMKEY
MP3_1MMKEY:
CJNE R1,#01H,MP3_2MMKEY
SETB sign_INT
CLR sign_stop
CLR sign_rpt
CLR sign_rdm
SETB S_SCAN
JB MP3_MODE,MP3_4MMKEY
CLR S_SCAN
LJMP MP3_4MMKEY
MP3_2MMKEY:
CJNE R1,#02H,MP3_3MMKEY
JB sign_INT,MP3_5MMKEY
CLR sign_stop
CLR sign_rdm
JBC sign_rpt,MP3_4MMKEY
setb sign_rpt
LJMP MP3_4MMKEY
MP3_3MMKEY:
CJNE R1,#03H,MP3_5MMKEY
JB sign_INT,MP3_5MMKEY
CLR sign_stop
CLR sign_rpt
JBC sign_rdm,MP3_4MMKEY
setb sign_rdm
MP3_4MMKEY:
INC R1
MOV A,R1
lcall tedr_sbuf
LJMP MP3_5MMKEY
MP3_5MMKEY:
RET
BAND_KEY:
JNB P_BAND,EWE_BAND
LCALL CLR_CARRY_BIT
MOV DPTR,#SAV_BAND
MOVX A,@DPTR
lcall tedr_sbuf
INC A
CJNE A,#06H,EWE_1BAND
EWE_1BAND:
JC EWE_2BAND
MOV A,#01H
EWE_2BAND:
MOVX @DPTR,A
MOV R1,A
MOV R0,DPL
LCALL WD_EERAM
DEC R1
MOV A,R1
MOV B,#06
MUL AB
MOV DPTR,#STAT_COUNT
MOVX @DPTR,A
MOV R1,A
MOV R0,DPL
LCALL WD_EERAM
MOV A,R1
MOV B,#02
MUL AB
MOV DPTR,#STATION_FRE
ADD A,DPL
MOV DPL,A
MOVX A,@DPTR
MOV R1,#W_DWord
MOV @R1,A
INC R1
INC DPTR
MOVX A,@DPTR
MOV @R1,A
lcall RADIO_VMOD;显示RADIO截面
LCALL WriteSTR
EWE_BAND:
RET
AUTO_SEACH:
JB SEACH_BEGIN,TYU_1SEARCH
LJMP EXIT_SEARCH
TYU_1SEARCH:
SETB MUTE_CTROL
LCALL CLR_WDT
MOV R1,#W_DWord+1
MOV A,@R1
ADD A,#0CH
MOV @R1,A
MOV R6,A
DEC R1
MOV A,@R1
ANL A,#3FH
ADDC A,#00
MOV @R1,A
MOV R7,A
MOV R0,#W_DWord
EXIJ_FH:
LCALL DIV_4FGH
LCALL JUDG_HALF
CJNE R1,#0AAH,ADD_JHK
LJMP EXIJ_JJ1
ADD_JHK:
CJNE R1,#0ADH,SUBB_JHK
LCALL ADDC_1
LJMP EXIJ_FH
SUBB_JHK:
CJNE R1,#0DAH,DFF3G
LCALL SUBB_1
LJMP EXIJ_FH
EXIJ_JJ1:
LCALL GET_SSERCH
SETB ACC.7
MOV @R1,A
LCALL WriteSTR
LCALL DEALY_50
TRX1:
LCALL READSTR
MOV R0,#R_DWord
MOV A,@R0
JB ACC.7,DFFG
LJMP TRX1
TYU_2SEARCH:
LJMP TYU_1SEARCH
DFFG:
JB ACC.6,DFF3G
LCALL JUDG_SENDSD;判断是否是台
CJNE A,#0AAH,TYU_1SEARCH
MOV DPTR,#W_DWord_BAK
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -