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

📄 autosearchhandle.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 2 页
字号:
	POP	AF
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
AutoSearchHandle:
; 218.	/*
; 219.	 ********************************************************************************
; 220.	 * Description : 全自动搜索
; 221.	 *
; 222.	 * Arguments   : Direct,Next或Last搜索.
; 223.	 *
; 224.	 * Returns     : 如果有可识别的热键消息,  返回结果消息
; 225.	 如果没有可识别的热键消息,  返回0
; 226.	 *
; 227.	 * Notes       :
; 228.	 *
; 229.	 ********************************************************************************
; 230.	 */
; 231.	int AutoSearchHandle(BYTE Direct)
; 232.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 233.	    int key;
; 234.	    bool need_draw = TRUE;
; 235.	    //BYTE    Searchflag=1;
; 236.	    BYTE Search_Level = SearchLevel;
; 237.	    bool loop = TRUE;
; 238.	    BYTE Search_Loop = 2; //搜台的次数
; 239.	    BYTE temp;
; 240.	
; 241.	    AutoTabNum = 0; // 全自动搜索,从极值开始.
	XOR	A
	LD	(AutoTabNum),A
; 242.	    fmSendCommand(MC_BACKUP, (int) &radio_param);
	LD	BC,radio_param
	LD	E,68
	CALL	LWRD ?0191
; 243.	    if (FMStatus.mode == 0)
	LD	(IX-8),1
	LD	(IX-7),3
	LD	(IX-6),1
	LD	(IX-5),2
	LD	A,(FMStatus+5)
	OR	A
	LD	A,(IX-2)
	JR	NZ,?0044
?0043:
; 244.	    {
; 245.	        if (Direct == 10) // US频段
	CP	10
	JR	Z,?0186
?0045:
; 246.	        {
; 247.	            FMStatus.freq = 0x00;
; 248.	        }
; 249.	        else
?0046:
; 250.	        {
; 251.	            FMStatus.freq = 210;
	LD	HL,210
	JR	?0178
?0047:
; 252.	        }
; 253.	    }
; 254.	    else
?0044:
; 255.	    { // JP频段
; 256.	        if (Direct == 10)
	CP	10
	JR	NZ,?0050
?0049:
; 257.	        {
; 258.	            FMStatus.freq = 0;
?0186:
	LD	HL,0
	JR	?0178
; 259.	        }
; 260.	        else
?0050:
; 261.	        {
; 262.	            FMStatus.freq = 140;
	LD	HL,140
?0178:
	LD	(FMStatus+1),HL
?0051:
?0048:
; 263.	        }
; 264.	    }
; 265.	
; 266.	    temp = FMStatus.station_count;
	LD	A,(FMStatus+4)
	LD	(IX-4),A
?0053:
; 267.	    while (loop)
	XOR	A
	OR	(IX-6)
	JP	Z,?0052
