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

📄 main.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 3 页
字号:
	NAME	main(17)
	RSEG	CODE(0)
	RSEG	CSTR(0)
	RSEG	CONST(0)
	RSEG	UDATA0(0)
	RSEG	IDATA0(0)
	RSEG	CDATA0(0)
	EXTERN	AutoSearchHandle
	EXTERN	ClearScreen
	EXTERN	DRV_ActiveUD
	PUBLIC	FMStationTab
	PUBLIC	FMStatus
	PUBLIC	FMStatusJP
	PUBLIC	FMStatusUS
	PUBLIC	FMdeal
	PUBLIC	Freqtab
	EXTERN	GetBattery
	EXTERN	GetDefaultComval
	EXTERN	ResClose
	EXTERN	ResOpen
	EXTERN	ResShowMultiString
	EXTERN	ResShowPic
	EXTERN	SearchHandle
	EXTERN	ShowFreqInFM
	PUBLIC	TimeCount
	EXTERN	UpdateScreen
	EXTERN	VMRead
	EXTERN	VMWrite
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	ap_message_init
	EXTERN	ap_sleep
	PUBLIC	clrregion
	EXTERN	fmSendCommand
	PUBLIC	fmdataflag
	PUBLIC	g_comval
	EXTERN	m_FMPlaystatus
	PUBLIC	main
	PUBLIC	menu
	PUBLIC	pic_active
	PUBLIC	pic_inactive
	PUBLIC	radio_param
	EXTERN	res_fp
	PUBLIC	slider
	PUBLIC	string
	EXTERN	ui_auto_update
	EXTERN	ui_function_menu
	EXTERN	ui_show_batt
	EXTERN	ui_slider
	PUBLIC	volmuteflag
	PUBLIC	volume_callback
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SS_DIV_L02
	EXTERN	?S_MUL_L02
	EXTERN	?S_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?STRCPY_L11
	EXTERN	?MEMCMP_L11
	RSEG	CODE
