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

📄 autosearchhandle.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	autosearchhandle(17)
	RSEG	CODE_2(0)
	RSEG	CSTR(0)
	RSEG	CONST(0)
	RSEG	UDATA0(0)
	PUBLIC	AutoSearchHandle
	PUBLIC	AutoTabNum
	PUBLIC	CleanStationCount
	EXTERN	ClearScreen
	PUBLIC	FMAutoTab
	EXTERN	FMStatus
	EXTERN	Freqtab
	EXTERN	GetBattery
	EXTERN	PutS
	EXTERN	ResShowPic
	PUBLIC	RestartSearch
	PUBLIC	Search_Show2
	EXTERN	SetTextPos
	PUBLIC	ShowFreqInFM2
	PUBLIC	ShowStationCount
	EXTERN	TryPlayingHandle
	EXTERN	UpdateScreen
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	fmSendCommand
	EXTERN	g_comval
	EXTERN	itoa_1
	EXTERN	itoa_2
	EXTERN	itoa_3
	EXTERN	radio_param
	EXTERN	ui_show_batt
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?US_DIV_L02
	EXTERN	?SS_DIV_L02
	EXTERN	?SS_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?SL_CMP_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?STRCPY_L11
	EXTERN	?STRCAT_L11
	RSEG	CODE_2
ShowStationCount:
; 1.	/*
; 2.	 *******************************************************************************
; 3.	 *                ACTOS AP
; 4.	 *        main ap of sdk 3.0
; 5.	 *
; 6.	 *        (c) Copyright, Actions Co,Ld.
; 7.	 *             All Right Reserved
; 8.	 *
; 9.	 *******************************************************************************
; 10.	 */
; 11.	
; 12.	#pragma codeseg(CODE_2)
; 13.	
; 14.	#include "ap_radio.h"
; 15.	#include "actos.h"
; 16.	
; 17.	extern slider_t slider;
; 18.	extern comval_t F_comval;
; 19.	extern WORD FMStationTab[40]; // 前20个是US, 后20个是JP.
; 20.	extern fm_play_status_t FMStatus;
; 21.	extern FMRADIO_param_t radio_param;
; 22.	extern char Freqtab[10];
; 23.	
; 24.	WORD FMAutoTab[20]; // 全自动收台,预存台.
; 25.	BYTE AutoTabNum; // 预存台数.
; 26.	
; 27.	extern int TryPlayingHandle(void);
; 28.	/*
; 29.	 ********************************************************************************
; 30.	 * Description : 显示电台号.
; 31.	 *
; 32.	 * Arguments   :
; 33.	 *
; 34.	 * Returns     :
; 35.	 *
; 36.	 * Notes       :
; 37.	 *
; 38.	 ********************************************************************************
; 39.	 */
; 40.	void ShowStationCount(int count)
; 41.	{
	PUSH	BC
	PUSH	IX
	LD	HL,65524
	ADD	HL,SP
	LD	SP,HL
	PUSH	DE
	POP	IX
; 42.	    char buf[4];
; 43.	    char FMTab[7];
; 44.	
; 45.	    SetTextPos(46, 0); //SetTextPos(128/2-6*3,0);
	LD	C,0
	LD	E,46
	CALL	LWRD SetTextPos
; 46.	    if (count > 0) //显示电台号
	PUSH	IX
	POP	BC
	LD	HL,0
	OR	128
	SBC	HL,BC
	JP	PO,?0157
	XOR	H
?0157:
	JP	P,?0003
?0002:
; 47.	    {
; 48.	        strcpy(FMTab, "[");
	LD	DE,?0004
	LD	HL,0
	ADD	HL,SP
	CALL	LWRD ?STRCPY_L11
; 49.	        strcat(FMTab, "CH");
	LD	DE,?0005
	LD	HL,0
	ADD	HL,SP
	CALL	LWRD ?STRCAT_L11
; 50.	        *itoa_2(count, buf);
	LD	HL,8
	ADD	HL,SP
	LD	C,L
	LD	B,H
	PUSH	IX
	POP	HL
	LD	E,L
	LD	A,BYTE3 itoa_2
	LD	HL,LWRD itoa_2
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 51.	        strcat(FMTab, buf);
	LD	HL,8
	ADD	HL,SP
	EX	DE,HL
	LD	HL,0
	ADD	HL,SP
	CALL	LWRD ?STRCAT_L11
; 52.	        strcat(FMTab, "]");
	LD	DE,?0006
	LD	HL,0
	ADD	HL,SP
	CALL	LWRD ?STRCAT_L11
; 53.	        PutS(FMTab, -1);
	LD	C,255
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD PutS
?0003:
; 54.	    }
; 55.	    UpdateScreen(NULL);
	LD	DE,0
	CALL	LWRD UpdateScreen
; 56.	}
	LD	HL,12
	ADD	HL,SP
	LD	SP,HL
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
CleanStationCount:
; 57.	/*
; 58.	 ********************************************************************************
; 59.	 * Description : 清除电台号
; 60.	 *
; 61.	 * Arguments   :
; 62.	 *
; 63.	 * Returns     :
; 64.	 *
; 65.	 * Notes       :
; 66.	 *
; 67.	 ********************************************************************************
; 68.	 */
; 69.	void CleanStationCount(void)
; 70.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 71.	    char FMTab[] = "      ";
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	LD	HL,?0007
	LD	BC,7
	LDIR