?0054:
; 268.	    {
; 269.	        if (Direct != 0)
	XOR	A
	OR	(IX-2)
	JP	Z,?0118
?0055:
; 270.	        {
; 271.	            if (Direct == 10) //NEXT搜索处理
	CP	10
	JP	NZ,?0058
?0057:
; 272.	            {
; 273.	            if(((FMStatus.freq+1)>210)&&(FMStatus.mode==0))
	LD	BC,(FMStatus+1)
	INC	BC
	LD	HL,210
	AND	A
	SBC	HL,BC
	JR	NC,?0060
	LD	A,(FMStatus+5)
	OR	A
	JR	NZ,?0060
?0062:
?0061:
?0059:
; 274.	                {
; 275.	                    FMStatus.freq=0;
	LD	L,A
	LD	H,A
	LD	(FMStatus+1),HL
; 276.	                    Search_Level--; // 以不同门限搜索.
	DEC	(IX-7)
; 277.	                    Search_Loop--;
	DEC	(IX-5)
; 278.	                    if (Search_Loop == 0)
	OR	(IX-5)
	JR	NZ,?0072
?0063:
; 279.	                    {
; 280.	                        loop = FALSE;
	JR	?0183
; 281.	                    }
; 282.	                    else
?0064:
; 283.	                    {
; 284.	                        loop = RestartSearch(Search_Level);
?0065:
?0060:
; 285.	                    }
; 286.	                }
; 287.	            else if(((FMStatus.freq+1)>140)&&(FMStatus.mode==1))
	LD	HL,140
	AND	A
	SBC	HL,BC
	JR	NC,?0068
	LD	A,(FMStatus+5)
	DEC	A
	JR	NZ,?0068
?0070:
?0069:
?0067:
; 288.	                {
; 289.	                    FMStatus.freq=0;
	LD	L,A
	LD	H,A
	LD	(FMStatus+1),HL
; 290.	                    Search_Level--;
	DEC	(IX-7)
; 291.	                    Search_Loop--;
	DEC	(IX-5)
; 292.	                    if (Search_Loop == 0)
	OR	(IX-5)
	JR	NZ,?0072
?0071:
; 293.	                    {
; 294.	                        loop = FALSE;
?0183:
	LD	(IX-6),H
; 295.	                    }
; 296.	                    else
	JR	?0074
?0072:
; 297.	                    {
; 298.	                        loop = RestartSearch(Search_Level);
	LD	E,(IX-7)
	LD	A,BYTE3 RestartSearch
	LD	HL,LWRD RestartSearch
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	(IX-6),L
?0073:
; 299.	                    }
; 300.	                }
; 301.	                else
	JR	?0074
?0068:
; 302.	                    FMStatus.freq+=1;
	LD	L,C
	LD	H,B
	LD	(FMStatus+1),HL
?0074:
?0066:
; 303.	                if (loop && Search_Show2(UP))
	XOR	A
	OR	(IX-6)
	JP	Z,?0118
	LD	E,1
	LD	A,BYTE3 Search_Show2
	LD	HL,LWRD Search_Show2
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JR	Z,?0118
?0078:
?0077:
?0075:
; 304.	                {
; 305.	                    ShowStationCount(AutoTabNum + 1);
; 306.	                    key = TryPlayingHandle();
; 307.	                    CleanStationCount();
	CALL	LWRD ?0193
; 308.	                    need_draw = TRUE;
	LD	(IX-8),1
; 309.	                    if (key == RESULT_RADIO) // 处理Play,mode键.
	PUSH	IY
	POP	HL
	LD	A,5
	XOR	L
	OR	H
	JR	Z,?0187
?0079:
; 310.	                    {
; 311.	                        key = RESULT_IGNORE;
; 312.	                        loop = FALSE;
; 313.	                    }
; 314.	                    else
?0080:
; 315.	                    {
; 316.	                        if (key != RESULT_IGNORE && key != 0) // 处理热键.
	LD	A,48
	XOR	L
	OR	H
	JR	Z,?0118
	LD	A,L
	OR	H
	JR	Z,?0118
?0085:
?0084:
?0082:
; 317.	                        {
; 318.	                            loop = FALSE;
	JR	?0180
?0083:
?0081:
?0076:
?0058:
; 319.	                        }
; 320.	                    }
; 321.	                }
; 322.	            }
; 323.	            else if (Direct == 20) //LAST搜索处理
	CP	20
	JR	NZ,?0088
?0087:
; 324.	            {
; 325.	            if(((FMStatus.freq-1)<0)&&(FMStatus.mode==0))
?0092:
?0091:
?0089:
; 326.	                {
; 327.	                    FMStatus.freq=0;
; 328.	                    Search_Loop--;
; 329.	                    if (Search_Loop == 0)
?0093:
; 330.	                    {
; 331.	                        loop = FALSE;
; 332.	                    }
; 333.	                    else
?0094:
; 334.	                    {
; 335.	                        loop = RestartSearch(Search_Level);
?0095:
?0090:
; 336.	                    }
; 337.	                }
; 338.	                else if(((FMStatus.freq-1)<0)&&(FMStatus.mode==1))
?0100:
?0099:
?0097:
; 339.	                {
; 340.	                        FMStatus.freq=0;
; 341.	                    Search_Level--;
; 342.	                    Search_Loop--;
; 343.	                    if (Search_Loop == 0)
?0101:
; 344.	                    {
; 345.	                        loop = FALSE;
; 346.	                    }
; 347.	                    else
?0102:
; 348.	                    {
; 349.	                        loop = RestartSearch(Search_Level);
?0103:
; 350.	                    }
; 351.	                }
; 352.	                else
?0098:
; 353.	                 {
; 354.	                        FMStatus.freq-=1;
	LD	HL,FMStatus+1
	LD	A,(HL)
	ADD	A,255
	LD	(HL),A
	INC	HL
	LD	A,(HL)
	ADC	A,255
	LD	(HL),A
?0104:
?0096:
; 355.	                 }
; 356.	                if (loop && Search_Show2(DOWN))
	XOR	A
	OR	(IX-6)
	JR	Z,?0118
	LD	E,0
	LD	A,BYTE3 Search_Show2
	LD	HL,LWRD Search_Show2
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JR	Z,?0118
?0108:
?0107:
?0105:
; 357.	                {
; 358.	                    ShowStationCount(AutoTabNum + 1);
; 359.	                    key = TryPlayingHandle();
; 360.	                    CleanStationCount();
	CALL	LWRD ?0193
; 361.	                    need_draw = TRUE;
	LD	(IX-8),1
; 362.	                    if (key == RESULT_RADIO) // 处理Play,mode键.
	PUSH	IY
	POP	HL
	LD	A,5
	XOR	L
	OR	H
	JR	NZ,?0110
?0109:
; 363.	                    {
; 364.	                        key = RESULT_IGNORE;
; 365.	                        loop = FALSE;
?0187:
	LD	IY,48
	JR	?0180
; 366.	                    }
; 367.	                    else
?0110:
; 368.	                    {
; 369.	                        if (key != RESULT_IGNORE && key != 0) // 处理热键.
	LD	A,48
	XOR	L
	OR	H
	JR	Z,?0118
	LD	A,L
	OR	H
	JR	Z,?0118
?0115:
?0114:
?0112:
; 370.	                        {
; 371.	                            loop = FALSE;
?0180:
	LD	(IX-6),0
?0113:
?0111:
?0106:
	JR	?0118
?0088:
; 372.	                        }
; 373.	                    }
; 374.	                }
; 375.	            }
; 376.	            else if (Direct == 50)
	CP	50
	JR	NZ,?0118
?0117:
; 377.	            {
; 378.	                Direct = 0;
; 379.	                loop = 0;
; 380.	                key = 0;
	LD	(IX-2),0
	LD	(IX-6),0
	LD	IY,0
?0118:
?0116:
?0086:
?0056:
; 381.	            }
; 382.	        }
; 383.	
; 384.	        if (loop && need_draw) //显示
	XOR	A
	OR	(IX-6)
	JR	Z,?0120
	XOR	A
	OR	(IX-8)
	JR	Z,?0120
?0122:
?0121:
?0119:
; 385.	        {
; 386.	            ShowFreqInFM2();
	LD	A,BYTE3 ShowFreqInFM2
	LD	HL,LWRD ShowFreqInFM2
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 387.	            need_draw = FALSE;
	LD	(IX-8),0
?0120:
; 388.	        }
; 389.	
; 390.	        if (AutoTabNum >= 20) // 已搜到20个电台,正常退出.
	LD	A,(AutoTabNum)
	CP	20
	JR	C,?0124
?0123:
; 391.	            loop = FALSE;
	LD	(IX-6),0
?0124:
; 392.	        if (loop)
	XOR	A
	OR	(IX-6)
	JP	Z,?0053
?0125:
; 393.	        {
; 394.	            key = ap_get_message();
	CALL	LWRD ap_get_message
	LD	C,A
	LD	B,0
	PUSH	BC
	POP	IY
; 395.	            switch (key)
	LD	A,29
	XOR	C
	JP	Z,?0053
; 396.	            {
; 397.	                bool Search_Flag = FALSE;
?0128:
; 398.	                case AP_MSG_STANDBY:
; 399.	                //do nothing
; 400.	                break;
?0129:
	LD	A,33
	XOR	C
	JR	Z,?0136
	LD	A,39
	XOR	C
	JR	NZ,?0130
?0136:
; 401.	                case AP_KEY_PLAY | AP_KEY_UP:
; 402.	                case AP_KEY_MODE | AP_KEY_UP: // 保存电台, 返回播放界面.
; 403.	                loop = FALSE;
; 404.	                key = RESULT_IGNORE;
	LD	(IX-6),B
	LD	IY,48
; 405.	                break;
	JP	LWRD ?0053
?0130:
; 406.	                default: //热键处理
; 407.	                key = ap_handle_hotkey(key);
	PUSH	IY
	POP	HL
	LD	E,L
	CALL	LWRD ap_handle_hotkey
	LD	C,A
	PUSH	BC
	POP	IY
; 408.	                if (key == RESULT_REDRAW)
	LD	A,46
	XOR	C
	JR	NZ,?0132
?0131:
; 409.	                    need_draw = TRUE;
	LD	(IX-8),1
	JP	LWRD ?0053
?0132:
; 410.	                else if (key != 0)
	PUSH	IY
	POP	HL
	LD	A,L
	OR	H
	JP	Z,?0053
?0134:
; 411.	                {
; 412.	                    loop = FALSE;
	LD	(IX-6),B
?0135:
?0133:
?0127:
?0126:
	JP	LWRD ?0053
?0052:
; 413.	                }
; 414.	            } // end switch(key)
; 415.	        } // end if(loop)
; 416.	    } // end while(loop)
; 417.	    if (AutoTabNum > 0)
	LD	A,(AutoTabNum)
	OR	A
	JR	Z,?0138