volume_callback:
; 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.	#include "ap_radio.h"
; 12.	//#include "mem.h"
; 13.	#include "actos.h"
; 14.	
; 15.	#define OpenFMPower1() output8(0xc0,(input8(0xc0)|0x01))    //enable output a0
; 16.	#define OpenFMPower2() output8(0xc1,(input8(0xc1)&0xfe))    //disable a0 input 
; 17.	#define OpenFMPower3() output8(0xc2,input8(0xc2)&0xfe)
; 18.	#define CloseFMPower1() output8(0xc2,((input8(0xc2)|0x01)))    //disable output a0
; 19.	#define CloseFMPower2() output8(0xc2,((input8(0xc2)|0x01)))
; 20.	
; 21.	extern fm_play_status_t m_FMPlaystatus;
; 22.	
; 23.	int TimeCount;
; 24.	FMRADIO_param_t radio_param;
; 25.	slider_t slider;
; 26.	region_t clrregion;
; 27.	function_menu_t menu; //菜单结构体
; 28.	comval_t F_comval;
; 29.	//电台频率对照表(注:频率范围87M-108M(US)或76M-90M(Japan),以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
; 30.	WORD FMStationTab[40];
; 31.	fm_play_status_t FMStatus; //当前电台信息,8 bytes
; 32.	fm_play_status_t FMStatusUS; //US电台信息暂存,8 bytes
; 33.	fm_play_status_t FMStatusJP; //Japan电台信息暂存,8bytes
; 34.	char fmdataflag[3]; //第一次进FM标志,3 bytes
; 35.	char Freqtab[10];
; 36.	
; 37.	//WORD SearchFreq;
; 38.	//WORD SetFreq;
; 39.	
; 40.	const int pic_inactive[] =
; 41.	{ RA_SAVE, MICIN, DELL, DELALL, AUTOSEL, RA_US, RA_JP, EXIT }; //MICIN: for FM record by ccm
; 42.	const int pic_active[] =
; 43.	{ RA_SAVEA, MICINA, DELLA, DELALLA, AUTOSELA, RA_USA, RA_JPA, EXITA };//MICINA:for FM record by ccm
; 44.	const int string[] =
; 45.	{ FMENU1, FMENU15, FMENU2, FMENU3, FMENU16, FMENU4, FMENU5, FMENU6 }; //FMENU15:电台录音 by ccm
; 46.	//函数定义
; 47.	int SearchHandle(BYTE Direct); //自动搜索处理,Direct=10,NEXT,=20,LAST
; 48.	int AutoSearchHandle(BYTE Direct);
; 49.	int FMdeal(int test); //FM应用的处理
; 50.	void ShowFreqInFM(void); //FM主界面显示
; 51.	bool Search_Show(FM_direct_t Direct); //自动搜台时的显示
; 52.	bool volmuteflag = 1; //静音标志
; 53.	void volume_callback(int Vol) //音量设置的CALLBACK函数
; 54.	{
	PUSH	BC
	PUSH	IX
	PUSH	DE
	POP	IX
; 55.	    //实时改变音量的值
; 56.	    FMStatus.vol_display = Vol;
	LD	A,E
	LD	(FMStatus+8),A
; 57.	    FMStatus.volume = Vol * 31 / g_comval.VolumeMax;
	LD	BC,(g_comval+31)
	LD	B,0
	PUSH	BC
	LD	DE,31
	PUSH	IX
	POP	BC
	CALL	LWRD ?S_MUL_L02
	POP	BC
	CALL	LWRD ?0166
; 58.	    fmSendCommand(MC_SETVOLUME, FMStatus.volume);
	LD	C,A
	LD	B,0
	LD	E,64
	CALL	LWRD ?0167
; 59.	
; 60.	    if (FMStatus.volume == 0)
	LD	A,(FMStatus+6)
	OR	A
	JR	NZ,?0003
?0002:
; 61.	        fmSendCommand(MC_MUTE, SetMUTE);
	LD	BC,1
	JR	?0131
; 62.	    else
?0003:
; 63.	        fmSendCommand(MC_MUTE, releaseMUTE);
	LD	BC,0
?0131:
	CALL	LWRD ?0168
?0004:
; 64.	    
; 65.	        
; 66.	     
; 67.	}
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0166:
	CALL	LWRD ?SS_DIV_L02
	LD	A,E
	LD	(FMStatus+6),A
	RET
?0169:
	LD	BC,1
?0168:
	LD	E,12
?0167:
	LD	A,BYTE3 fmSendCommand
?0170:
	LD	HL,LWRD fmSendCommand
	JP	LWRD ?BANK_CALL_DIRECT_L08
main:
; 68.	#if 0
; 69.	//对第一进FM进行降噪
; 70.	void volume_init()
; 71.	{
; 72.	    uchar i,j;
; 73.	    for(i=0;i<FMStatus.volume;i++)
; 74.	    {
; 75.	        fmSendCommand(MC_SETVOLUME, i);
; 76.	        output8(WATCHDOG, input8(WATCHDOG) | 0x8);
; 77.	        for(j=0;j<100;j++);
; 78.	    }
; 79.	}
; 80.	#endif
; 81.	
; 82.	#define OpenFM()
; 83.	int main(int param)
; 84.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 85.	    int result;
; 86.	
; 87.	    //Open VCCOUT for FM Module. by ccm
; 88.	    int i, j;
; 89.	    char buffer_f3;
; 90.	
; 91.	    OpenFMPower1();
	IN	A,(192)
	SET	0,A
	OUT	(192),A
; 92.	    OpenFMPower2();
	IN	A,(193)
	RES	0,A
	OUT	(193),A
; 93.	    OpenFMPower3();
	IN	A,(194)
	RES	0,A
	OUT	(194),A
; 94.	    if (param == 0xfe)
	LD	A,254
	XOR	E
	OR	D
	JR	NZ,?0006