; 72.	    SetTextPos(46, 0); //SetTextPos(128/2-6*3,0);
	LD	E,46
	CALL	LWRD SetTextPos
; 73.	    PutS(FMTab, -1);
	LD	C,255
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD PutS
; 74.	    UpdateScreen(NULL);
	LD	DE,0
	CALL	LWRD UpdateScreen
; 75.	}
	POP	HL
	POP	HL
	POP	HL
	POP	HL
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
ShowFreqInFM2:
; 76.	/*
; 77.	 ********************************************************************************
; 78.	 * Description : 显示全自动搜台界面
; 79.	 *
; 80.	 * Arguments   :
; 81.	 *
; 82.	 * Returns     :
; 83.	 *
; 84.	 * Notes       :
; 85.	 *
; 86.	 ********************************************************************************
; 87.	 */
; 88.	void ShowFreqInFM2(void)
; 89.	{
	PUSH	BC
	PUSH	DE
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LD	HL,65526
	ADD	HL,SP
	LD	SP,HL
; 90.	    char buf[4] =
; 91.	    { "FM" };
	EX	DE,HL
	LD	HL,?0008
	LD	BC,4
	LDIR
; 92.	    long i;
; 93.	    int k, h;
; 94.	    char FMTab[5];
; 95.	
; 96.	    ClearScreen(NULL);
	LD	E,C
	LD	D,B
	CALL	LWRD ClearScreen
; 97.	    ResShowPic(RA_FM, 16, 0); //fm 标志显示
	PUSH	BC
	LD	C,16
	LD	DE,433
	CALL	LWRD ?0189
	POP	AF
; 98.	    if (FMStatus.stereo_status == 0)
	LD	A,(FMStatus+7)
	OR	A
	JR	NZ,?0010
?0009:
; 99.	    {
; 100.	        ResShowPic(RA_STERE, 98, 0); //显示立体声  ResShowPic(RA_STERE,128-30,0);
	LD	C,A
	PUSH	BC
	LD	C,98
	LD	DE,440
	CALL	LWRD ?0189
	POP	AF
?0010:
; 101.	    }
; 102.	    //k=GetBattery();
; 103.	
; 104.	    //ui_show_batt(GetBattery());            //电池电量显示
; 105.	    ui_show_batt(GetBattery(), F_comval.BatteryType); //电池电量显示
	LD	BC,(g_comval+15)
	CALL	LWRD GetBattery
	LD	E,A
	LD	D,0
	LD	A,BYTE3 ui_show_batt
	LD	HL,LWRD ui_show_batt
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 106.	    strcpy(Freqtab, "<");
	LD	DE,?0011
	LD	HL,Freqtab
	CALL	LWRD ?STRCPY_L11
; 107.	    strcat(Freqtab, "FM");
	LD	DE,?0012
	LD	HL,Freqtab
	CALL	LWRD ?STRCAT_L11
; 108.	    //频率换算及转换成ASCII码
; 109.	    k = FMStatus.freq;
	LD	IY,(FMStatus+1)
; 110.	    if(FMStatus.mode==0)
	LD	A,(FMStatus+5)
	OR	A
	LD	BC,10
	PUSH	IY
	POP	DE
	CALL	LWRD ?SS_DIV_L02
	JR	NZ,?0014
?0013:
; 111.	        i=k/10 + 87; 
	LD	HL,87
	JR	?0158
	LD	A,H
	JR	?0160
	SBC	A,A
	JR	?0162
	LD	B,C
	JR	?0163
	LD	(IX-5),H
	JR	?0164
	LD	(IX-3),B
; 112.	    else
	JR	?0015
?0014:
; 113.	        i=k/10 + 76;
	LD	HL,76
?0158:
	ADD	HL,DE
	LD	A,H
?0160:
	RLCA
	SBC	A,A
?0162:
	LD	C,A
	LD	B,C
?0163:
	LD	(IX-6),L
	LD	(IX-5),H
?0164:
	LD	(IX-4),C
	LD	(IX-3),B
?0015:
; 114.	
; 115.	    h=k%10;
	LD	BC,10
	PUSH	IY
	POP	DE
	CALL	LWRD ?SS_MOD_L02
	LD	(IX-2),E
; 116.	    
; 117.	 
; 118.	    if (i < 100)
	LD	L,B
	LD	H,B
	PUSH	HL
	LD	L,100
	PUSH	HL
	LD	C,(IX-4)
	LD	B,(IX-3)
	LD	L,(IX-6)
	LD	H,(IX-5)
	CALL	LWRD ?SL_CMP_L03
	LD	HL,0
	JR	NC,?0017
?0016:
; 119.	        *itoa_2(i, buf);
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	E,(IX-6)
	LD	A,BYTE3 itoa_2
	LD	HL,LWRD itoa_2
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 120.	    else
	JR	?0018
?0017:
; 121.	        *itoa_3(i, buf);
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	E,(IX-6)
	LD	D,(IX-5)
	LD	A,BYTE3 itoa_3
	LD	HL,LWRD itoa_3
	CALL	LWRD ?BANK_CALL_DIRECT_L08
?0018:
; 122.	    strcat(Freqtab, buf);
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	LD	HL,Freqtab
	CALL	LWRD ?STRCAT_L11
; 123.	    strcat(Freqtab, ".");
	LD	DE,?0019
	LD	HL,Freqtab
	CALL	LWRD ?STRCAT_L11
; 124.	    *itoa_1(h, buf);
	LD	HL,0
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	E,(IX-2)
	LD	A,BYTE3 itoa_1
	LD	HL,LWRD itoa_1
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 125.	    //buf[1] = 0;
; 126.	    //buf[2] = 0;
; 127.	    strcat(Freqtab, buf);
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	LD	HL,Freqtab
	CALL	LWRD ?STRCAT_L11
; 128.	    strcat(Freqtab, ">");
	LD	DE,?0020
	LD	HL,Freqtab
	CALL	LWRD ?STRCAT_L11
; 129.	    SetTextPos(40, 8); //SetTextPos((128-6*8)/2,8);
	LD	C,8
	LD	E,40
	CALL	LWRD SetTextPos
; 130.	    PutS(Freqtab, -1); //显示电台频率
	LD	C,255
	LD	DE,Freqtab
	CALL	LWRD PutS
; 131.	    if (FMStatus.mode == 0)
	LD	A,(FMStatus+5)
	OR	A
	LD	BC,(FMStatus+1)
	LD	DE,100
	CALL	LWRD ?S_MUL_L02
	LD	BC,200
	CALL	LWRD ?US_DIV_L02
	LD	C,16
	PUSH	BC
	LD	A,E
	JR	NZ,?0022
?0021:
; 132.	    {
; 133.	        k = (FMStatus.freq )*100/200;
; 134.	        
; 135.	        ResShowPic(DWNARROW, 6 + k, 16); //显示箭头ResShowPic(DWNARROW,11-5+k,16);
	ADD	A,6
	CALL	LWRD ?0190
	POP	AF
; 136.	        ResShowPic(FQBAR, 0, 24); //显示US频率条
	LD	C,24
	PUSH	BC
	LD	C,0
	LD	DE,167
	JR	?0159
	LD	HL,LWRD ResShowPic
	JR	?0161
	POP	AF
; 137.	    }
; 138.	    else
	JR	?0023
?0022:
; 139.	    {
; 140.	        k = (FMStatus.freq )*100/200;
; 141.	        ResShowPic(DWNARROW, 24 + k, 16); //显示箭头 ResShowPic(DWNARROW,30-6+k,16);
	ADD	A,24
	CALL	LWRD ?0190
	POP	AF
; 142.	        ResShowPic(FQBAR2, 0, 24); //显示JP频率条
	LD	C,24
	PUSH	BC
	LD	C,0
	LD	DE,168
?0159:
	LD	A,BYTE3 ResShowPic
	LD	HL,LWRD ResShowPic
?0161:
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
?0023:
; 143.	    }
; 144.	    UpdateScreen(NULL); //刷新
	LD	DE,0
	CALL	LWRD UpdateScreen
; 145.	}
	LD	SP,IX
	POP	IX
	POP	IY
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0190:
	LD	C,A
	LD	DE,94