?0137:
; 418.	    {
; 419.	        memcpy(radio_param.param1, FMAutoTab, AutoTabNum * 2);
	LD	L,A
	LD	H,0
	ADD	HL,HL
	LD	C,L
	LD	A,C
	LD	B,H
	LD	DE,(radio_param)
	LD	HL,FMAutoTab
	OR	B
	JR	Z,?0176
	LDIR
?0176:
; 420.	        //if(FMStatus.station_count < AutoTabNum)
; 421.	        if (temp < AutoTabNum) // 覆盖所有电台
	LD	A,(AutoTabNum)
	LD	B,A
	LD	A,(IX-4)
	CP	B
	JR	NC,?0140
?0139:
; 422.	        {
; 423.	            FMStatus.station_count = AutoTabNum;
	LD	A,B
	JR	?0181
; 424.	        }
; 425.	        else
?0140:
; 426.	        {
; 427.	            if (key == 0)
	PUSH	IY
	POP	HL
	LD	A,L
	OR	H
	JR	NZ,?0143
?0142:
; 428.	            {
; 429.	                FMStatus.station_count = AutoTabNum;
	LD	A,B
	LD	(FMStatus+4),A
?0143:
; 430.	            }
; 431.	            if (key == RESULT_IGNORE) // 覆盖部分电台
	LD	A,48
	XOR	L
	OR	H
	JR	NZ,?0147
?0144:
; 432.	            {
; 433.	                if (temp != 0)
	OR	(IX-4)
	JR	Z,?0147
?0146:
; 434.	                    FMStatus.station_count = temp;
?0181:
	LD	(FMStatus+4),A
?0147:
?0145:
?0141:
; 435.	            }
; 436.	        }
; 437.	        FMStatus.freq = FMAutoTab[0];
	LD	HL,(FMAutoTab)
	LD	(FMStatus+1),HL
; 438.	        FMStatus.station = 0;
	XOR	A
	LD	(FMStatus+3),A
; 439.	        fmSendCommand(MC_RESTORE, (int) &radio_param);
	LD	BC,radio_param
	LD	E,69
	CALL	LWRD ?0191
?0138:
; 440.	    }
; 441.	
; 442.	    if (key == RESULT_IGNORE)
	PUSH	IY
	POP	HL
	LD	A,48
	XOR	L
	OR	H
	JR	NZ,?0149