?0005:
; 95.	    {
; 96.	     
; 97.	        fmSendCommand(MC_MUTE, SetMUTE);
	CALL	LWRD ?0169
; 98.	        fmSendCommand(MC_CLOSE, 0);
	LD	BC,0
	LD	E,2
	CALL	LWRD ?0167
; 99.	        CloseFMPower2();
	IN	A,(194)
	SET	0,A
	OUT	(194),A
; 100.	        CloseFMPower1();
	IN	A,(194)
	SET	0,A
	OUT	(194),A
; 101.	         
; 102.	        return 0;
	LD	HL,0
; 103.	    }
	JP	LWRD ?0029
?0006:
; 104.	     
; 105.	    
; 106.	    TimeCount = 0;
	LD	HL,0
	LD	(TimeCount),HL
; 107.	    ///////////////////////////////
; 108.	    //    buffer_f3=input8(0xf3);        //由于外部rtc时间需要用到c0和c1口需要将其使能关闭
; 109.	    //    output8(0xf3,0x00);
; 110.	    //////////////////////////////
; 111.	    for (i = 0; i < 599; i++)
	INC	HL
	INC	HL
	ADD	HL,SP
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
?0008:
	LD	BC,33367
	DEC	HL
	LD	D,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,D
	LD	A,128
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0007
?0009:
; 112.	    {
; 113.	        j = 50;
	LD	IX,50
?0012:
; 114.	        for (; j > 0; j--)
	PUSH	IX
	POP	BC
	LD	HL,0
	OR	128
	SBC	HL,BC
	JP	PO,?0134
	XOR	H
?0134:
	JP	P,?0011
?0013:
; 115.	        {
; 116.	            ;
; 117.	        }
; 118.	    }
	DEC	IX
	JR	?0012
?0011:
	LD	HL,2
	ADD	HL,SP
	INC	(HL)
	INC	HL
	JR	NZ,?0008
	INC	(HL)
	JR	?0008
?0007:
?0016:
; 119.	    //if(!DRV_Install("I2C_SLA.DRV",0)) while(1) {;}
; 120.	
; 121.	    //clear message queue for make sure delay 0.5s
; 122.	    while (ap_get_message() != 0)
	CALL	LWRD ap_get_message
	OR	A
	JR	NZ,?0007
?0017:
?0015:
; 123.	    {
; 124.	        ;
; 125.	    }
; 126.	    ap_sleep(1);
	LD	DE,1
	LD	A,BYTE3 ap_sleep
	LD	HL,LWRD ap_sleep
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 127.	
; 128.	    res_fp = ResOpen("ui30.res"); //打开资源
	LD	DE,?0018
	LD	A,BYTE3 ResOpen
	LD	HL,LWRD ResOpen
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	(res_fp),HL
; 129.	    ASSERT(res_fp != NULL); //问题报错,DEBUG时有效
; 130.	    //-------安装ud驱动------------
; 131.	    DRV_ActiveUD(0x00, MODE_SLOW);
	LD	C,1
	LD	E,0
	CALL	LWRD DRV_ActiveUD
; 132.	
; 133.	    result = VMRead(&F_comval, VM_SYSTEM, sizeof(F_comval)); //读系统变量
	LD	HL,32
	PUSH	HL
	LD	BC,512
	LD	DE,g_comval
	CALL	LWRD VMRead
	POP	HL
; 134.	    ASSERT(result);
; 135.	    //check if valid
; 136.	    if (F_comval.magic != MAGIC_COMVAL) //第一次读,初始化
	LD	HL,57005
	LD	BC,(g_comval)
	AND	A
	SBC	HL,BC
	JR	Z,?0020
?0019:
; 137.	    {
; 138.	        DUMP_STRING("F_comval init-ed!");
; 139.	        //COMVAL_INIT(F_comval);
; 140.	        GetDefaultComval(&F_comval);
	LD	DE,g_comval
	CALL	LWRD GetDefaultComval
?0020:
; 141.	    }
; 142.	    ap_message_init(&F_comval); //系统消息(如RTC COUNTER)初始化
	LD	DE,g_comval
	LD	A,BYTE3 ap_message_init
	LD	HL,LWRD ap_message_init
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 143.	    result = VMRead(FMStationTab, VM_AP_RADIO, 80 + sizeof(fm_play_status_t) * 3 + 3); //长度重新计算
	LD	HL,110
	PUSH	HL
	LD	BC,8192
	LD	DE,FMStationTab
	CALL	LWRD VMRead
	POP	HL