?0189:
	LD	A,BYTE3 ResShowPic
	LD	HL,LWRD ResShowPic
	JP	LWRD ?BANK_CALL_DIRECT_L08
Search_Show2:
; 146.	/*
; 147.	 ********************************************************************************
; 148.	 * Description : 搜索下一个在电台表中没有的新电台.
; 149.	 *
; 150.	 * Arguments   : Direct,Next或Last搜索.
; 151.	 *
; 152.	 * Returns     : TRUE:搜到下一个新电台,FALSE:没有搜到.
; 153.	 *
; 154.	 * Notes       :
; 155.	 *
; 156.	 ********************************************************************************
; 157.	 */
; 158.	bool Search_Show2(FM_direct_t Direct)
; 159.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	PUSH	AF
	PUSH	AF
; 160.	    bool Search_Flag;
; 161.	    int i;
; 162.	    WORD temp;
; 163.	
; 164.	    FMStatus.stereo_status = 1;
	LD	A,1
	LD	(FMStatus+7),A
; 165.	    FMStatus.station = 0;
	XOR	A
	LD	(FMStatus+3),A
; 166.	    fmSendCommand(MC_MUTE, SetMUTE);
	LD	BC,1
	LD	E,12
	CALL	LWRD ?0191
; 167.	    fmSendCommand(MC_SETVOLUME, FMStatus.volume);
	CALL	LWRD ?0192