?0148:
; 443.	    {
; 444.	        key = 0;
	LD	IY,0
?0149:
; 445.	    }
; 446.	
; 447.	    //fmSendCommand(MC_MUTE,releaseMUTE);
; 448.	    //fmSendCommand(MC_SETVOLUME,FMStatus.volume);
; 449.	
; 450.	    if (FMStatus.station_count > 0x00) // 没有搜到电台退出的情况.
	LD	A,(FMStatus+4)
	OR	A
	JR	Z,?0151
?0150:
; 451.	    {
; 452.	        fmSendCommand(MC_STEP, UP);
	LD	BC,1
	LD	E,7
	CALL	LWRD ?0191
; 453.	        for (temp = 0; temp < 0xff; temp++) // 延迟
	LD	(IX-4),0
?0153:
	LD	A,(IX-4)
	CP	255
	JR	NC,?0152
?0154:
	INC	(IX-4)
	JR	?0153
?0152:
; 454.	        {
; 455.	        }
; 456.	        fmSendCommand(MC_BACKUP, (int) &radio_param);
	LD	BC,radio_param
	LD	E,68
	CALL	LWRD ?0191
?0151:
; 457.	    }
; 458.	    return key;
	PUSH	IY
	POP	HL
; 459.	}
	JP	LWRD ?0188
?0193:
	LD	DE,(AutoTabNum)
	LD	D,0
	INC	DE
	LD	A,BYTE3 ShowStationCount
	LD	HL,LWRD ShowStationCount
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	A,BYTE3 TryPlayingHandle
	LD	HL,LWRD TryPlayingHandle
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	PUSH	HL
	POP	IY
	LD	A,BYTE3 CleanStationCount
	LD	HL,LWRD CleanStationCount
	JP	LWRD ?BANK_CALL_DIRECT_L08
; 460.	
	RSEG	CSTR
?0004:
	DEFB	'['
	DEFB	0
?0005:
	DEFB	'CH'
	DEFB	0
?0006:
	DEFB	']'
	DEFB	0
?0011:
	DEFB	'<'
	DEFB	0
?0012:
	DEFB	'FM'
	DEFB	0
?0019:
	DEFB	'.'
	DEFB	0
?0020:
	DEFB	'>'
	DEFB	0
	RSEG	CONST
?0007:
	DEFB	'      '
	DEFB	0
?0008:
	DEFB	'FM'
	DEFB	0
	DEFB	0
	RSEG	UDATA0
FMAutoTab:
	DEFS	40
AutoTabNum:
	DEFS	1
	END

⌨️ 快捷键说明

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