; 144.	    ASSERT(result);
; 145.	    //    BatValue=GetBattery();
; 146.	    {
; 147.	        BYTE KeyTone_bak;
; 148.	        KeyTone_bak = F_comval.KeyTone;
	LD	A,(g_comval+29)
	LD	HL,7
	ADD	HL,SP
	LD	(HL),A
; 149.	        if (F_comval.KeyTone)
	OR	A
	JR	Z,?0022
?0021:
; 150.	        {
; 151.	            F_comval.KeyTone = 0;
	XOR	A
	LD	(g_comval+29),A
?0022:
; 152.	            //sKY_Beep(F_comval.KeyTone);
; 153.	        }
; 154.	        result = FMdeal(param);
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,BYTE3 FMdeal
	LD	HL,LWRD FMdeal
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	PUSH	HL
	POP	IY
; 155.	        F_comval.KeyTone = KeyTone_bak;
	LD	HL,7
	ADD	HL,SP
	LD	A,(HL)
	LD	(g_comval+29),A
; 156.	    }
; 157.	    //保存变量
; 158.	    fmSendCommand(MC_BACKUP, (int) &radio_param);
	LD	BC,radio_param
	LD	E,68
	CALL	LWRD ?0167
; 159.	    if (result == RESULT_RECORD) //截获FM中所有Rec热键录音。
	PUSH	IY
	POP	HL
	LD	A,51
	XOR	L
	OR	H
	JR	NZ,?0024
?0023:
; 160.	        result = RESULT_FMREC_START;
	LD	IY,34
?0024:
; 161.	    if ((result != RESULT_FMREC_NOSTART) && (result != RESULT_FMREC_START)) //非电台录音退出!for FM record by ccm
	PUSH	IY
	POP	HL
	LD	A,35
	XOR	L
	OR	H
	JR	Z,?0026
	LD	A,34
	XOR	L
	OR	H
	JR	Z,?0026
?0028:
?0027:
?0025:
; 162.	    {
; 163.	        fmSendCommand(MC_CLOSE, 0);
	LD	BC,0
	LD	E,2
	CALL	LWRD ?0167
; 164.	        //Close VCCOUT. by ccm
; 165.	        //        CloseFMPower();
; 166.	        CloseFMPower2();
	IN	A,(194)
	SET	0,A
	OUT	(194),A
; 167.	        CloseFMPower1();
	IN	A,(194)
	SET	0,A
	OUT	(194),A
?0026:
; 168.	    }
; 169.	    ///////////////////////////////
; 170.	    //由于外部rtc时间需要用到c0和c1口,需要将其使能恢复
; 171.	    //    output8(0xf3,buffer_f3);
; 172.	    //////////////////////////////
; 173.	    VMWrite(FMStationTab, VM_AP_RADIO);
	LD	BC,8192
	LD	DE,FMStationTab
	CALL	LWRD VMWrite
; 174.	    ResClose(res_fp); //资源关闭
	LD	DE,(res_fp)
	LD	A,BYTE3 ResClose
	LD	HL,LWRD ResClose
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 175.	
; 176.	    return result;
	PUSH	IY
	POP	HL
; 177.	}
?0029:
	EX	DE,HL
	LD	HL,10
	ADD	HL,SP
	LD	SP,HL
	EX	DE,HL
?0165:
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
FMdeal:
; 178.	
; 179.	int FMdeal(int test)
; 180.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	LD	HL,65524
	ADD	HL,SP
	LD	SP,HL
; 181.	    int result = 0, key;
; 182.	    char FMBand[3], buf[4] =
; 183.	    { "FM" };
	LD	HL,6
	ADD	HL,SP
	EX	DE,HL
	LD	HL,?0030
	LD	BC,4
	LDIR

⌨️ 快捷键说明

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