; 168.	    fmSendCommand(MC_RESTORE, (int) &radio_param);
	LD	BC,radio_param
	LD	E,69
	CALL	LWRD ?0191
; 169.	    Search_Flag = fmSendCommand(MC_SEARCH, Direct);
	LD	C,(IX-2)
	LD	B,0
	LD	E,10
	CALL	LWRD ?0191
	LD	(IX-6),L
; 170.	    if (Search_Flag) //搜台成功后,MUTE释放
	INC	L
	DEC	L
	JR	Z,?0033
?0024:
; 171.	    {
; 172.	        fmSendCommand(MC_GETFREQ, (int) &temp);
	LD	HL,2
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	E,17
	CALL	LWRD ?0191
; 173.	        for (i = 0; i < AutoTabNum; i++) // 检查是否在电台表中
	LD	IY,0
?0027:
	LD	BC,(AutoTabNum)
	LD	B,0
	PUSH	IY
	POP	HL
	OR	128
	SBC	HL,BC
	JP	PO,?0174
	XOR	H
?0174:
	JP	P,?0026
?0028:
; 174.	        {
; 175.	            if (FMAutoTab[i] == temp)
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,FMAutoTab
	ADD	HL,BC
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	LD	C,(IX-4)
	LD	B,(IX-3)
	AND	A
	SBC	HL,BC
	JR	NZ,?0031
?0030:
; 176.	            {
; 177.	                Search_Flag = FALSE;
	LD	(IX-6),0
; 178.	                break;
	JR	?0026
?0031:
	INC	IY
	JR	?0027
?0026:
; 179.	            }
; 180.	        }
; 181.	        if (Search_Flag)
	XOR	A
	OR	(IX-6)
	JR	Z,?0033
?0032:
; 182.	        {
; 183.	            if (FMStatus.volume)
	LD	A,(FMStatus+6)
	OR	A
	JR	Z,?0035
?0034:
; 184.	                fmSendCommand(MC_MUTE, releaseMUTE);
	LD	BC,0
	LD	E,12
	CALL	LWRD ?0191
?0035:
; 185.	            fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
	LD	BC,FMStatus
	LD	E,131
	CALL	LWRD ?0191
?0033:
?0025:
; 186.	        }
; 187.	    }
; 188.	    ShowFreqInFM2();
	LD	A,BYTE3 ShowFreqInFM2
	LD	HL,LWRD ShowFreqInFM2
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 189.	    for (i = 0; i < 0x3999; i++)
	LD	IY,0
?0037:
	LD	BC,47513
	PUSH	IY
	POP	HL
	LD	A,128
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0036
?0038:
	INC	IY
	JR	?0037
?0036:
; 190.	    {
; 191.	    }
; 192.	    return Search_Flag;
	LD	L,(IX-6)
; 193.	}
?0188:
	LD	SP,IX
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0192:
	LD	BC,(FMStatus+6)
	LD	B,0
	LD	E,64
?0191:
	LD	A,BYTE3 fmSendCommand
	LD	HL,LWRD fmSendCommand
	JP	LWRD ?BANK_CALL_DIRECT_L08
RestartSearch:
; 194.	/*
; 195.	 ********************************************************************************
; 196.	 * Description : 设置门限值,重新开始搜索.
; 197.	 *
; 198.	 * Arguments   : 门限值
; 199.	 *
; 200.	 * Returns     : TRUE:继续搜索,FALSE:中断搜索,正常结束.
; 201.	 *
; 202.	 * Notes       :
; 203.	 *
; 204.	 ********************************************************************************
; 205.	 */
; 206.	bool RestartSearch(byte level)
; 207.	{
	PUSH	BC
	PUSH	DE
; 208.	    if (level <= 2)
	LD	A,2
	CP	E
	JR	C,?0041
?0040:
; 209.	        return FALSE;
	LD	L,0
	JR	?0042
?0041:
; 210.	    //fmSendCommand(MC_SETVOLUME,0);
; 211.	    //fmSendCommand(MC_CLOSE,0);
; 212.	    //fmSendCommand(MC_OPEN,level);
; 213.	    fmSendCommand(MC_MUTE, SetMUTE);
	LD	BC,1
	LD	E,12
	CALL	LWRD ?0191
; 214.	    fmSendCommand(MC_SETVOLUME, FMStatus.volume);
	CALL	LWRD ?0192
; 215.	    fmSendCommand(MC_RESTORE, (int) &radio_param);
	LD	BC,radio_param
	LD	E,69
	CALL	LWRD ?0191
; 216.	    return TRUE;
	LD	L,1
; 217.	}
?0042:

⌨️ 快捷键说明

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